sql查询练习

时间:2022-07-21 07:54:19 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
1. 查询全体学生的学号和姓名.

select 学号,姓名from 学生

2. 查询全体学生的姓名,学号,所在系.

select 学号,姓名,from 学生 3. 查询全体学生的详细记录

select * from 学生

4. 查询全体学生的姓名及其出生年份

select 姓名,2006-年龄 from 学生 [意思是2008减年龄] 5. 查询选修了课程的学生学号

select distinct学号 from 选课 6. 查询2系全体学生的名单.

select 姓名 from 学生 where =2

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

select 姓名,年龄 from 学生 where 年龄<=20 8. 查询考试成绩有不及格的学生的学号.

select distinct 学号 from 选课 where 成绩<60

9. 查询年龄在20~~23(包括2023)之间的的学生的姓名,系别,年龄.

select 姓名,,年龄from 学生 where 年龄 between 20 and 23 10. 查询1,2,3系的学生的姓名和性别

select 姓名,性别 from 学生 where 系别 in (1,2,3) [in 实际上是多个or 算符的缩写] 我们也可以写成这样:

select 姓名,性别 from 学生 where =1or =2or =3 11. 查询既不是1,2系也不是3系的学生的姓名和性别.

select 姓名,性别 from 学生 where not in (1,2,3) 12. 查询学号为s3的学生的详细情况.

select * from 学生 where 学号 like s3)或者(select * from 学生 where 学号=s3 13. 查询所有的姓刘的学生的姓名,学号和性别.

select 姓名,学号,性别 from 学生 where 姓名 like % 14. 查询姓欧阳且全名为三个字的学生的姓名.

select 姓名 from 学生 where 姓名 like 欧阳_ 15. 查询名字中第二个字为字的学生的姓名和学号.

select 姓名,学号 from 学生 where 姓名 like _%

16. 某些学生选修课程后没有参加考试,所以有选课记录,但是没有考试成绩.查询缺少成

绩的学生的学号和相应的课程号

select 学号,课程号 from 选课 where 成绩 is null 17. 查询所有有成绩的学生学号和课程号.

select 学号,课程号 from 选课 where 成绩 is not null 18. (多重条件查询)查询1系年龄在20岁以下的学生姓名.

select 姓名 from 学生 where =1and 年龄<20

19. (对查询结果进行排序)查询选修了3号课程的学生的学号及其成绩,查询结果按分数的

降序排列.

select 学号,成绩,from 选课 where 课程号=3 order by 成绩 desc

20. 查询全体学生情况,查询结果按所在系的系号升序排列,同一个系的学生按年龄降序排

.


select * from 学生 order by , 年龄 desc 21. (使用集函数)查询学生总人数.

select count(*) from 学生 [count的功能是计数] 22. 查询选修了课程的学生的总人数.

select count (distinct 学号) from 选课 23. 计算1号课程的学生的平均成绩.

select avg(成绩) from 选课 where 课程号=1 24. 查询选修1号课程的学生最高分数.

select max(成绩) from 选课 where 课程号=1 25. 求各个课程号及相应的选课人数.

select 课程号,count(学号) from 选课 group by 课程号 26. 查询选修了3门以上课程的学生的学号.

select 学号 from 选课 group by 学号 having count(*)>3

[这里先用group by 子句按学号分组,再用集函数count 对每一组计数.having 短语指定选择组的条件,只有满足条件(即元组的个数>3,表示此学生选修的课程超过3)组才会被选出来.where 子句与having 短语的区别在于作用的对象不同.where子句作用于基本表或视图,从中选择满足条件的元组.having 短语作用于组,从中选择满足条件的组.]

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

Sele 学生.*,选课.* from 学生,选课 where 学生.学号=选课.学号

[学生情况放在学生表里,学生选课情况放在选课表中,所以本查询实际上涉及到学生和选课两个表,这两个表之间的联系是通过公共属性学号实现的。] 28. 查询每一门课的间接先修课。

Sele f.学号,s.先修课号 from 课程 f, 课程 s where f.选修课号=s.学号

[(自身连接)在课程表关系中,只有每门课的直接先修课信息。而没有先修课的先修课。要得到这个信息,必须对一门课找到其先修课,而按此先修课的课程号,查找它的先修课。这就要将课程表与其自身连接。].

29. 查询选修2号课程且成绩在90分以上的所有学生。

Sele 学生.学号,姓名 from 学生,选课 where 学生.学号=选课.学号 and 选课.学号=2,and 选课.成绩>90.

30. 查询每个学生的学号,姓名,选课的课程名及成绩。

Sele 学生.学号, 姓名,课程名,成绩 from 学生,课程,选课 where 学生.学号=选课.学号 and 选课.课程号=课程.课程号.

31. 查询与张洋在同一个系学习的学生.

Sele 学号,姓名, from 学生 where in (sele from 学生 where 姓名=张洋) [in在这里可以用=号代替,因为一个学生只能在一个系里学习].

(嵌套查询)分步做, 确定张洋所在的系名.查找所有在2系学习的学生. 32. 查询选修了课程名为数据结构的学生学号和姓名.

Sele 学号,姓名 from 学生 where 学号 in (sele 学号 from 选课 where 课程号 in (sele 课程号 from 课程 where 课程名=数据结构)) 或者写成连接查询:

sele 学号,姓名 from 学生,选课,课程 where 学生.学号=选课.学号 and 选课.课程号=课程.课程号 and 课程.课程名=数据结构

33. (带有any all 的子查询)查询其他系中比2系某一个学生年龄小的学生姓名和年龄.


Sele 姓名,年龄 from 学生 where 年龄< any (sele 年龄 from 学生 where =2) and !=2 (注意这个and后的语句是父查询的限制条件)

[这个题也可以用集函数做.首先用子查询找出2系中年龄最大的,然后在父查询中查看所有非2系且年龄小于2系最大年龄的学生姓名和年龄.]

Sele 姓名,年龄 from 学生 where 年龄< (sele max(年龄) from 学生 where =2) and !=2.

34. 查询其他系中比2系所有学生年龄都小的学生姓名及年龄.

Sele 姓名,年龄 from 学生 where 年龄 < all (sele 年龄 from 学生 where =2) and !=2 或者用集函数:

Sele 姓名,年龄 from 学生 where 年龄< (sele min(年龄) from 学生 where =2) and !=’2

35. (带有exists 的子查询)查询所有选修了c3课程的学生姓名.

本题涉及学生和选课两个表,我们可以在学生表中依次取每个元组的学号值,用此值去检查选课关系,若选课中存在这样的这样的元组,其学号值等于此学生表的学号的值,且其课程号是c3,则取学生表的学生姓名送入结果表.

Sele 姓名 from 学生 where exists (sele * from 选课 where 学号=学生.学号 and 课程=c3).

36. 查询没有选修c3号课程的学生姓名.

Sele 姓名 from 学生 where not exists (sele * from 选课 where 学号=学生.学号 and 课程号=c3)

37. 查询与张洋在同一个系学习的学生.

Sele 学号,姓名, from 学生 s1 where exists (sele * from 学生 s2 where s2.=s1. and s2.姓名=张洋).

*38. 查询选修了全部课程的学生姓名.(没有能表示全部的,那么我们可以将题目的意思转

换成等价的存在的含义,比如,查询这样的学生,没有一门课程是他不选修的)

Sele 姓名 from 学生 where not exists (sele * from 课程 where not exists (sele * from

选课 where 学号=学生.学号 and 课程号=课程.课程号)) 39. (集合查询)查询1系的学生及年龄不大于19岁的学生.

Sele * from 学生 where =1 union sele * from 学生 where 年龄<=19 40. 查询选修了课程c1或者课程c2的学生

Sele 学号 from 选课 where 课程号=c1 union sele 学号 from 选课 where 课程号=c2


本文来源:https://www.wddqw.com/doc/204eda3d4935eefdc8d376eeaeaad1f3469311e6.html