数据库SQL查询语句练习_第1页
数据库SQL查询语句练习_第2页
数据库SQL查询语句练习_第3页
数据库SQL查询语句练习_第4页
数据库SQL查询语句练习_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 (1) 查询语句练习题SQL数据库 C4的学生学号;(有三个关系: 4)检索选修课程号为C2或设教学数据库EducationSELECT Sno ,AGE,SEX,SDEPT);(SNO学习关系SC学生关系S(SNO,SNAMEFROM SC ),CNAME,CDEPT,TNAMECNO,GRADE);课程关系C(CNOWHERE Cno=C2 OR Cno=C4; 查询问题: 1)检索计算机系的全体学生的学号,姓名和性别;(5)检索至少选修课程号为C2和C4的学生学号; C2的学生学号与姓名;(2)检索学习课程号为SELECT Sno ”的学生学号与姓名;(3)检索选修课程名为“DSFRO

2、M SC X,SC Y C4的学生学号;(4)检索选修课程号为C2或WHERE X.Sno=Y.Sno AND X.Cno=C2 AND Y.Cno=C4 ; (5)检索至少选修课程号为C2和C4的学生学号; )检索不学C2课的学生姓名和年龄;(6(6)检索不学C2课的学生姓名和年龄; )检索学习全部课程的学生姓名;(7 1.SELECT Sname 2.SELECT Sname,Sage S3所学课程的学生学号。(8)查询所学课程包含学生 FROM S FROM S WHERE Sno NOT IN WHERE NOT EXISTS (1)检索计算机系的全体学生的学号,姓名和性别; ( SE

3、LECT Sno ( SELECT * Sex Sname,SELECT Sno, FROM SC FROM SC FROM S WHERE Cno=C2); WHERE SC.Sno=S.Sno ;WHERE Sdept =CS AND Cno=C2); )检索学习课程号为(2C2的学生学号与姓名;(7)检索学习全部课程的学生姓名; 在表S中找学生,要求这个学生学了全部课程。换言之,在S表 Sname 1.SELECT Sno,Sname ,2.SELECT S.SnoFROM S 中找学生,在C中不存在一门课程,这个学生没有学。 SC , FROM SWHERE Sno IN WHERE

4、S.Sno=SC.Sno SELECT Sname SELECT Sno ( ;AND SC.Cno=C2FROM S FROM SC ) C2Cno= WHERE WHERE NOT EXISTS (SELECT * FROM C WHERE NOT EXISTS (SELECT * FROM SC WHERE SC.Sno=S.Sno AND SC.Cno=C.Cno)); (8)查询所学课程包含学生S3所学课程的学生学号。 DS)检索选修课程名为“”的学生学号与姓名3 (分析:不存在这样的课程Y,学生S3选了Y,而学生X没有选。 S本查询涉及到学号、姓名和课程名三个属性,分别存放在 SE

5、LECT DISTINCT Sno 表建立它们CS和C表中,但和表没有直接联系,必须通过SCFROM SC X S C SC 二者的联系。WHERE NOT EXISTS 基本思路: (SELECT * C)首先在(1表中找出“;CnoDS”课程的课程号 FROM SC Y 集合中的某)等于第一步给出的表中找出然后在SCCnoCno 2( WHERE Y.Sno=S3 AND NOT EXISTS ;Cno个元素 (SELECT * 集合中某个元S)最后在3(关系中选出等于第二步中SnoSno FROM SC Z 素的元组,取出送入结果表列。和Sno Sname WHERE Z.Sno=X.S

6、no AND Z.Cno=Y.Cno)); Sname ,SELECT SnoFROM S WHERE Sno IN SELECT Sno ( FROM SC WHERE Cno IN SELECT Cno ( FROM C )DS WHERE Cname=; 33:查询所有未选修C2课程的学生姓名。 34:查询与“张三”在同一个系学习的学生学号、姓名和系别。 35 :查询选修了全部课程的学生姓名。 36:查询所学课程包含学生 S3所学课程的学生学号 (1)比较 设教学数据库有三个关系:Education例1:查所有年龄在20岁以下的学生姓名及年龄。 ;SEX,SDEPT)学生关系S(SNO,

7、SNAME,AGE, SELECT Sname,Sage );学习关系SC(SNO,CNO,GRADE FROM S ),TNAMECNO课程关系C(,CNAME,CDEPT WHERE Sage=20) 查询问题: 岁以下的学生姓名及年龄。201:查所有年龄在例2:查考试成绩有不及格的学生的学号 :查考试成绩有不及格的学生的学号2 SELECT DISTINCT Sno FROM SC 23岁之间的学生姓名、系别及年龄。3:查所年龄在20至 WHERE grade60; :查计算机系、数学系、信息系的学生姓名、性别。4 :查既不是计算机系、数学系、又不是信息系的学生姓名、性5(2)确定范围

8、别例3:查所年龄在20至23岁之间的学生姓名、系别及年龄。 6:查所有姓“刘”的学生的姓名、学号和性别。 SELECT Sname,Sdept,Sage 个汉字的学生姓名。7:查姓“上官”且全名为3 FROM S WHERE Sage BETWEEN 20 AND 23; 8:查所有不姓“张”的学生的姓名。 9:查DB_Design课程的课程号。 10:查缺考的学生的学号和课程号。(3)确定集合 :查年龄为空值的学生的学号和姓名。11例4:查计算机系、数学系、信息系的学生姓名、性别。 岁以下的学生的学号和姓名。:查计算机系1220 SELECT Sname,Ssex :查计算机系、数学系、信息

9、系的学生姓名、性别。13 FROM S WHERE Sdept IN (CS, IS, MATH); 课程的学生的学号和成绩,其结果按分数的C3:查询选修了14 降序排列。例5:查既不是计算机系、数学系、又不是信息系的学生姓名、:查询全体学生的情况,查询结果按所在系升序排列,对同一15性别 系中的学生按年龄降序排列。 SELECT Sname,Ssex 16:查询学生总人数。 FROM S 17:查询选修了课程的学生人数。 WHERE Sdept NOT IN (CS, IS, MATH); 18 课程的学生平均成绩。:计算选修了C1( C319:查询学习课程的学生最高分数。4)字符匹配 例6

10、:查询各个课程号与相应的选课人数。20 :查所有姓“刘”的学生的姓名、学号和性别。 SELECT Sname,Sno,Ssex 321:查询计算机系选修了门以上课程的学生的学号。 FROM S 有多少人?S:22求基本表中男同学的每一年龄组人)(超过50 WHERE Sname LIKE 刘%; 要求查询结果按人数升序排列,人数相同按年龄降序排列。 23:查询每个学生及其选修课程的情况。例7:查姓“上官”且全名为3个汉字的学生姓名。 SELECT Sname :查询选修了24分以上的所有学生。课程且成绩在C290 FROM S :查询每个学生选修的课程名及其成绩。25 WHERE Sname

11、LIKE 上官_ _; 26:统计每一年龄选修课程的学生人数。 C2:查询选修了27课程的学生姓名。例8:查所有不姓“张”的学生的姓名。 28:查询与“张三”在同一个系学习的学生学号、姓名和系别。 SELECT Sname,Sno,Ssex FROM S :查询选修课程名为“数据库”的学生学号和姓名。29 WHERE Sname NOT LIKE 张%; 30:查询与“张三”在同一个系学习的学生学号、姓名和系别。例9:查DB_Design课程的课程号。 31:查询选修课程名为“数据库”的学生学号和姓名。 SELECT Cno 课程的学生姓名。C2:查询选修了32 FROM C WHERE Cn

12、o=C3; ;DB_Design ESCAPE WHERE Cname LIKE (5)涉及空值的查询 :查缺考的学生的学号和课程号。例105、对查询结果分组 SELECT Sno,Cno 例20:查询各个课程号与相应的选课人数。 FROM SC =代替) ; (不能用 WHERE Grade IS NULL SELECT Cno,COUNT(Sno) IS NOT NULLL; WHERE 有成绩的 Grade FROM SC GROUP BY Cno; :查年龄为空值的学生的学号和姓名。例11 该SELECT语句对SC表按Cno的取值进行分组,所有具有相同 SELECT Sno,Sname

13、 Cno值的元组为一组,然后对每一组作用聚合函数COUNT以求得FROM S 该组的学生人数。 WHERE Sage IS NULL; (6)多重条件查询 如果分组后还要求按一定的条件对这些组进行筛选,最终只输 岁以下的学生的学号和姓名。20例12:查计算机系出满足指定条件 组,则可以使用HAVING短语指定筛选条件。 Sname , SELECT Sno FROM S 例21:查询计算机系选修了3门以上课程的学生的学号。 AND Sage3; Sdept =IS OR Sdept CS WHERE Sdept = OR = WHERE子句与HAVING短语的根本区别在于作用对象不同。WHER

14、E MATH);子句作用于基本表或视图,从中选择满足条件的元组。HAVING 3、对查询结果排序短语作用于组,从中选择满足条件的组。 课程的学生的学号和成绩,其结果按分数例14:查询选修了C3 的降序排列。例22:求基本表S中男同学的每一年龄组(超过50人)有多少 ,Grade SELECT Sno 人?要求查询结果按人数升序排列,人数相同按年龄降序排列。 FROM SC C3Cno=WHERE SELECT Sage,COUNT(Sno) ORDER BY Grade DESC; FROM S WHERE Ssex=M 对同查询结果按所在系升序排列,:查询全体学生的情况,例15 GROUP

15、BY Sage 一系中的学生按年龄降序排列。 HAVING COUNT(*) 50 SELECT * ORDER BY 2,Sage DESC; FROM S , ORDER BY SdepSage DESC; 二、多表查询 1、联接查询 4.聚合函数的使用例23:查询每个学生及其选修课程的情况。 16:查询学生总人数。例 SELECT S.Sno,Sname,Sage,Ssex,Sdept,Cno,Grade *) ( SELECT COUNT FROM S, SC FROM S WHERE S.Sno=SC.Sno; 17例:查询选修了课程的学生人数。 DISTINCT Sno() COU

16、NTSELECT 例24:查询选修了C2课程且成绩在90分以上的所有学生。 FROM SC SELECT S.Sno,Sname 例18C1:计算选修了课程的学生平均成绩。 FROM S,SC )GradeVGA SELECT ( WHERE S.Sno=SC.Sno FROM SC AND SC.Cno=C2 C1 WHERE Cno=; AND SC.Grade 90; :查询学习C3课程的学生最高分数。19例 SELECT )Grade(MAX 例25:查询每个学生选修的课程名及其成绩。 SELECT S.Sno,Sname,Cname,SC.Grade FROM SC C ,SC,FR

17、OM S AND SC.Cno=C.Cno WHERE S.Sno=SC.Sno (1)首先在C表中找出“DB”课程的课程号Cno; (2)然后在SC表中找出Cno等于第一步给出的Cno 集合中的某 个元素Cno; :统计每一年龄选修课程的学生人数。例26(3)最后在S关系中选出Sno等于第二步中Sno 集合中某个元 ),COUNT(DISTINCT S.Sno SELECT SageSC FROM S , 素的元组,取出Sno 和Sname送入结果表列。 WHERE S.Sno=SC.Sno SELECT Sno,Sname GROUP BY S; FROM S 子 因此要把满足WHERE由

18、于要统计每一个年龄的学生人数, WHERE Sno IN (SELECT Sno 句中条件的查询结果按年龄分组,在每一组中的学生年龄相同。 FROM SC 子句应对每一组分开进行操作,在每一组中,年SELECT此时的 WHERE Cno IN 龄只有一个值,统计的人数是这一组中的学生人数。 (SELECT Cno FROM C 、嵌套查询1 WHERE Cname=DB); (1)带有IN谓词的子查询联接查询方式 进行联接,判断某个属性列值 指父查询与子查询之间用IN(2)带有比较运算符的子查询 是否在子查询的结果中。例30:查询与“张三”在同一个系学习的学生学号、 例27:查询选修了C2课程

19、的学生姓名。姓名和系别。 Sname SELECT SELECT Sno,Sname,Sdept S FROM IN WHERE Sno FROM S Sno ( SELECT WHERE Sdept = SC FROM (SELECT Sdept C2); WHERE Cno= FROM S WHERE Sname=张三); 28例:查询与“张三”在同一个系学习的学生学号、 姓名和系别。例31:查询选修课程名为“数据库”的学生学号和姓名。 分析: SELECT Sno,Sname (1)确定“张三”所在的系; FROM S 系学习的学生。X2()查找所有在 WHERE Sno IN SELE

20、CT Sdept (SELECT Sno FROM S FROM SC WHERE Sname= 张三; WHERE Cno = (SELECT Cno Sdept ,Sname,SELECT Sno FROM C FROM S WHERE Cname=DB); WHERE Sdept=X 把第一步查询嵌入到第二步查询中,用以构造第二步查询的条 (3)带有EXISTS谓词的子查询 件。(1)带有EXISTS谓词的子查询不返回任何实际数据,它只产S S2SFROMS Sname,SELECT SnoSdept 逻辑值。WHERE FROM S S1.Sdept=S2.Sdept 例32:查询选修

21、了C2课程的学生姓名。 IN Sdept WHERE 1.SELECT Sname SELECT Sdept ( FROM S FROM S WHERE Sno IN 张三WHERE Sname=); ( SELECT Sno FROM SC 例:查询选修课程名为“数据库”的学生学号和姓名。29 WHERE Cno=C2); S本查询涉及到学号、 姓名和课程名三个属性,分别存放在 2.SELECT Sname FROM S 表建立它们C和S表中,但C和SC表没有直接联系,必须通过 WHERE EXISTS S SC C 二者的联系。 ( SELECT * 基本思路:SC FROM WHERE SC.Sno=S.Sno AND Cno=C2); (SELECT * FROM SC Z WHE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论