数据库中SQL查询语句习题含的答案.docx

上传人:b****3 文档编号:13286739 上传时间:2023-06-12 格式:DOCX 页数:16 大小:35.97KB
下载 相关 举报
数据库中SQL查询语句习题含的答案.docx_第1页
第1页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第2页
第2页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第3页
第3页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第4页
第4页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第5页
第5页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第6页
第6页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第7页
第7页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第8页
第8页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第9页
第9页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第10页
第10页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第11页
第11页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第12页
第12页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第13页
第13页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第14页
第14页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第15页
第15页 / 共16页
数据库中SQL查询语句习题含的答案.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据库中SQL查询语句习题含的答案.docx

《数据库中SQL查询语句习题含的答案.docx》由会员分享,可在线阅读,更多相关《数据库中SQL查询语句习题含的答案.docx(16页珍藏版)》请在冰点文库上搜索。

数据库中SQL查询语句习题含的答案.docx

数据库中SQL查询语句习题含的答案

数据库中SQL查询语句习题含的答案

查询问题:

设教学数据库Education有三个关系:

学生关系S(SNO,SNAME,AGE,SEX,SDEPT);学习关系SC(SNO,CNO,GRADE);课程关系C(CNO,CNAME,CDEPT,TNAME)

(1)检索计算机系的全体学生的学号,姓名和性别;

(2)检索学习课程号为C2的学生学号与姓名;

(3)检索选修课程名为“DS”的学生学号与姓名;

(4)检索选修课程号为C2或C4的学生学号;

(5)检索至少选修课程号为C2和C4的学生学号;

(6)检索不学C2课的学生姓名和年龄;

(7)检索学习全部课程的学生姓名;

(8)查询所学课程包含学生S3所学课程的学生学号。

(1)检索计算机系的全体学生的学号,姓名和性别;

SELECTSno,Sname,Sex

FROMS

WHERESdept=’CS’;

(2)检索学习课程号为C2的学生学号与姓名;

 

(3)检索选修课程名为“DS”的学生学号与姓名

本查询涉及到学号、姓名和课程名三个属性,分别存放在S和C表中,但S和C表没有直接联系,必须通过SC表建立它们二者的联系。

C→SC→S

基本思路:

(1)首先在C表中找出“DS”课程的课程号Cno;

(2)然后在SC表中找出Cno等于第一步给出的Cno集合中的某个元素Cno;

(3)最后在S关系中选出Sno等于第二步中Sno集合中某个元素的元组,取出Sno和Sname送入结果表列。

SELECTSno,Sname

FROMS

WHERESnoIN

(SELECTSno

FROMSC

WHERECnoIN

(SELECTCno

FROMC

WHERECname=‘DS’));

 

(4)检索选修课程号为C2或C4的学生学号;

SELECTSno

FROMSC

WHERECno=‘C2’ORCno=‘C4’;

 

(5)检索至少选修课程号为C2和C4的学生学号;

SELECTSno

FROMSCX,SCY

WHEREX.Sno=Y.SnoANDX.Cno=‘C2’ANDY.Cno=‘C4’;

(6)检索不学C2课的学生姓名和年龄;

 

(7)检索学习全部课程的学生姓名;

在表S中找学生,要求这个学生学了全部课程。

换言之,在S表中找学生,在C中不存在一门课程,这个学生没有学。

SELECTSname

FROMS

WHERENOTEXISTS

(SELECT*

FROMC

WHERENOTEXISTS

(SELECT*

FROMSC

WHERESC.Sno=S.SnoANDSC.Cno=C.Cno));

(8)查询所学课程包含学生S3所学课程的学生学号。

分析:

不存在这样的课程Y,学生S3选了Y,而其他学生没有选。

SELECTDISTINCTSno

FROMSCASX

WHERENOTEXISTS

(SELECT*

FROMSCASY

WHEREY.Sno=‘S3’ANDNOTEXISTS

(SELECT*

FROMSCASZ

WHEREZ.Sno=X.SnoANDZ.Cno=Y.Cno));

 

设教学数据库Education有三个关系:

学生关系S(SNO,SNAME,AGE,SEX,SDEPT);

学习关系SC(SNO,CNO,GRADE);

课程关系C(CNO,CNAME,CDEPT,TNAME)

查询问题:

1:

查所有年龄在20岁以下的学生姓名及年龄。

2:

查考试成绩有不及格的学生的学号

3:

查所年龄在20至23岁之间的学生姓名、系别及年龄。

4:

查计算机系、数学系、信息系的学生姓名、性别。

5:

查既不是计算机系、数学系、又不是信息系的学生姓名、性别

6:

查所有姓“刘”的学生的姓名、学号和性别。

7:

查姓“上官”且全名为3个汉字的学生姓名。

8:

查所有不姓“张”的学生的姓名。

9:

查DB_Design课程的课程号。

10:

查缺考的学生的学号和课程号。

11:

查年龄为空值的学生的学号和姓名。

12:

查计算机系20岁以下的学生的学号和姓名。

13:

查计算机系、数学系、信息系的学生姓名、性别。

14:

查询选修了C3课程的学生的学号和成绩,其结果按分数的降序排列。

15:

查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。

16:

查询学生总人数。

17:

查询选修了课程的学生人数。

18:

计算选修了C1课程的学生平均成绩。

19:

查询学习C3课程的学生最高分数。

20:

查询各个课程号与相应的选课人数。

21:

查询计算机系选修了3门以上课程的学生的学号。

22:

求基本表S中男同学的每一年龄组(超过50人)有多少人?

要求查询结果按人数升序排列,人数相同按年龄降序排列。

23:

查询每个学生及其选修课程的情况。

24:

查询选修了C2课程且成绩在90分以上的所有学生。

25:

查询每个学生选修的课程名及其成绩。

26:

统计每一年龄选修课程的学生人数。

27:

查询选修了C2课程的学生姓名。

28:

查询与“张三”在同一个系学习的学生学号、姓名和系别。

29:

查询选修课程名为“数据库”的学生学号和姓名。

30:

查询与“张三”在同一个系学习的学生学号、姓名和系别。

31:

查询选修课程名为“数据库”的学生学号和姓名。

32:

查询选修了C2课程的学生姓名。

33:

查询所有未选修C2课程的学生姓名。

34:

查询与“张三”在同一个系学习的学生学号、姓名和系别。

35:

查询选修了全部课程的学生姓名。

36:

查询所学课程包含学生S3所学课程的学生学号

(1)比较

例1:

查所有年龄在20岁以下的学生姓名及年龄。

SELECTSname,Sage

FROMS

WHERESage<20;(NOTage>=20)

例2:

查考试成绩有不及格的学生的学号

SELECTDISTINCTSno

FROMSC

WHEREgrade<60;

(2)确定范围

例3:

查所年龄在20至23岁之间的学生姓名、系别及年龄。

SELECTSname,Sdept,Sage

FROMS

WHERESageBETWEEN20AND23;

(3)确定集合

例4:

查计算机系、数学系、信息系的学生姓名、性别。

SELECTSname,Ssex

FROMS

WHERESdeptIN(’CS’,‘IS’,‘MATH’);

例5:

查既不是计算机系、数学系、又不是信息系的学生姓名、性别

SELECTSname,Ssex

FROMS

WHERESdeptNOTIN(’CS’,‘IS’,‘MATH’);

(4)字符匹配

例6:

查所有姓“刘”的学生的姓名、学号和性别。

SELECTSname,Sno,Ssex

FROMS

WHERESnameLIKE‘刘%’;

例7:

查姓“上官”且全名为3个汉字的学生姓名。

SELECTSname

FROMS

WHERESnameLIKE‘上官__’;

例8:

查所有不姓“张”的学生的姓名。

SELECTSname,Sno,Ssex

FROMS

WHERESnameNOTLIKE‘张%’;

例9:

查DB_Design课程的课程号。

SELECTCno

FROMC

WHERECnameLIKE‘DB\_Design’ESCAPE‘\’;

(5)涉及空值的查询

例10:

查缺考的学生的学号和课程号。

SELECTSno,Cno

FROMSC

WHEREGradeISNULL;(不能用=代替)

{有成绩的WHEREGradeISNOTNULLL;}

例11:

查年龄为空值的学生的学号和姓名。

SELECTSno,Sname

FROMS

WHERESageISNULL;

(6)多重条件查询

例12:

查计算机系20岁以下的学生的学号和姓名。

SELECTSno,Sname

FROMS

WHERESdept=‘CS’ANDSage<20;

例13:

查计算机系、数学系、信息系的学生姓名、性别。

SELECTSname,Ssex

FROMS

WHERESdept=’CS’ORSdept=‘IS’ORSdept=’MATH’);

3、对查询结果排序

例14:

查询选修了C3课程的学生的学号和成绩,其结果按分数的降序排列。

SELECTSno,Grade

FROMSC

WHERECno=‘C3’

ORDERBYGradeDESC;

例15:

查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。

SELECT*

FROMS

ORDERBYSdep,SageDESC;

4.聚合函数的使用

例16:

查询学生总人数。

SELECTCOUNT(*)

FROMS

例17:

查询选修了课程的学生人数。

SELECTCOUNT(DISTINCTSno)

FROMSC

例18:

计算选修了C1课程的学生平均成绩。

SELECTAVG(Grade)

FROMSC

WHERECno=‘C1’;

例19:

查询学习C3课程的学生最高分数。

SELECTMAX(Grade)

FROMSC

WHERECno=‘C3’;

 

5、对查询结果分组

例20:

查询各个课程号与相应的选课人数。

SELECTCno,COUNT(Sno)

FROMSC

GROUPBYCno;

该SELECT语句对SC表按Cno的取值进行分组,所有具有相同Cno值的元组为一组,然后对每一组作用聚合函数COUNT以求得该组的学生人数。

如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件组,则可以使用HAVING短语指定筛选条件。

例21:

查询计算机系选修了3门以上课程的学生的学号。

SELECTSno

FROMSC

WHERESdept=‘CS’

GROUPBYSno

HAVINGCOUNT(*)>3;

WHERE子句与HAVING短语的根本区别在于作用对象不同。

WHERE子句作用于基本表或视图,从中选择满足条件的元组。

HAVING短语作用于组,从中选择满足条件的组。

例22:

求基本表S中男同学的每一年龄组(超过50人)有多少人?

要求查询结果按人数升序排列,人数相同按年龄降序排列。

SELECTSage,COUNT(Sno)

FROMS

WHERESsex='M'

GROUPBYSage

HAVINGCOUNT(*)>50

ORDERBY2,SageDESC;

二、多表查询

1、联接查询

例23:

查询每个学生及其选修课程的情况。

SELECTS.Sno,Sname,Sage,Ssex,Sdept,Cno,Grade

FROMS,SC

WHERES.Sno=SC.Sno;

例24:

查询选修了C2课程且成绩在90分以上的所有学生。

SELECTS.Sno,Sname

FROMS,SC

WHERES.Sno=SC.Sno

ANDSC.Cno=‘C2’

ANDSC.Grade>90;

例25:

查询每个学生选修的课程名及其成绩。

SELECTS.Sno,Sname,Cname,SC.Grade

FROMS,SC,C

WHERES.Sno=SC.SnoANDSC.Cno=C.Cno

 

例26:

统计每一年龄选修课程的学生人数。

SELECTSage,COUNT(DISTINCTS.Sno)

FROMS,SC

WHERES.Sno=SC.Sno

GROUPBYS;

由于要统计每一个年龄的学生人数,因此要把满足WHERE子句中条件的查询结果按年龄分组,在每一组中的学生年龄相同。

此时的SELECT子句应对每一组分开进行操作,在每一组中,年龄只有一个值,统计的人数是这一组中的学生人数。

1、嵌套查询

(1)带有IN谓词的子查询

指父查询与子查询之间用IN进行联接,判断某个属性列值是否在子查询的结果中。

例27:

查询选修了C2课程的学生姓名。

SELECTSname

FROMS

WHERESnoIN

(SELECTSno

FROMSC

WHERECno=‘C2’);

例28:

查询与“张三”在同一个系学习的学生学号、

姓名和系别。

分析:

(1)确定“张三”所在的系;

(2)查找所有在X系学习的学生。

SELECTSdept

FROMS

WHERESname=‘张三’;

SELECTSno,Sname,Sdept

FROMS

WHERESdept=‘X’

FROMSASS1,SASS2

WHERES1.Sdept=S2.Sdept

ANDS2.Sname=‘张三’

把第一步查询嵌入到第二步查询中,用以构造第二步查询的条件。

SELECTSno,Sname,Sdept

FROMS

WHERESdeptIN

(SELECTSdept

FROMS

WHERESname=‘张三’);

例29:

查询选修课程名为“数据库”的学生学号和姓名。

本查询涉及到学号、姓名和课程名三个属性,分别存放在S和C表中,但S和C表没有直接联系,必须通过SC表建立它们二者的联系。

C→SC→S

基本思路:

(1)首先在C表中找出“DB”课程的课程号Cno;

(2)然后在SC表中找出Cno等于第一步给出的Cno集合中的某个元素Cno;

(3)最后在S关系中选出Sno等于第二步中Sno集合中某个元素的元组,取出Sno和Sname送入结果表列。

SELECTSno,Sname

FROMS

WHERESnoIN

(SELECTSno

FROMSC

WHERECnoIN

(SELECTCno

FROMC

WHERECname=‘DB’));

联接查询方式

(2)带有比较运算符的子查询

例30:

查询与“张三”在同一个系学习的学生学号、

姓名和系别。

SELECTSno,Sname,Sdept

FROMS

WHERESdept=

(SELECTSdept

FROMS

WHERESname=‘张三’);

例31:

查询选修课程名为“数据库”的学生学号和姓名。

SELECTSno,Sname

FROMS

WHERESnoIN

(SELECTSno

FROMSC

WHERECno=

(SELECTCno

FROMC

WHERECname=‘DB’));

(3)带有EXISTS谓词的子查询

(1)带有EXISTS谓词的子查询不返回任何实际数据,它只产生逻辑值。

例32:

查询选修了C2课程的学生姓名。

1.SELECTSname

FROMS

WHERESnoIN

(SELECTSno

FROMSC

WHERECno=‘C2’);

2.SELECTSname

FROMS

WHEREEXISTS

(SELECT*

FROMSC

WHERESC.Sno=S.SnoANDCno=‘C2’);

 

例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,而其他学生没有选。

SELECTDISTINCTSno

FROMSCASX

WHERENOTEXISTS

(SELECT*

FROMSCASY

WHEREY.Sno=‘S3’ANDNOTEXISTS

(SELECT*

FROMSCASZ

WHEREZ.Sno=X.SnoANDZ.Cno=Y.Cno));

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2