数据库SQL查询语句练习题(1).docx

上传人:牧羊曲112 文档编号:3559897 上传时间:2023-03-13 格式:DOCX 页数:11 大小:39.97KB
返回 下载 相关 举报
数据库SQL查询语句练习题(1).docx_第1页
第1页 / 共11页
数据库SQL查询语句练习题(1).docx_第2页
第2页 / 共11页
数据库SQL查询语句练习题(1).docx_第3页
第3页 / 共11页
数据库SQL查询语句练习题(1).docx_第4页
第4页 / 共11页
数据库SQL查询语句练习题(1).docx_第5页
第5页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《数据库SQL查询语句练习题(1).docx》由会员分享,可在线阅读,更多相关《数据库SQL查询语句练习题(1).docx(11页珍藏版)》请在三一办公上搜索。

1、数据库SQL查询语句练习题设教学数据库Education有三个关系: 学生关系S;学习关系SC检索至少选修课程号为C2和C4的学生学号; SELECT Sno CNO,GRADE);课程关系C 查询问题: 检索计算机系的全体学生的学号,姓名和性别; 检索学习课程号为C2的学生学号与姓名; 检索选修课程名为“DS”的学生学号与姓名; 检索选修课程号为C2或C4的学生学号; 检索至少选修课程号为C2和C4的学生学号; 检索不学C2课的学生姓名和年龄; 检索学习全部课程的学生姓名; 查询所学课程包含学生S3所学课程的学生学号。 检索计算机系的全体学生的学号,姓名和性别; SELECT Sno,Sna

2、me,Sex FROM S WHERE Sdept =CS; 检索学习课程号为C2的学生学号与姓名; 1.SELECT Sno,Sname 2.SELECT S.Sno,Sname FROM S FROM S,SC WHERE Sno IN 检索选修课程名为“DS”的学生学号与姓名 本查询涉及到学号、姓名和课程名三个属性,分别存放在S和C表中,但S和C表没有直接联系,必须通过SC表建立它们二者的联系。 C SC S 基本思路: 首先在C表中找出“DS”课程的课程号Cno; 然后在SC表中找出Cno等于第一步给出的Cno 集合中的某个元素Cno; 最后在S关系中选出Sno等于第二步中Sno 集合

3、中某个元素的元组,取出Sno 和Sname送入结果表列。 SELECT Sno,Sname FROM S WHERE Sno IN ); 检索选修课程号为C2或C4的学生学号; SELECT Sno FROM SC WHERE Cno=C2 OR Cno=C4; FROM SC X,SC Y WHERE X.Sno=Y.Sno AND X.Cno=C2 AND Y.Cno=C4 ; 检索不学C2课的学生姓名和年龄; 1.SELECT Sname 2.SELECT Sname FROM S FROM S WHERE Sno NOT IN WHERE NOT EXISTS 检索学习全部课程的学生姓

4、名; 在表S中找学生,要求这个学生学了全部课程。换言之,在S表中找学生,在C中不存在一门课程,这个学生没有学。 SELECT Sname FROM S WHERE NOT EXISTS ); 查询所学课程包含学生S3所学课程的学生学号。 分析:不存在这样的课程Y,学生S3选了Y,而其他学生没有选。 SELECT DISTINCT Sno FROM SC AS X WHERE NOT EXISTS ); 设教学数据库Education有三个关系: 学生关系S; 学习关系SC; 课程关系C 查询问题: 1:查所有年龄在20岁以下的学生姓名及年龄。 2:查考试成绩有不及格的学生的学号 3:查所年龄在

5、20至23岁之间的学生姓名、系别及年龄。 4:查计算机系、数学系、信息系的学生姓名、性别。 5:查既不是计算机系、数学系、又不是信息系的学生姓名、性别 6:查所有姓“刘”的学生的姓名、学号和性别。 7:查姓“上官”且全名为3个汉字的学生姓名。 8:查所有不姓“张”的学生的姓名。 9:查DB_Design课程的课程号。 10:查缺考的学生的学号和课程号。 11:查年龄为空值的学生的学号和姓名。 12:查计算机系20岁以下的学生的学号和姓名。 13:查计算机系、数学系、信息系的学生姓名、性别。 14:查询选修了C3课程的学生的学号和成绩,其结果按分数的降序排列。 15:查询全体学生的情况,查询结果

6、按所在系升序排列,对同一系中的学生按年龄降序排列。 16:查询学生总人数。 17:查询选修了课程的学生人数。 18:计算选修了C1课程的学生平均成绩。 19:查询学习C3课程的学生最高分数。 20:查询各个课程号与相应的选课人数。 21:查询计算机系选修了3门以上课程的学生的学号。 22:求基本表S中男同学的每一年龄组有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。 23:查询每个学生及其选修课程的情况。 24:查询选修了C2课程且成绩在90分以上的所有学生。 25:查询每个学生选修的课程名及其成绩。 26:统计每一年龄选修课程的学生人数。 27:查询选修了C2课程的学生姓名。

7、28:查询与“张三”在同一个系学习的学生学号、姓名和系别。29:查询选修课程名为“数据库”的学生学号和姓名。 30:查询与“张三”在同一个系学习的学生学号、姓名和系别。31:查询选修课程名为“数据库”的学生学号和姓名。 32:查询选修了C2课程的学生姓名。 33:查询所有未选修C2课程的学生姓名。 34:查询与“张三”在同一个系学习的学生学号、姓名和系别。35:查询选修了全部课程的学生姓名。 36:查询所学课程包含学生S3所学课程的学生学号 比较 例1:查所有年龄在20岁以下的学生姓名及年龄。 SELECT Sname,Sage FROM S WHERE Sage=20) 例2:查考试成绩有不

8、及格的学生的学号 SELECT DISTINCT Sno FROM SC WHERE grade60; (2)确定范围 例3:查所年龄在20至23岁之间的学生姓名、系别及年龄。 SELECT Sname,Sdept,Sage FROM S WHERE Sage BETWEEN 20 AND 23; 确定集合 例4:查计算机系、数学系、信息系的学生姓名、性别。 SELECT Sname,Ssex FROM S WHERE Sdept IN ; 例5:查既不是计算机系、数学系、又不是信息系的学生姓名、性别 SELECT Sname,Ssex FROM S WHERE Sdept NOT IN ;

9、字符匹配 例6:查所有姓“刘”的学生的姓名、学号和性别。 SELECT Sname,Sno,Ssex FROM S WHERE Sname LIKE 刘%; 例7:查姓“上官”且全名为3个汉字的学生姓名。 SELECT Sname FROM S WHERE Sname LIKE 上官_ _; 例8:查所有不姓“张”的学生的姓名。 SELECT Sname,Sno,Ssex FROM S WHERE Sname NOT LIKE 张%; 例9:查DB_Design课程的课程号。 SELECT Cno FROM C WHERE Cname LIKE DB_Design ESCAPE ; (5)涉及

10、空值的查询 例10:查缺考的学生的学号和课程号。 SELECT Sno,Cno FROM SC WHERE Grade IS NULL; 有成绩的 WHERE Grade IS NOT NULLL; 例11:查年龄为空值的学生的学号和姓名。 SELECT Sno,Sname FROM S WHERE Sage IS NULL; 多重条件查询 例12:查计算机系20岁以下的学生的学号和姓名。 SELECT Sno,Sname FROM S WHERE Sdept=CS AND Sage3; WHERE子句与HAVING短语的根本区别在于作用对象不同。WHERE子句作用于基本表或视图,从中选择满足

11、条件的元组。HAVING短语作用于组,从中选择满足条件的组。 例22:求基本表S中男同学的每一年龄组有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。 SELECT Sage,COUNT 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课程且成绩在

12、90分以上的所有学生。 SELECT S.Sno,Sname FROM S,SC WHERE S.Sno=SC.Sno AND SC.Cno=C2 AND SC.Grade 90; 例25:查询每个学生选修的课程名及其成绩。 SELECT S.Sno,Sname,Cname,SC.Grade FROM S,SC,C WHERE S.Sno=SC.Sno AND SC.Cno=C.Cno 例26:统计每一年龄选修课程的学生人数。 SELECT Sage,COUNT FROM S,SC WHERE S.Sno=SC.Sno GROUP BY S; 由于要统计每一个年龄的学生人数,因此要把满足WHE

13、RE子句中条件的查询结果按年龄分组,在每一组中的学生年龄相同。此时的SELECT子句应对每一组分开进行操作,在每一组中,年龄只有一个值,统计的人数是这一组中的学生人数。 1、嵌套查询 (1)带有IN谓词的子查询 指父查询与子查询之间用IN进行联接,判断某个属性列值是否在子查询的结果中。 例27:查询选修了C2课程的学生姓名。 SELECT Sname FROM S WHERE Sno IN 确定“张三”所在的系; 查找所有在X系学习的学生。 SELECT Sdept FROM S WHERE Sname=张三; SELECT Sno,Sname,Sdept FROM S WHERE Sdept

14、=X 把第一步查询嵌入到第二步查询中,用以构造第二步查询的条件。 SELECT Sno,Sname,Sdept FROM S AS S1, S AS S2 FROM S WHERE S1.Sdept=S2.Sdept WHERE Sdept IN AND S2.Sname=张三 ; 例29:查询选修课程名为“数据库”的学生学号和姓名。 本查询涉及到学号、姓名和课程名三个属性,分别存放在S和C表中,但S和C表没有直接联系,必须通过SC表建立它们二者的联系。 C SC S 基本思路: 首先在C表中找出“DB”课程的课程号Cno; 然后在SC表中找出Cno等于第一步给出的Cno 集合中的某个元素Cn

15、o; 最后在S关系中选出Sno等于第二步中Sno 集合中某个元素的元组,取出Sno 和Sname送入结果表列。 SELECT Sno,Sname FROM S WHERE Sno IN ); 联接查询方式 (2)带有比较运算符的子查询 例30:查询与“张三”在同一个系学习的学生学号、 姓名和系别。 SELECT Sno,Sname,Sdept FROM S WHERE Sdept = ; 例31:查询选修课程名为“数据库”的学生学号和姓名。 SELECT Sno,Sname FROM S WHERE Sno IN ); 带有EXISTS谓词的子查询 带有EXISTS谓词的子查询不返回任何实际数据,它只产生逻辑值。 例32:查询选修了C2课程的学生姓名。 1.SELECT Sname FROM S WHERE Sno IN ; 相关子查询 例35:查询选修了全部课程的学生姓名。 在表S中找学生,要求这个学生学了全部课程。换言之,在S表中找学生,在C中不存在一门课程,这个学生没有学。 SELECT Sname FROM S WHERE NOT EXISTS ); 例36:查询所学课程包含学生S3所学课程的学生学号 分析:不存在这样的课程Y,学生S3选了Y,而其他学生没有选。 SELECT DISTINCT Sno FROM SC AS X WHERE NOT EXISTS );

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号