综合练习二习题.docx
- 文档编号:3098648
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:11
- 大小:19.63KB
综合练习二习题.docx
《综合练习二习题.docx》由会员分享,可在线阅读,更多相关《综合练习二习题.docx(11页珍藏版)》请在冰豆网上搜索。
综合练习二习题
综合练习
(二)
一、用SQL语句创建如下三张表:
学生表(Student)、课程表(Course)和学生选课表(SC),三张表结构如下:
注:
一、二两题需要将命令放入*.sql脚本中,然后利用脚本进行创建表及数据的录入
Student表结构
列名
说明
数据类型
约束
sno
学号
字符串,长度为7
主键
sname
姓名
字符串,长度为10
非空
ssex
性别
字符串,长度为2
取‘男’或‘女’
sage
年龄
整数
取值15~45
sdept
所在系
字符串,长度为20
默认为‘计算机系’
Course表结构
列名
说明
数据类型
约束
cno
课程号
字符串,长度为10
主键
cname
课程名
字符串,长度为20
非空
ccredit
学分
整数
取值大于0
semster
学期
整数
取值大于0
period
学时
整数
取值大于0
SC表结构
列名
说明
数据类型
约束
sno
学号
字符串,长度为7
主键,引用Student的外键
cno
课程号
字符串,长度为10
主键,引用Course的外键
grade
成绩
整数
取值0~100
答案:
一、Student表
CREATETABLEStudent(
snoVARCHAR2(7)PRIMARYKEY,
snameVARCHAR2(10)NOTNULL,
ssexVARCHAR2
(2)CHECK(ssex=‘男’ORssex=‘女’),
sageNUMBER
(2)CHECK(sage>=15ANDsage<=45),
sdeptVARCHAR2(20)DEFAULT‘运算机系’
)
二、Course表
CREATETABLECourse(
cnoVARCHAR2(10)NOTNULL,
cnameVARCHAR2(20)NOTNULL,
ccreditNUMBER
(2)CHECK(ccredit>0),
semesterNUMBER
(2)CHECK(semester>0),
periodNUMBER(3)CHECK(period>0),
CONTRAINTcourse_cno_pkPRIMARYKEY(cno)
)
3、SC表
CREATETABLESC(
snochar(7)NOTNULL,
cnochar(10)NOTNULL,
gradetinyintCHECK(grade>=0ANDgrade<=100),
CONTRAINTsc_sno_cno_pkPRIMARYKEY(sno,cno),
CONTRAINTstudent_sno_fkFOREIGNKEY(sno)REFERENCEStudent(sno),
CONTRAINTcourse_cno_fkFOREIGNKEY(cno)REFERENCECourse(cno)
)
二、利用SQL语句别离向Student、Course、SC表中加入如下数据:
Student表数据
sno
Sname
ssex
sage
sdept
9512101
李勇
男
19
计算机系
9512102
刘晨
男
20
计算机系
9512103
王敏
女
20
计算机系
9512104
张立
男
22
信息系
9512105
钱小平
女
21
信息系
9512106
吴宾
女
20
数学系
9512107
王大力
男
19
数学系
Course表数据
cno
cname
ccredit
semester
c01
计算机文化学
3
1
c02
Java
8
5
c03
计算机网络
4
3
c04
数据库基础
5
6
c05
高等数学
6
2
c06
数据结构
7
4
C07
VB
3
4
SC表数据
sno
cno
grade
9512101
c01
90
9512101
c02
9512102
c01
78
9512102
c03
66
9512103
c04
82
9512104
c06
75
三、完成如下查询
一、查询全部学生的学号和姓名
SELECTsno,snamefromStudent
二、查询全部学生的姓名、学号和所在系
SELECTsname,sno,sdeptfromStudent
3、查询全部学生的姓名及其诞生年份
分析:
由于Student表中只记录了学生的年龄,而没有记录学生的诞生年份,所以需要通过计算取得学生的诞生年份,即用当前年减去年龄,取得诞生年份。
SELECTsname,2011–sageFROMStudent
―或―
SELECTsname,to_number(to_char(sysdate,’yyyy’))–sageFROMStudent
4、查询全部学生的姓名和诞生年份,并在诞生年份列前加入一个列,此列的每行数据均为“YearofBirth”常量值
SELECTsnamem,‘YearofBirth’,to_number(to_char(sysdate,’yyyy’))–sageFROMStudent
五、在选课表(SC)中查询有哪些学生选修了课程,并列出学生的学号
SELECTsnoFROMSC
在结果集中会有许多重复的行(实际上一个学生选修了多少门课程,其学号就会在结果集中重复出现多少次)。
利用DISTINCT关键字就可以够去掉结果集中的重复行。
去掉结果集中的重复行
SELECTDISTINCTsnoFROMSC
六、查询运算机系全部学生的姓名
SELECTsnameFROMStudentWHEERsdept=‘运算机系’
7、查询所有年龄在20岁以下的学生的姓名及年龄
SELECTsname,sageFROMStudentWHEERsage<20
八、查询考试成绩不合格的学生的学号
当一个学生有多门不极格课程时,只列出一个学号。
SELECTDISTINCTsnoFROMSCWHEREgrade<60andgradeisnotnull
九、查询年龄在20~23岁之间的学生的姓名、所在系和年龄
SELECTsname,sdept,sage
FROMStudent
WHEREsageBETWEEN20AND23
10、查询年龄不在20~23之间的学生的姓名、所在系和年龄
SELECTsname,sdept,sage
FROMStudent
WHEREsageNOTBETWEEN20AND23
1一、查询信息系、数学系、和运算机系学生的姓名和性别
SELECTsname,ssex,
FROMStudent
WHEREsdeptIN(‘信息系’,’数学系’,’运算机系’)
1二、查询既不属于信息系、数学系、也不属于运算机系学生的姓名和性别
SELECTsname,ssex,
FROMStudent
WHEREsdeptNOTIN(‘信息系’,’数学系’,’运算机系’)
13、查询姓“张”的学生的详细信息
SELECT*FROMStudentWHEREsnameLIKE‘张%’
14、查询学生表中姓“张”、姓“李”、姓“刘”的学生的情形
SELECT*FROMStudentWHEREsnameLIKE‘张%’ORsnameLIKE‘李%’ORsnameLIKE‘刘%’
1五、查询名字中第2个字为“小”或“大”字的学生姓名和学号
SELECTsname,sno
FROMStudent
WHEREsnameLIKE‘_小%’ORsnameLIKE‘_大%’
1六、查询所有不姓“刘”的学生
SELECTsname,sno
FROMStudent
WHEREsnameNOTLIKE‘刘%’
17、从学生表中查询学号的最后一名不是2、3、5的学生的情形
SELECT*
FROMStudent
WHEREsnoNOTLIKE‘%2’ANDNOTLIKE‘%3’
ANDNOTLIKE‘%5’
1八、查询无考试成绩的学生的学号和相应的课程号
SELECTsno,cno
FROMSC
WHEREgradeISNULL
1九、查询所有有考试成绩的学生的学号和课程号
SELECTsno,cno
FROMSC
WHEREgradeISNOTNULL
20、查询运算机系年龄在20岁以下的学生的姓名
SELECTsname
FROMStudent
WHEREsdept=‘运算机系’ANDsage<20
2一、查询选修了课程“c02”的学生的学号及其成绩,查询结果按成绩降序排列
SELECTsno,gradeFROMSCWHEREcno=‘c02’
ORDERBYgradeDESC
2二、查询全部学生的信息,查询结果按所在系的系名升序排列,同一系的学生按年龄降序排列
SELECT*FROMStudent
ORDERBYsdept,sageDESC
23、统计学生总人数
SELECTCOUNT(sno)FROMStudent
24、统计选修了课程的学生的人数
由于一个学生能够选多门课程,应利用DISTINCT关键字去掉重复值。
SELECTCOUNT(DISTINCTsno)FROMSC
2五、计算学号为9512101的学生的考试总成绩之和
SELECTSUM(grade)FROMSCWHEREsno=‘9512101’
2六、计算课程“c01”的学生的考试平均成绩
SELECTAVG(grade)FROMSCWHEREcno=‘c01’
27、查询选修了课程“c01”的学生的最高分和最低分
SELECTMAX(grade),MIN(grade)FROMSCWHEREcno=‘c01’
2八、查询年龄最大的学生的姓名
SELECTsnameFROMStudent
WHEREsage=(SELECTMAX(sage)FROMStudent)
2九、统计每门课程的选课人数,列出课程号和人数
分析:
该语句第一将查询结果按cno的值分组,所有cno值相同的记录归为一组,然后再用COUNT函数对每一组进行计算,求得每组的学生人数。
SELECTcnoas课程号,COUNT(sno)as选课人数
FROMSC
GROUPBYcno
30、查询每名学生的选课门数和平均值
SELECTsno学号,COUNT(cno)选
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 综合 练习 习题
![提示](https://static.bdocx.com/images/bang_tan.gif)