综合练习二习题Word下载.docx
《综合练习二习题Word下载.docx》由会员分享,可在线阅读,更多相关《综合练习二习题Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
取‘男’或‘女’
sage
年龄
整数
取值15~45
sdept
所在系
字符串,长度为20
默认为‘计算机系’
Course表结构
cno
课程号
cname
课程名
ccredit
学分
取值大于0
semster
学期
period
学时
SC表结构
sno
主键,引用Student的外键
主键,引用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>
periodNUMBER(3)CHECK(period>
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表数据
Sname
9512101
李勇
男
19
计算机系
9512102
刘晨
20
9512103
王敏
女
9512104
张立
22
信息系
9512105
钱小平
21
9512106
吴宾
数学系
9512107
王大力
Course表数据
semester
c01
计算机文化学
3
1
c02
Java
8
5
c03
计算机网络
4
c04
数据库基础
6
c05
高等数学
2
c06
数据结构
7
C07
VB
SC表数据
90
<
NULL>
78
66
82
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<
八、查询考试成绩不合格的学生的学号
当一个学生有多门不极格课程时,只列出一个学号。
SELECTDISTINCTsnoFROMSCWHEREgrade<
60andgradeisnotnull
九、查询年龄在20~23岁之间的学生的姓名、所在系和年龄
SELECTsname,sdept,sage
FROMStudent
WHEREsageBETWEEN20AND23
10、查询年龄不在20~23之间的学生的姓名、所在系和年龄
WHEREsageNOTBETWEEN20AND23
1一、查询信息系、数学系、和运算机系学生的姓名和性别
SELECTsname,ssex,
FROMStudent
WHEREsdeptIN(‘信息系’,’数学系’,’运算机系’)
1二、查询既不属于信息系、数学系、也不属于运算机系学生的姓名和性别
WHEREsdeptNOTIN(‘信息系’,’数学系’,’运算机系’)
13、查询姓“张”的学生的详细信息
SELECT*FROMStudentWHEREsnameLIKE‘张%’
14、查询学生表中姓“张”、姓“李”、姓“刘”的学生的情形
SELECT*FROMStudentWHEREsnameLIKE‘张%’ORsnameLIKE‘李%’ORsnameLIKE‘刘%’
1五、查询名字中第2个字为“小”或“大”字的学生姓名和学号
SELECTsname,sno
WHEREsnameLIKE‘_小%’ORsnameLIKE‘_大%’
1六、查询所有不姓“刘”的学生
WHEREsnameNOTLIKE‘刘%’
17、从学生表中查询学号的最后一名不是2、3、5的学生的情形
SELECT*
WHEREsnoNOTLIKE‘%2’ANDNOTLIKE‘%3’
ANDNOTLIKE‘%5’
1八、查询无考试成绩的学生的学号和相应的课程号
SELECTsno,cno
FROMSC
WHEREgradeISNULL
1九、查询所有有考试成绩的学生的学号和课程号
WHEREgradeISNOTNULL
20、查询运算机系年龄在20岁以下的学生的姓名
SELECTsname
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)选