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