数据库SQL查询语句练习.docx
- 文档编号:5825686
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:13
- 大小:34.46KB
数据库SQL查询语句练习.docx
《数据库SQL查询语句练习.docx》由会员分享,可在线阅读,更多相关《数据库SQL查询语句练习.docx(13页珍藏版)》请在冰豆网上搜索。
数据库SQL查询语句练习
(1)
查询语句练习题SQL数据库.
C4的学生学号;(有三个关系:
4)检索选修课程号为C2或设教学数据库EducationSELECTSno,,AGE,SEX,SDEPT);(SNO学习关系SC学生关系S(SNO,SNAMEFROMSC
),CNAME,CDEPT,TNAMECNO,GRADE);课程关系C(CNOWHERECno=‘C2'ORCno=‘C4';查询问题:
1)检索计算机系的全体学生的学号,姓名和性别;((5)检索至少选修课程号为C2和C4的学生学号;C2的学生学号与姓名;
(2)检索学习课程号为SELECTSno
”的学生学号与姓名;(3)检索选修课程名为“DSFROMSCX,SCY
C4的学生学号;(4)检索选修课程号为C2或WHEREX.Sno=Y.SnoANDX.Cno=‘C2'ANDY.Cno=‘C4';
(5)检索至少选修课程号为C2和C4的学生学号;
)检索不学C2课的学生姓名和年龄;(6(6)检索不学C2课的学生姓名和年龄;
)检索学习全部课程的学生姓名;(7
1.SELECTSname2.SELECTSname,SageS3所学课程的学生学号。
(8)查询所学课程包含学生FROMSFROMS
WHERESnoNOTINWHERENOTEXISTS
(1)检索计算机系的全体学生的学号,姓名和性别;(SELECTSno(SELECT*
SexSname,SELECTSno,FROMSCFROMSC
FROMS
WHERECno=‘C2');WHERESC.Sno=S.Sno';'WHERESdept=CSANDCno=‘C2');
)检索学习课程号为(2C2的学生学号与姓名;(7)检索学习全部课程的学生姓名;
在表S中找学生,要求这个学生学了全部课程。
换言之,在S表Sname
1.SELECTSno,Sname
,2.SELECTS.SnoFROMS
中找学生,在C中不存在一门课程,这个学生没有学。
SC
,FROMSWHERESnoINWHERES.Sno=SC.SnoSELECTSnameSELECTSno(;‘ANDSC.Cno=C2'FROMS
FROMSC
)
'C2Cno=WHERE‘WHERENOTEXISTS
(SELECT*
FROMC
WHERENOTEXISTS(SELECT*
FROMSC
WHERESC.Sno=S.SnoANDSC.Cno=C.Cno));
(8)查询所学课程包含学生S3所学课程的学生学号。
DS)检索选修课程名为“”的学生学号与姓名3(分析:
不存在这样的课程Y,学生S3选了Y,而学生X没有选。
S本查询涉及到学号、姓名和课程名三个属性,分别存放在
SELECTDISTINCTSno表建立它们CS和C表中,但和表没有直接联系,必须通过SCFROMSCX
SCSC→→二者的联系。
WHERENOTEXISTS基本思路:
(SELECT*
C)首先在(1表中找出“;CnoDS”课程的课程号FROMSCY
集合中的某)等于第一步给出的表中找出然后在SCCnoCno2(WHEREY.Sno=‘S3'ANDNOTEXISTS;Cno个元素(SELECT*集合中某个元S)最后在3(关系中选出等于第二步中SnoSno
FROMSCZ
素的元组,取出送入结果表列。
和SnoSnameWHEREZ.Sno=X.SnoANDZ.Cno=Y.Cno));Sname,SELECTSnoFROMS
WHERESnoINSELECTSno(FROMSC
WHERECnoIN
SELECTCno(FROMC
))DS‘WHERECname=';
33:
查询所有未选修C2课程的学生姓名。
34:
查询与“张三”在同一个系学习的学生学号、姓名和系别。
35:
查询选修了全部课程的学生姓名。
36:
查询所学课程包含学生S3所学课程的学生学号
(1)比较
设教学数据库有三个关系:
Education例1:
查所有年龄在20岁以下的学生姓名及年龄。
;SEX,SDEPT)学生关系S(SNO,SNAME,AGE,
SELECTSname,Sage);学习关系SC(SNO,CNO,GRADEFROMS
),TNAMECNO课程关系C(,CNAME,CDEPTWHERESage<20;(NOTage>=20)查询问题:
岁以下的学生姓名及年龄。
201:
查所有年龄在例2:
查考试成绩有不及格的学生的学号
:
查考试成绩有不及格的学生的学号2SELECTDISTINCTSno
FROMSC
23岁之间的学生姓名、系别及年龄。
3:
查所年龄在20至WHEREgrade<60;:
查计算机系、数学系、信息系的学生姓名、性别。
4:
查既不是计算机系、数学系、又不是信息系的学生姓名、性5
(2)确定范围别例3:
查所年龄在20至23岁之间的学生姓名、系别及年龄。
6:
查所有姓“刘”的学生的姓名、学号和性别。
SELECTSname,Sdept,Sage个汉字的学生姓名。
7:
查姓“上官”且全名为3FROMS
WHERESageBETWEEN20AND23;8:
查所有不姓“张”的学生的姓名。
9:
查DB_Design课程的课程号。
10:
查缺考的学生的学号和课程号。
(3)确定集合
:
查年龄为空值的学生的学号和姓名。
11例4:
查计算机系、数学系、信息系的学生姓名、性别。
岁以下的学生的学号和姓名。
:
查计算机系1220SELECTSname,Ssex
:
查计算机系、数学系、信息系的学生姓名、性别。
13FROMS
WHERESdeptIN('CS',‘IS',‘MATH');课程的学生的学号和成绩,其结果按分数的C3:
查询选修了14降序排列。
例5:
查既不是计算机系、数学系、又不是信息系的学生姓名、:
查询全体学生的情况,查询结果按所在系升序排列,对同一15性别系中的学生按年龄降序排列。
SELECTSname,Ssex16:
查询学生总人数。
FROMS
17:
查询选修了课程的学生人数。
WHERESdeptNOTIN('CS',‘IS',‘MATH');
18课程的学生平均成绩。
:
计算选修了C1(C319:
查询学习课程的学生最高分数。
4)字符匹配
例6:
查询各个课程号与相应的选课人数。
20:
查所有姓“刘”的学生的姓名、学号和性别。
SELECTSname,Sno,Ssex321:
查询计算机系选修了门以上课程的学生的学号。
FROMS
有多少人?
S:
22求基本表中男同学的每一年龄组人)(超过50WHERESnameLIKE‘刘%';要求查询结果按人数升序排列,人数相同按年龄降序排列。
23:
查询每个学生及其选修课程的情况。
例7:
查姓“上官”且全名为3个汉字的学生姓名。
SELECTSname:
查询选修了24分以上的所有学生。
课程且成绩在C290FROMS
:
查询每个学生选修的课程名及其成绩。
25WHERESnameLIKE‘上官__';26:
统计每一年龄选修课程的学生人数。
C2:
查询选修了27课程的学生姓名。
例8:
查所有不姓“张”的学生的姓名。
28:
查询与“张三”在同一个系学习的学生学号、姓名和系别。
SELECTSname,Sno,Ssex
FROMS
:
查询选修课程名为“数据库”的学生学号和姓名。
29WHERESnameNOTLIKE‘张%';30:
查询与“张三”在同一个系学习的学生学号、姓名和系别。
例9:
查DB_Design课程的课程号。
31:
查询选修课程名为“数据库”的学生学号和姓名。
SELECTCno
课程的学生姓名。
C2:
查询选修了32.
FROMC
WHERECno=‘C3';
;‘\'‘DB\_Design'ESCAPEWHERECnameLIKE(5)涉及空值的查询:
查缺考的学生的学号和课程号。
例105、对查询结果分组SELECTSno,Cno例20:
查询各个课程号与相应的选课人数。
FROMSC
=代替);(不能用WHEREGradeISNULLSELECTCno,COUNT(Sno)
ISNOTNULLL;}WHERE{有成绩的Grade
FROMSCGROUPBYCno;
:
查年龄为空值的学生的学号和姓名。
例11该SELECT语句对SC表按Cno的取值进行分组,所有具有相同SELECTSno,SnameCno值的元组为一组,然后对每一组作用聚合函数COUNT以求得FROMS
该组的学生人数。
WHERESageISNULL;
(6)多重条件查询如果分组后还要求按一定的条件对这些组进行筛选,最终只输岁以下的学生的学号和姓名。
20例12:
查计算机系出满足指定条件组,则可以使用HAVING短语指定筛选条件。
Sname,SELECTSno
FROMS
例21:
查询计算机系选修了3门以上课程的学生的学号。
ANDSage<20;CSSdept=‘'WHERESELECTSnoFROMSC
:
查计算机系、数学系、信息系的学生姓名、性别。
例13WHERESdept=‘CS'
,SsexSELECTSnameGROUPBYSno
FROMS
HAVINGCOUNT(*)>3;
'Sdept='‘ISORSdeptCSWHERESdept=''OR=WHERE子句与HAVING短语的根本区别在于作用对象不同。
WHEREMATH');子句作用于基本表或视图,从中选择满足条件的元组。
HAVING3、对查询结果排序短语作用于组,从中选择满足条件的组。
课程的学生的学号和成绩,其结果按分数例14:
查询选修了C3的降序排列。
例22:
求基本表S中男同学的每一年龄组(超过50人)有多少,GradeSELECTSno
人?
要求查询结果按人数升序排列,人数相同按年龄降序排列。
FROMSC
C3Cno=WHERE‘'SELECTSage,COUNT(Sno)
ORDERBYGradeDESC;
FROMS
WHERESsex='M'对同查询结果按所在系升序排列,:
查询全体学生的情况,例15GROUPBYSage一系中的学生按年龄降序排列。
HAVINGCOUNT(*)>50SELECT*ORDERBY2,SageDESC;FROMS
,ORDERBYSdepSageDESC;二、多表查询
1、联接查询4.聚合函数的使用例23:
查询每个学生及其选修课程的情况。
16:
查询学生总人数。
例SELECTS.Sno,Sname,Sage,Ssex,Sdept,Cno,Grade*)(SELECTCOUNTFROMS,SC
FROMS
WHERES.Sno=SC.Sno;17例:
查询选修了课程的学生人数。
DISTINCTSno()COUNTSELECT例24:
查询选修了C2课程且成绩在90分以上的所有学生。
FROMSC
SELECTS.Sno,Sname例18C1:
计算选修了课程的学生平均成绩。
FROMS,SC
)GradeVGASELECT(WHERES.Sno=SC.SnoFROMSC
ANDSC.Cno=‘C2'C1‘WHERECno=;'ANDSC.Grade>90;:
查询学习C3课程的学生最高分数。
19例
SELECT)Grade(MAX例25:
查询每个学生选修的课程名及其成绩。
SELECTS.Sno,Sname,Cname,SC.GradeFROMSC
C
,SC,FROMS
ANDSC.Cno=C.CnoWHERES.Sno=SC.Sno
(1)首先在C表中找出“DB”课程的课程号Cno;
(2)然后在SC表中找出Cno等于第一步给出的Cno集合中的某个元素Cno;:
统计每一年龄选修课程的学生人数。
例26(3)最后在S关系中选出Sno等于第二步中Sno集合中某个元),COUNT(DISTINCTS.SnoSELECTSageSC
FROMS,素的元组,取出Sno和Sname送入结果表列。
WHERES.Sno=SC.SnoSELECTSno,Sname
GROUPBYS;FROMS
子因此要把满足WHERE由于要统计每一个年龄的学生人数,WHERESnoIN
(SELECTSno句中条件的查询结果按年龄分组,在每一组中的学生年龄相同。
FROMSC
子句应对每一组分开进行操作,在每一组中,年SELECT此时的WHERECnoIN
龄只有一个值,统计的人数是这一组中的学生人数。
(SELECTCno
FROMC
、嵌套查询1WHERECname=‘DB'));
(1)带有IN谓词的子查询联接查询方式进行联接,判断某个属性列值指父查询与子查询之间用IN
(2)带有比较运算符的子查询是否在子查询的结果中。
例30:
查询与“张三”在同一个系学习的学生学号、例27:
查询选修了C2课程的学生姓名。
姓名和系别。
SnameSELECT
SELECTSno,Sname,SdeptS
FROM
INWHERESnoFROMS
Sno(SELECTWHERESdept=SC
FROM(SELECTSdeptC2‘');WHERECno=
FROMS
WHERESname=‘张三');28例:
查询与“张三”在同一个系学习的学生学号、姓名和系别。
例31:
查询选修课程名为“数据库”的学生学号和姓名。
分析:
SELECTSno,Sname
(1)确定“张三”所在的系;FROMS
系学习的学生。
X2()查找所有在WHERESnoIN
SELECTSdept(SELECTSnoFROMS
FROMSC
WHERESname=‘张三';WHERECno=(SELECTCnoSdept,Sname,SELECTSnoFROMC
FROMS
WHERECname=‘DB'));‘WHERESdept=X'
把第一步查询嵌入到第二步查询中,用以构造第二步查询的条(3)带有EXISTS谓词的子查询
件。
(1)带有EXISTS谓词的子查询不返回任何实际数据,它只产SS2
SFROMSSname,SELECTSnoSdept逻辑值。
WHERE
FROMS
S1.Sdept=S2.Sdept例32:
查询选修了C2课程的学生姓名。
INSdeptWHERE
1.SELECTSnameSELECTSdept(
FROMS
FROMS
WHERESnoIN‘张三'WHERESname=);(SELECTSno
FROMSC
例:
查询选修课程名为“数据库”的学生学号和姓名。
29WHERECno=‘C2');
S本查询涉及到学号、姓名和课程名三个属性,分别存放在2.SELECTSname
FROMS
表建立它们C和S表中,但C和SC表没有直接联系,必须通过WHEREEXISTSS→SCC二者的联系。
→(SELECT*基本思路:
SC
FROM
WHERESC.Sno=S.SnoANDCno=‘C2');(SELECT*
FROMSCZ
WHEREZ.Sno=X.SnoANDZ.Cno=Y.Cno));
例33:
查询所有未选修C2课程的学生姓名。
SELECTSname
FROMS
WHERENOTEXISTS
(SELECT*
FROMSC
WHERESC.Sno=S.SnoANDCno=‘C2');
[NOT]EXISTS实际上是一种内、外层互相关的嵌套查询,
只有当内层引用了外层的值,这种查询才有意义。
例34:
查询与“张三”在同一个系学习的学生学号、
姓名和系别。
SELECTSno,Sname,Sdept
FROMSASS1
WHEREEXISTS
(SELECT*
FROMSASS2
WHERES2.Sdept=S1.SdeptANDS2.Sname=‘张三');
相关子查询
例35:
查询选修了全部课程的学生姓名。
在表S中找学生,要求这个学生学了全部课程。
换言之,在
S表中找学生,在C中不存在一门课程,这个学生没有学。
SELECTSname
FROMS
WHERENOTEXISTS
(SELECT*
FROMC
WHERENOTEXISTS
(SELECT*
FROMSC
WHERESC.Sno=S.SnoANDSC.Cno=C.Cno));
例36:
查询所学课程包含学生S3所学课程的学生学号
分析:
不存在这样的课程Y,学生S3选了Y,而学生X没有选。
SELECTDISTINCTSno
FROMSCX
WHERENOTEXISTS
(SELECT*
FROMSCY
NOTEXISTS
AND'S3‘WHEREY.Sno=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 SQL 查询 语句 练习