数据库设计实验报告.docx
- 文档编号:25881262
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:36
- 大小:280.09KB
数据库设计实验报告.docx
《数据库设计实验报告.docx》由会员分享,可在线阅读,更多相关《数据库设计实验报告.docx(36页珍藏版)》请在冰豆网上搜索。
数据库设计实验报告
课程设计
题目:
数据库设计实验报告
学部
学科门类
专业
学号
姓名
指导教师
20xx年xx月x日
SQL语句:
备注:
SQL语句的练习共用到了5张表格依次如下:
Student,cet4用于简单的单表查询,CetS,StudentIn,StudentPr用于多表查询
Student表
cet4表
CetS表
StudentIn表
StudentPr表
createdatabaseHBU_CET
createtableStudent(
IDvarchar(9)primarykey,
Namevarchar(6)unique,
Ageint,
Sexvarchar
(2),
Gradevarchar(6),
Chineseint,
Englishint,
Mathint,
ETimedatetime
)
insertintoStudentvalues('20114820','张杰',21,'男','大三',80,98,88,2013-10-10)
insertintoStudentvalues('20114821','张会',21,'女','大三',60,70,89,2013-10-10)
insertintoStudentvalues('20114822','张华',21,'女','大二',70,60,79,2013-10-10)
insertintoStudentvalues('20114823','王酒',20,'男','大二',70,57,79,2013-10-10)
select*fromStudent
execsp_addumpdevice'disk','testbook','c:
\Back\1234.bak'
backupdatabaseStudenttotestbook
selectNameas姓名fromStudent
deletefromStudentwhereAge<20
selectsum(Age)aszhfromStudent
selectIDas身份from(selecttop5*from(selecttop6*fromStudentasstudent1orderbyIDasc)asstudentsorderbyIDdesc)asstudenntdorderbyIDasc
select*fromStudent
go
select*fromStudentwhereNamelike'jing%'--like加通配符查询语句
select*fromStudentwhereNamelike'黎%[^华]'--不包括华
go
select*fromStudentwhereIDlike'201148001_'
select*fromStudentwhereIDlike'201148001_'
select*fromStudentwhereNamelike'[A-K]%'--查询名字首字在A-K之间
select*fromStudentwhereNamelike'[ajh]%'--[范围]%匹配
select*fromStudentwhereNamelike'[^A-K]%'---"^"取反
select*fromStudentwhereAgelike'[1-3]_'--匹配年龄在到岁间的人
select*fromStudentwhereNamelike'%12/%%'escape'/'--查询的项中含有通配符的处理‘escape’转移字符
select*fromStudentwhere(Name+Gradelike'%[h一]%')--多关键词的查询
/*select*,班级='2011级',英语=
case
whenEglishisNULLthen'暂无数据'
whenEglishisnotNULLthenCAST(Eglishasnvarchar(20))
end
fromStudent*/
select*,数学=
case
whenMathisnullthen'暂无数据'
whenMathISnotnullthenCAST(MathASnvarchar(10))
end
语文=
case
whenChineseisnullthen'暂无数据'
whenChineseISnotNULLthenCAST(ChineseASnvarchar(10))
end
fromStudent
go
selectCONVERT(nvarchar(12),GETDATE(),113)--转换时间格式
go
declare@numberint
set@number=0
set@number=+1
print@number
go
selectLTRIM('今天不是明天的继续保持战斗永不言弃')as格言-舍取空格函数-
go
selectSUBSTRING('保持战斗,永不言弃,我能坚持的就是永远的自信自信。
。
。
',1,20)as自己--截取函数
declare@titlenvarchar(20)
set@title='河北大学新闻传媒学院'
selectLEN(@title)astitlename----字符串长度函数
go
selectLOWER('dfdsdgfdasdFDGDFGDFdfgf')astitle
selectUPPER('dfdsdgfdasdFDGDFGDFdfgf')astitle
go--转换字符
selectREPLACE('计算色的我们都很善色vvvjjfh','色','*')astitle--屏蔽某些字符
declare@numberint
select@number=CHARINDEX('-','sdffdsfd-dfd')--返回字符在字符串中的位置
print@number
go
selectSUBSTRING('之我们中间爱失去的青春',1,5)astitle--字符串截取函数
selectYEAR(GETDATE())asdattime--获取年份
selectMONTH(getdate())asdatatime--获取月份
selectDAY(getdate())asdatatime--获取日期
go
----另一种
selectDATEPART(/*HH用简写*/HOUR,GETDATE())asdattime
--.......--类推
go
--DateName函数
/*
datepart缩写
年yy,yyyy
季度qq,q
月mm,m
年中的日dy,y
日dd,d
周wk,ww
星期dw,w
小时hh
分钟mi,n
秒ss,s
毫秒ms
微妙mcs
纳秒ns
*/
selectDATENAME(dy,'2012-12-23')as一年第几天
selectDATENAME(wk,getdate())asWEEKShow--howmanyweeksuntiltoday
selectDATENAME(Q,GETDATE())as第几季度
select*fromStudent
go
selectETimeas入学日期,DATEDIFF(d,ETime,getdate())as入学天数fromStudent--实现两个天数相减运算
go
deletefromStudentwhereDATEDIFF(yy,ETime,Getdate())>3
select*intoStudent1fromStudent
select*fromStudent
selectETime,DATEADD(yy,2,ETime)asNewEntimefromStudent--指定的日期增加一定的时间
selectETime,DATEADD(YY,2,DATEADD(DD,4,ETime))asnewtimefromStudent
go
--排序
select*fromStudentorderbyAgeasc,IDdesc--多关键字
select*fromStudentorderbyNamecollateChinese_prc_stroke_cs_as_ks_ws--按笔划数排序
select*fromStudentorderbyNamecollatechinese_prc_cs_as--按拼音进行排序
go
--聚和函数(将不考虑数据为NULL的值)
select*fromStudent
selectSUM(Math)as数学总分fromStudent--总分
selectAVG(Math)as平均分fromStudent
go
selectCOUNT(*)as人数fromStudentwhereGrade='大三'--统计某项人数
go
selectCOUNT(distinct(Grade))fromStudent--distinct去除重复后在统计
select*fromStudentwhereAge=(selectMAX(Age)fromStudent)--年龄最大的全部信息
go
selectGrade,count(Grade)as班级人数fromStudentgroupbyGrade
selectGrade,count(Grade)as班级人数fromStudentgroupbyGradehavingCOUNT(Grade)>2--统计班机人数大于
selectGrade,count(Grade)as班级人数fromStudentgroupbyGradehavingCOUNT(Grade)>1orderby班级人数asc
go
createtableoperation(
idint,
namenvarchar(20),
addernvarchar(30),
telnvarchar(20)notnulldefault('暂无一数据')
)--建立表格并向里边插入数据
go
insertintooperation(id,name,adder,tel)values(1,'dfgfd','dfgf','ddfg')
insertintooperationvalues(2,'dfgfd','dfgf','ddfg')
go
--批量插入
insertintooperation(id,name,adder,tel)
select9,'zhang','jis','nei'
unionallselect8,'jiu','shu','jius'
unionallselect3,'zuo','jii','jius'
go
--用代码创建复杂表
CREATETABLE[dbo].[Good](
[ID][int]IDENTITY(2011480000,1)NOTNULL,
[Name][nchar](10)NULL,
[Age][int]NULL,
[Sex][bit]NULL,
[tphone][nchar](10)NULL,
[Grade][nchar](10)NULL,
CONSTRAINT[PK_Good]PRIMARYKEYCLUSTERED--设置主键
(
[ID]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
go
insertintoGoodselectName,Age,Sex,GradefromStudent1whereChinese>90
select*fromGood
go
/*
插入数据时,自增长列是系统自动处理,不需要你来指定数值,你也指定不了。
只有将IDENTITY_INSERT为ON时插入数据时,自增长列你才可以指定一个值
比如我有一个表PZ,有如下列XH,ID,INX,KMID,FZZID,CODE,JFJE,DFJE,RQ,ZY其中XH是自增长,正常插入数据时
insertPZ(ID,INX,KMID,FZZID,CODE,JFJE,DFJE,RQ,ZY)VALUES(......)不需要指定XH列。
如果将IDENTITY_INSERT打开
setIDENTITY_INSERTPZON
插入数据时就可以给XH列指定值
INSERTPZ(XH,ID,INX,KMID,FZZID,CODE,JFJE,DFJE,RQ,ZY)VALUES(指定表中没有的数值,24389,3,1524,1,'0109',0,0,'2011.1.29','JK')
关闭IDENTITY_INSERT
SETIDENTITY_INSERTPZOFF*/
------------------------------------------------------更改列中某个数据
updateGoodsetName='卢贵房'whereID=2011480006
go
-------------------case语句的跟新
updateStudentsetDJ=case
whenMath>80then'优秀'
whenMath<80andMath>70then'良'
whenMath>60andMath<70then'及格'
whenMath<60then'差'
end
select*fromStudent
go
select*fromcet4
execsp_rename'cet4.校区','校区','COLUMN'--表格列明更改语句
execsp_rename'cet4.F13','姓名','column'
execsp_rename'cet4.F14','性别','column'
execsp_rename'cet4.F15','身份证件号','column'
execsp_rename'cet4.F16','总分','column'
execsp_rename'cet4.F17','缺考','column'
execsp_rename'cet4.F18','违纪','column'
execsp_rename'cet4.F19','听力分数','column'
execsp_rename'cet4.F20','阅读分数','column'
execsp_rename'cet4.F21','写作分数','column'
execsp_rename'cet4.F22','综合测试分数','column'
execsp_rename'cet4.F23','准考证号','column'
deletefromcet4whereID='NO.'--行的删除
select*fromcet4where姓名='高露露'
select*fromcet4where语言级别='CET4'orderby总分desc
select*fromcet4where班级名称='11电气'orderby总分desc
select*fromcet4
execsp_rename'Ward.F1','学号','column'
execsp_rename'Ward.F2','姓名','column'
execsp_rename'Ward.F3','班级','column'
execsp_rename'Ward.F4','备注','column'
execsp_rename'Ward.F5','学分绩点','column'
execsp_rename'Ward.F6','加权项','column'
execsp_rename'Ward.F7','总权值','column'
execsp_rename'Ward.F8','综合绩点','column'
execsp_rename'Ward.F9','编号','column'
execsp_rename'Ward.F10','奖项','column'
execsp_rename'Ward.F11','其他','column'
select*fromcet4
select*fromcet4
select*fromcet4where姓名='王海兴'
select*fromcet4where班级名称='11电气'
--子查询模块
select*fromcet4where班级名称='11电气'orderby总分desc
select*fromcet4where姓名in(select姓名fromStudentInwhere班级名称='11电气')orderby总分desc
select*fromcet4where班级名称in(select班级名称fromcet4where姓名='芦贵房')--方法
--自身链接完成上述操作
selectc1.专业名称,c1.姓名fromcet4c1,cet4c2wherec1.班级名称=c2.班级名称andc2.姓名='芦贵房'--方法
select*fromcet4where班级名称=(select班级名称fromcet4where姓名='芦贵房')--方法
select姓名fromcet4c1where总分>=(selectAVG(总分)fromcet4)
select姓名fromcet4where总分
selectCOUNT(姓名)fromcet4where总分
selectcet4.学号,cet4.姓名,cet4.性别,cet4.院系名称,cet4.身份证件号intoStudentfromcet4
select*fromStudent
selectcet4.准考证,cet4.语言级别,cet4.听力分数,cet4.阅读分数,cet4.写作分数,cet4.综合测试分数,cet4.总分intoCetScorefromcet4
select*fromCetScore
selectcet4.学号,cet4.准考证,cet4.年级,cet4.班级名称,cet4.专业名称intoSSfromcet4
select*fromSS
--[例]
select姓名,院系名称fromcet4where总分
--聚集函数实现
select姓名,院系名称fromcet4where总分>(selectMAX(总分)fromcet4where专业名称='法学')and专业名称<>'法学'
--[例]
select姓名fromStudentwhereexists(select*fromSSwhereStudent.学号=学号and班级名称='11电气')
--[例]
selectStudent.姓名fromStudentwherenotexists(select*fromSSwhereStudent.学号=学号and班级名称='11电气')
--[例]SQL中没有全称量词需将全称量词转为存在量词【查询】
select姓名fromStudentwherenotexists(
select*fromCetScorewherenotexists(Select*fromSSwhere学号=Student.学号and专业名称=SS.专业名称)
)
--[例]
--[例]
select*fromcet4wherecet4.年级='11'
UNION
select*fromcet4wherecet4.总分>='425'
--[例]【查询班和班参cet的同学】
Selectcet4.姓名fromcet4where班级名称='11电气'
union
selectcet4.姓名fromcet4where班级名称='11电气'
--[例]电气班总分大于分
select*fromcet4where班级名称='11电气'
INTERSECT
select*fromcet4where总分>='450'
--等同于
select*fromcet4where班级名称='11电气'and总分>='450'
--[例]
select姓名,学号fromcet4where总分>='460'and班级名称In(select班级名称='11电气')
--[例]
select学号,姓名fromcet4where班级名称='11电气'
except
select学号,姓名fromcet4where总分>='440'
--等同于
select*fromcet4where班级名称='11电气'and总分<='440'
--3.5.2【例】
createtableAvScore
(
班级CHAR(15),
平均分Float
);
insertintoAvScore(班级,平均分)select班级,AVG(总分)fromcet4GROUPby班级
select*fromAvSco
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 设计 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)