热门搜索 :
考研考公
您的当前位置:首页正文

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

来源:东饰资讯网


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

个属性,分别存放在S 和C 表中,但S 和C 表没有直接联系,必须通过SC 表建立它们二者

的联系。 C → SC → S 基本思路:

查询问题:设教学数据库Education 有三个关系: 学生关系S (SNO ,SNAME ,AGE ,

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

SEX ,SDEPT );学习关系SC (SNO ,CNO ,GRADE );课程关系C (CNO ,CNAME ,CDEPT ,

于第一步给出的Cno 集合中的某个元素Cno ;

TNAME )

(3)最后在S 关系中选出Sno 等于第二步中Sno 集合中某个元素的元组,取出Sno 和

(1)检索计算机系的全体学生的学号,姓名和性别; (2)检索学习课程号为C2的学

Sname 送入结果表列。 SELECT Sno ,Sname FROM S

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

WHERE Sno IN (SELECT Sno FROM SC

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

WHERE Cno IN (SELECT Cno FROM C

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

WHERE Cname=‘DS ’));

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

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

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

WHERE Cno=‘C2’ OR Cno=‘C4’;

S

WHERE Sdept =’CS ’;

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

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

FROM SC X ,SC Y

(3)检索选修课程名为“DS ”的学生学号与姓名 本查询涉及到学号、姓名和课程名三

第 1 页 共 10 页

WHERE X.Sno=Y.Sno AND SELECT DISTINCT Sno FROM SC AS X WHERE NOT EXISTS (SELECT *

http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html o=‘C2’ AND FROM SC AS Y

http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html o=‘C4’ ; WHERE Y.Sno=‘S3’ AND NOT EXISTS (SELECT *

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

WHERE Z.Sno=X.Sno AND

(7)检索学习全部课程的学生姓名; 在表S 中找学生,要求这个学生学了全部课程。http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html

换言之,在S 表中找学生,在C 中不存在一门课程,这个学生没有学。 o=http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html o ));

SELECT Sname FROM S 2.SELECT S.Sno ,Sname

WHERE NOT EXISTS (SELECT * FROM C FROM S ,SC WHERE S.Sno=SC.Sno AND

WHERE NOT EXISTS (SELECT * FROM SC WHERE SC.Sno=S.Sno AND http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html o=‘C2’;

http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html 1.SELECT Sno ,Sname FROM S WHERE Sno IN

o=http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html o )); ( SELECT Sno

(8)查询所学课程包含学生S3所学课程的学生学号。 分析:不存在这样的课程Y ,学 FROM SC

生S3选了Y ,而其他学生没有选。 WHERE Cno=‘C2’) 1.SELECT Sname FROM S WHERE Sno NOT IN ( SELECT Sno FROM SC

第 2 页 共 10 页

WHERE Cno=‘C2’); 2.SELECT Sname FROM S WHERE NOT EXISTS ( SELECT * FROM SC WHERE 8:查所有不姓“张”的学生的姓名。

SC.Sno=S.Sno AND Cno=‘C2’); 9:查DB_Design课程的课程号。

设教学数据库Education有三个关系: 10:查缺考的学生的学号和课程号。

学生关系S(SNO,SNAME,AGE,SEX,SDEPT); 11:查年龄为空值的学生的学号和姓名。

学习关系SC(SNO,CNO,GRADE); 12:查计算机系20岁以下的学生的学号和姓名。

课程关系C(CNO,CNAME,CDEPT,TNAME) 13:查计算机系、数学系、信息系的学生姓名、性别。14:查询选修了C3课程的学生的

查询问题: 学号和成绩,其结果按分数的降序排列。

1:查所有年龄在20岁以下的学生姓名及年龄。 15:查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序

2:查考试成绩有不及格的学生的学号 排列。

3:查所年龄在20至23岁之间的学生姓名、系别及年龄。 16:查询学生总人数。

4:查计算机系、数学系、信息系的学生姓名、性别。5:查既不是计算机系、数学系、 17:查询选修了课程的学生人数。

又不是信息系的学生姓名、性别 18:计算选修了C1课程的学生平均成绩。

6:查所有姓“刘”的学生的姓名、学号和性别。 19:查询学习C3课程的学生最高分数。

7:查姓“上官”且全名为3个汉字的学生姓名。 20:查询各个课程号与相应的选课人数。

第 3 页 共 10 页

21:查询计算机系选修了3门以上课程的学生的学号。22:求基本表S中男同学的每一 35:查询选修了全部课程的学生姓名。

年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。 36:查询所学课程包含学生S3所学课程的学生学号(1)比较

23:查询每个学生及其选修课程的情况。 例1:查所有年龄在20岁以下的学生姓名及年龄。

24:查询选修了C2课程且成绩在90分以上的所有学生。25:查询每个学生选修的课程 SELECT Sname,Sage

名及其成绩。 FROM S

26:统计每一年龄选修课程的学生人数。 WHERE Sage=20)

27:查询选修了C2课程的学生姓名。 例2:查考试成绩有不及格的学生的学号

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

29:查询选修课程名为“数据库”的学生学号和姓名。30:查询与“张三”在同一个系 FROM SC

学习的学生学号、姓名和系别。 WHERE grade3;

31:查询选修课程名为“数据库”的学生学号和姓名。32:查询选修了C2课程的学生姓 WHERE子句与HAVING短语的根本区别在于作用对象不同。WHERE子句作用于基本表或视

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

33:查询所有未选修C2课程的学生姓名。 例22:求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数

34:查询与“张三”在同一个系学习的学生学号、姓名和系别。 升序排列,人数相同按年龄降序排列。

第 4 页 共 10 页

SELECT Sage,COUNT(Sno) FROM S WHERE Ssex='M' GROUP BY Sage HAVING COUNT(*)> 50 ORDER BY 2,Sage DESC; 二、多表查询 1、联接查询 例23:查询每个学生及其选修课程的情况。 SELECT S.Sno,Sname,Sage,Ssex,Sdept,Cno,Grade FROM S, SC WHERE S.Sno=SC.Sno; 例24:查询选修了C2课程且成绩在90分以上的所有学生。 SELECT S.Sno,Sname

FROM S,SC

WHERE S.Sno=SC.Sno

AND http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html o=‘C2’ AND SC.Grade > 90;

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

SELECT S.Sno,Sname,Cname,SC.Grade

FROM S,SC,C

WHERE S.Sno=SC.Sno AND

http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html

o=http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html o

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

SELECT Sage,COUNT(DISTINCT S.Sno)

FROM S,SC

第 5 页 共 10 页

WHERE S.Sno=SC.Sno WHERE Cno=‘C2’);

GROUP BY S; 例28:查询与“张三”在同一个系学习的学生学号、姓名和系别。

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

分组,在每一组中的学生年龄相同。此时的SELECT子句应对每一组分开进行操作,在每一组 中,年龄只有一个值,统计的人数是这一组中的学生人数。 1、嵌套查询 SELECT Sdept

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

指父查询与子查询之间用IN进行联接,判断某个属性列值是否在子查询的结果中。 WHERE Sname= 例27:查询选修了C2课程的学生姓名。 SELECT Sno SELECT Sname FROM S

FROM S WHERE Sdept= WHERE Sno IN ( SELECT Sno SELECT Sno FROM SC FROM S

第 6 页 共 10 页(1)确定“张三”所在的系;

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

‘张三’;

,Sname,Sdept

‘X’

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

,Sname,Sdept

WHERE Sdept IN (SELECT Sno

(SELECT Sdept FROM SC

FROM S WHERE Cno IN

WHERE Sname=‘张三’); 例29:查询选修课程名为“数据库”的学生学号和姓名。 FROM C

本查询涉及到学号、姓名和课程名三个属性,分别存放在S和C表中,但S和C表没有 WHERE Cname=直接联系,必须通过SC表建立它们二者的联系。 C → SC → S (2) 基本思路: (1)首先在C表中找出“DB”课程的课程号Cno;(2)然后在SC表中找出Cno等于第 一步给出的Cno 集合中的某个元素Cno; SELECT Sno (3)最后在S关系中选出Sno等于第二步中Sno 集合中某个元素的元组,取出Sno 和 FROM S

Sname送入结果表列。 SELECT Sno,Sname WHERE Sdept =

FROM S WHERE Sno IN FROM S

第 7 页 共 10 页(SELECT Cno

‘DB’));联接查询方式

带有比较运算符的子查询

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

,Sname,Sdept

(SELECT Sdept

WHERE Sname=‘张三’); 1.SELECT Sname

例31:查询选修课程名为“数据库”的学生学号和姓名。 SELECT Sno,Sname FROM S

FROM S WHERE Sno IN

WHERE Sno IN (SELECT Sno FROM SC WHERE Cno = (SELECT Cno FROM C WHERE Cname=‘DB’)); FROM S AS S1, S AS S2 (3)带有EXISTS谓词的子查询 (1)带有EXISTS谓词的子查询不返回任何实际数据,它只产生逻辑值。 例32:查询选修了C2课程的学生姓名。 FROM SC

WHERE Cno= 2.SELECT Sname

FROM S

WHERE EXISTS

FROM SC

WHERE SC.Sno=S.Sno AND Cno= SELECT Sname

第 8 页 共 10 页( SELECT Sno

‘C2’);

( SELECT *

‘C2’);

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

FROM S 相关子查询

WHERE NOT EXISTS 例35:查询选修了全部课程的学生姓名。

( SELECT * 在表S中找学生,要求这个学生学了全部课程。换言之,在S表中找学生,在C中不存

FROM SC 在一门课程,这个学生没有学。

WHERE SC.Sno=S.Sno AND Cno=‘C2’); SELECT Sname

[NOT]EXISTS 实际上是一种内、外层互相关的嵌套查询,只有当内层引用了外层的值, FROM S

这种查询才有意义。 WHERE NOT EXISTS

例34:查询与“张三”在同一个系学习的学生学号、姓名和系别。 (SELECT *

SELECT Sno,Sname,Sdept FROM C

FROM S AS S1 WHERE NOT EXISTS

WHERE EXISTS (SELECT *

(SELECT * FROM SC

FROM S AS S2 WHERE SC.Sno=S.Sno AND

WHERE S2.Sdept=S1. Sdept AND S2.Sname=‘张三’); http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html

第 9 页 共 10 页

o=http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html o)); 单纯的课本内容,并不能满足学生的需要,通过补充,达到内容的完善

例36:查询所学课程包含学生S3所学课程的学生学号分析:不存在这样的课程Y,学生 教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。教育革命的对策

S3选了Y,而其他学生没有选。 SELECT DISTINCT Sno FROM SC AS X WHERE NOT EXISTS

(SELECT *

FROM SC AS Y

WHERE Y.Sno=‘S3’ AND NOT EXISTS

(SELECT *

FROM SC AS Z

WHERE Z.Sno=X.Sno AND

http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html

o=http://.docsj.com/doc/d33e82944b7302768e9951e79b89680202d86b33.html o));是手脑联盟,结果是手与脑的力量都可以大到不可思议。

第 10 页 共 10 页

因篇幅问题不能全部显示,请点此查看更多更全内容

Top