数据库5版SQL例题解答1Word格式文档下载.docx
《数据库5版SQL例题解答1Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据库5版SQL例题解答1Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
SELECTSname,SageFROMSWHERENOTSage>=20
例查考试成绩有不及格的学生的学号。
SELECTDISTINCTSnoFROMSCWHEREGrade<60;
例查询年龄在20至23岁之间的学生的姓名、系别和年龄。
SELECTSname,Sdept,SageFROMSWHERESageBETWEEN20and23
例查询年龄不在20至23岁之间的学生姓名、系别和年龄。
SELECTSname,Sdept,SageFROMSWHERESageNOTBETWEEN20AND23
例查出信息系(IS)、数学系(MA)和计算机科学系(CS)的学生的姓名和性别。
SELECTSname,SsexFROMSWHERESdeptIN(`IS'
`MA'
`CS'
)
例查既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。
SELECTSname,SsexFROMSWHERESdeptNOTIN(`IS'
`MA'
`CS'
例查询学号为95001的学生的详细情况。
SELECT*FROMSWHERESnoLIKE‘95001'
等价:
SELECT*FROMSWHERESno=‘95001'
例查所有姓刘的学生的姓名、学号和性别。
SELECTSname,Sno,SsexFROMSWHERESnameLIKE‘刘%'
例查姓“欧阳”且全名为3个汉字的学生的姓名。
SELECTSnameFROMSWHERESnameLIKE‘欧阳__'
;
例查名字中第二个字为“阳”字的学生的姓名和学号。
SELECTSname,SnoFROMSWHERESnameLIKE‘__阳%'
例查所有不姓刘的学生姓名。
SELECTSname,FROMSWHERESnameNOTLIKE‘刘%'
例查DB_Design课程的课程号和学分。
SELECTCno,CcreditFROMCourseWHERECnameLIKE‘DB\_Design'
ESCAPE'
\'
例查以“DB_”开头,且倒数第2个字符为i的课程的详细情况。
SELECT*FROMCourse
WHERECnameLIKE'
DB\_%i_'
ESCAPE'
例某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩,下面来查一下缺少成绩的学生的学号和相应的课程号。
SELECTSno,CnoFROMSCWHEREGradeISNULL
例查有成绩的学生学号和课程号。
SELECTSno,CnoFROMSCWHEREGradeISNOTNULL
例查CS系年龄在20岁以下的学生姓名。
SELECTSnameFROMSWHERESdept='
CS'
ANDSage<20
例查出信息系(IS)、数学系(MA)和计算机科学系(CS)的学生的姓名和性别。
SELECTSname,SsexFROMSWHERESdept='
IS'
ORSdept='
MA'
)
例查询学生总人数。
SELECTCOUNT(*)FROMS
例查询选修了课程的学生人数。
SELECTCOUNT(DISTINCTSno)FROMSC
例计算1号课程的学生平均成绩。
SELECTAVG(Grade)FROMSCWHERECno='
1'
例查询学习1号课程的学生最高分数。
SELECTMAX(Grade)FROMSCWHERECno='
例查询各个课程号与相应的选课人数。
SELECTCno,COUNT(Sno)FROMSCGROUPBYCno
例查询信息系选修了3门以上课程的学生的学号。
SELECTSnoFROMS,SCWHERESdept=”IS”ands.sno=sc.sno
GROUPBYsc.SnoHAVINGCOUNT(*)>3;
例查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列。
SELECTSno,GradeFROMSCWHERECno=”3“ORDERBYGradeDESC;
例查询全体学生情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。
SELECT*FROMSORDERBYSdept,SageDESC;
例查询男学生超过50人的年龄组,查询结果首先按人数升序,然后按年龄降序输出。
SELECTsage,count(sno)FROMS
wheressex=”男”
groupbysagehavingcount(*)>
50
ORDERBY2,SageDESC
三.多表连接查询
例查询学生情况及选修课程情况。
SELECTS.*,SC.*FROMS,SC
WHERES.Sno=SC.Sno
例卡氏积连接
SELECTS.*,SC.*FROMS,SC;
例自然连接
SELECTS.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROMS,SC
WHERES.Sno=Sc.Sno;
例查询每一门课的间接先修课号。
解:
SELECTFIRST.Cno,SECOND.Pcno
FROMCourseasFIRST,CourseasSECOND
WHEREFIRST.Pcno=SECOND.Cno;
例查找至少选修了2号和4号课程的学生的学号
解:
SELECTFIRST.sno
FROMSCasFIRST,SCasSECOND
WHEREFIRST.Sno=SECOND.SnoandFIRST.cno=’2’andSECOND.cno=’4’
例查询选修2号课程且成绩在90分以上的所有学生。
SELECTS.Sno,Sname
FROMS,SC
WHERES.Sno=SC.SnoANDSC.Cno='
2'
ANDSC.Grade>90
例查询每个学生选修的课程名及成绩。
SELECTS.Sno,Sname,Cname,Grade
FROMS,SC,Course
WHERES.Sno=SC.SnoandSC.Cno=Course.Cno;
例查询与“刘晨”同一个系的学生。
解:
SELECTSno,Sname,SdeptFROMS
WHERESdeptIn(SELECTSdeptFROMSWHERESname='
刘晨'
等价:
SELECTSno,Sname,SdeptFROMSasS1,SasS2
WHERES1.Sdept=S2.SdeptANDS2.Sname='
例查询选修了课程为“信息系统”的学生学号和姓名。
SELECTSno,SnameFROMSWHERESnoIN
(SELECTSnoFROMSCWHERECnoIN
(SELECTCnoFROMCourseWHERECname=’信息系统’));
SELECTSno,SnameFROMS,SC,Course
WHERES.Sno=SC.SnoANDSC.Cno=Course.CnoANDCourse.Cname=’信息系统’;
例查找至少选修2号和4号两门课程的学生学号
SELECTX.SnoFROMSCasX
WHERE(‘2’,’4’)in(SELECTcnoFROMSCasY
WHEREX.sno=Y.sno)
(‘2’,’4’)作为一个集合1,(SELECTcno…)作为集合2,
对于in操作:
集合1中每个元素都在集合2中,结果为真,否则为假;
对于notin操作:
集合1中某个元素不在集合2中,结果为真,否则为假;
例查找至少不选修2号或4号课程的学生学号
WHERE(‘2’,’4’)notin(SELECTcnoFROMSCasY
若为属性组,比较按字符串比较方式进行,例
(a1,a2)<=some{(b1,b2),(b3,b4),…}
(a1,a2)分别与(b1,b2),(b3,b4),…比较,每个比较为:
(a1,a2)<=some(b1,b2)比较等同于(a1<
b1)∨((a1=b1)∧(a2<
=b2))
例刘晨所在系的结果是一个唯一值:
SELECTSno,Sname,SdeptFROMS
WHERESdept=(SELECTSdeptFROMSWHERESname='
);
例查询选修了课程为“信息系统”的学生学号和姓名。
SELECTSno,SnameFROMS
WHERESnoIN(SELECTSnoFROMSC
WHERECno=(SELECTCnoFROMCourse
WHERECname='
信息系统'
))
例查找选修了2号课程的学生姓名
SELECTSnameFROMS
WHEREsno=some(SELECTsnoFROMSCWHEREcno='
WHEREsnoin(SELECTsnoFROMSCWHEREcno='
例查询比IS系某一学生年龄小的学生姓名。
SELECTSname,SageFROMS
WHERESage<some(SELECTSageFROMS
WHERESdept='
ANDSdept<>'
ORDERBYSageDESC;
WHERESage<
(SELECTMAX(Sage)FROMS
ORDERBYSageDESC
例查询比IS系所有学生年龄都小的学生姓名。
WHERESage<ALL(SELECTSageFROMS
ANDSdept<>'
(SELECTMIN(Sage)FROMSWHERESdept='
例查找平均成绩最高的学生学号
SELECTsnoFROMSC
GROUPBYsno
HAVINGavg(grade)>
=ALL(SELECTavg(grade)FROMSC
GROUPBYsno)
例4-45查询所有选修了1号课程的学生姓名。
SELECTSnameFROMS
WHEREEXISTS(SELECT*FROMSC
WHERESno=S.SnoANDCno='
WHERE‘1’in(SELECTcnoFROMSCWHERESno=S.Sno)
WHEREsnoin(SELECTsnoFROMSCWHEREcno=’1’)
SELECTSnameFROMS,SC
WHERESC.Sno=S.Snoandcno=‘1’
例查询所有未修1号课程的学生姓名。
WHERENOTEXISTS(SELECT*FROMSC
WHEREsnonotin(SELECTsnoFROMSCWHERECno='
例查询与“刘晨”同一个系的学生。
SELECTSno,Sname,SdeptFROMSasS1
WHEREEXISTS(SELECT*FROMSasS2WHERES2.Sdept=S1.SdeptANDS2.Sname='
例对全称量词和蕴函运算的处理,给定集合A={a1,a2,…,an}
x(p(x))≡┑x(┑(p(x))
x(P(x))=P(a1)∧P(a2)∧…∧P(an)
x(P(x))=P(a1)∨P(a2)∨…∨P(an)
例查询选修了全部课程的学生姓名。
关系代数:
Πsname((Πsno,cno(SC)÷
Πcno(course))∞s)
查询这样的学生姓名,不存在一门课程是他不选的。
SELECTSnameFROmS
WHERENOTEXISTS(SELECT*FROMCourse
WHERESno=S.SnoANDCno=Course.Cno))
分析:
┑x((p(x))〈=〉┑[P(a1)∨P(a2)∨…∨P(an)]
〈=〉┑p(a1)∧┑p(a2)∧…∧┑p(an)
对于下面的样表,SC为集合,p(x)谓词为:
Sno=S.SnoANDCno=Course.Cno。
s
course
SC
sno
sname
ssex
sage
sdept
cno
cname
cpno
Ccredit
grade
98001
张平
男
19
计算机
1
数据库
5
4
90
98002
王欣
女
2
数学
6
86
98003
李华
20
3
软件工程
92
98004
赵岩
18
外语
操作系统
7
80
数据结构
89
网络
67
C语言
87
77
94
(1)当s定位在第一个元组时,sno=“98001”,course定位在第一个记录,cno=“1”,内层的NOTEXISTS对SC的所有10个记录,形成谓词表达式:
[第一门课,数据库]=
┑(s.98001=SC.98001andcourse.1=SC.1)∧
┑(s.98001=SC.98001andcourse.1=SC.2)∧
┑(s.98001=SC.98001andcourse.1=SC.5)∧
┑(s.98001=SC.98001andcourse.1=SC.6)∧
┑(s.98001=SC.98001andcourse.1=SC.4)∧
┑(s.98001=SC.98001andcourse.1=SC.3)∧
┑(s.98001=SC.98001andcourse.1=SC.7)∧
┑(s.98001=SC.98002andcourse.1=SC.5)∧
┑(s.98001=SC.98002andcourse.1=SC.1)∧
┑(s.98001=SC.98002andcourse.1=SC.3)
course定位在第二个记录,形成谓词表达式:
[第二门课,数学]=
┑(s.98001=SC.98001andcourse.2=SC.1)∧
┑(s.98001=SC.98001andcourse.2=SC.2)∧
┑(s.98001=SC.98001andcourse.2=SC.5)∧
┑(s.98001=SC.98001andcourse.2=SC.6)∧
┑(s.98001=SC.98001andcourse.2=SC.4)∧
┑(s.98001=SC.98001andcourse.2=SC.3)∧
┑(s.98001=SC.98001andcourse.2=SC.7)∧
┑(s.98001=SC.98002andcourse.2=SC.5)∧
┑(s.98001=SC.98002andcourse.2=SC.1)∧
┑(s.98001=SC.98002andcourse.2=SC.3)
[第三门课,。
。
]=。
[第四门课,。
[第五门课,。
[第六门课,。
[第七门课,。
(2)外层的NOTEXISTS,形成谓词表达式:
学生‘98001’选中=┑[第一门课,。
]∧┑[第二门课,。
]∧┑[第三门课,。
]∧┑[第四门课,。
]∧┑[第五门课,。
]∧┑[第六门课,。
]∧┑[第七门课,。
]=
[(s.98001=SC.98001andcourse.1=SC.1)∨
(s.98001=SC.98001andcourse.1=SC.2)∨
(s.98001=SC.98001andcourse.1=SC.5)∨
(s.98001=SC.98001andcourse.1=SC.6)∨
(s.98001=SC.98001andcourse.1=SC.4)∨
(s.98001=SC.98001andcourse.1=SC.3)∨
(s.98001=SC.98001andcourse.1=SC.7)∨
(s.98001=SC.98002andcourse.1=SC.5)∨
(s.98001=SC.98002andcourse.1=SC.1)∨
(s.98001=SC.98002andcourse.1=SC.3)]∧
[(s.98001=SC.98001andcourse.2=SC.1)∨
(s.98001=SC.98001andcourse.2=SC.2)∨
(s.98001=SC.98001andcourse.2=SC.5)∨
(s.98001=SC.98001andcourse.2=SC.6)∨
(s.98001=SC.98001andcourse.2=SC.4)∨
(s.98001=SC.98001andcourse.2=SC.3)∨
(s.98001=SC.98001andcourse.2=SC.7)∨
(s.98001=SC.98002andcourse.2=SC.5)∨
(s.98001=SC.98002andcourse.2=SC.1)∨
(s.98001=SC.98002andcourse.2=SC.3)]∧
[…(s.98001=SC.98001andcourse.3=SC.3)∨…]∧
[…