关系数据库标准语言SQL难题整理

文章目录

1、查询选修三门以上课程的学生学号

2、查询选修课程中至多一门>70分的学生学号

3、查询平均成绩>=90分的学生学号和平均成绩

4、查询成绩都大于70分学生的成绩

5、找出每个学生超过他自己选修课程平均成绩的课程号

6、查询非计算机科学系某一个学生年龄小的学生姓名和年龄

7、查询非计算机科学系中比计算机学科系所有学生年龄都小的学生姓名和年龄

[8、基于 SC表,查询选修了全部课程的学生姓名](#8、基于 SC表,查询选修了全部课程的学生姓名)

9、查询选修了1号课程的学生姓名

[10、在 SC表中查询至少选修了1号学生选修的全部课程的学生的学号](#10、在 SC表中查询至少选修了1号学生选修的全部课程的学生的学号)

11、找出每个学生超过自己选修课程平均成绩的学号和课程号

12、查询所有选修1号课程的学生名字

13、查询所有选课学生的学号、姓名、课程名称及成绩。

14、查询每门课程的课程号、课程名及选课人数。

15、查询每个学生的学号、姓名及选课门数。

16、查询姓张的学生所选修的课程号、课程名称。

17、统计每个同学选修及格的课程的平均分,列出其学号、姓名及平均分。

18、查询选修了课程C1和C2的学生的学号和其各自成绩

19、查询选修了C1和C2课程,并且成绩均大于85分的同学的学号、课程号以及成绩

20、查询每一门课程的间接先修课程号

21、查询跟20201031号学生同学院的学生的学号与姓名

22、查询选修了数据库这门课的学生的学号及姓名

23、查询跟李四在同一个系学习的学生的学号和姓名

24、查询至少有一门课成绩大于70分的学生的学号与姓名

25、查询既选修了C1课程又选修了C2课程的学生的学号

26、查询所选课程成绩全部大于70分的学生的学号

27、查询选修了全部课程的学生的学号和姓名

28、查询至少选修了2020003号学生所选的全部课程的学生的学号与姓名

1、查询选修三门以上课程的学生学号
复制代码
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(Cno)>3;
2、查询选修课程中至多一门>70分的学生学号
复制代码
SELECT Sno 
FROM SC 
WHERE Sno NOT IN
	(SELECT Sno 
     FROM SC 
     WHERE Grade >70)
UNION 
SELECT Sno
FROM SC
WHERE Grade>70
GROUP BY Sno
HAVING  count(Cno)=1 ;
3、查询平均成绩>=90分的学生学号和平均成绩
复制代码
SELECT Sno,avg(Grade)
FROM SC
GROUP BY Sno
HAVING avg(Grade)>=90;
4、查询成绩都大于70分学生的成绩
复制代码
SELECT distinct Sno
FROM SC 
WHERE Grade NOT IN(
    SELECT Grade 
    FORM SC 
    WHERE Grade<=70);
5、找出每个学生超过他自己选修课程平均成绩的课程号
复制代码
SELECT Sno,Cno
FROM SC  X
WHERE Grade>=(
    SELECT avg(grade) 
    FROM SC Y 
    WHERE Y.Sno=X.Sno);
6、查询非计算机科学系某一个学生年龄小的学生姓名和年龄
复制代码
SELECT Sname,Sage
FROM student
WHERE Sage<ANY(
    SELECT Sage 
    FROM Student 
    WHERE Sdept='CS')
AND Sdept <>'CS';
7、查询非计算机科学系中比计算机学科系所有学生年龄都小的学生姓名和年龄
复制代码
SELECT Sname,Sage
FROM student
WHERE Sage<ALL(
    SELECT Sage 
    FROM Student 
    WHERE Sdept='CS')
AND Sdept <>'CS';
8、基于 SC表,查询选修了全部课程的学生姓名
复制代码
SELECT Sname
FROM Student
WHERE NOT EXISTS
    (SELECT *
     FROM Course
     WHERE NOT EXISTS
        (SELECT *
         FROM SC
         WHERE Sno=Student.Sno AND Cno=Course.Cno)
    );
9、查询选修了1号课程的学生姓名
复制代码
SELECT Sname
FROM Student
WHERE EXISTS(
    SELECT * 
    FROM SC 
    WHERE SC.Sno=Student.Sno AND Cno='1');
10、在 SC表中查询至少选修了1号学生选修的全部课程的学生的学号
复制代码
SELECT DISTINCT SnO
FROM SC SCX
WEHRE NOT EXISTS
    (SELECT *    
     FROM SC SCY
     WHERE SCY.SnO='1' AND NOT EXISTS
        (SELECT *
         FROM SC SCZ
         WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno)
    );
11、找出每个学生超过自己选修课程平均成绩的学号和课程号
复制代码
SELECT Sno,Cno
FROM SC,(SELECT Sno,avg(Grade) 
         FROM SC 
         GROUP BY Sno) AS avgsc(avgsno,avggrade);
WHERE SC.Sno=avgsc.avgsno AND SC.Cno>avgsc.avggrade;
或
SELECT Sno,Cno
FROM SC x
WHERE Grade>=(SELECT avg(Grade) 
              FROM SC y 
              WHERE y.Sno=x.Sno);
12、查询所有选修1号课程的学生名字
复制代码
SELECT Sname
FROM Student,(SELECT Sno 
              FROM SC    
              WHERE Cno='1') AS SC1
WHERE Student.Sno=SC1.Sno;
13、查询所有选课学生的学号、姓名、课程名称及成绩。
复制代码
select SC.Sno,Sname,Cname,Grade
from SC,Course,Student
where SC.Cno=Course.Cno and Student.Sno=SC.Sno
14、查询每门课程的课程号、课程名及选课人数。
复制代码
select SC.Cno,Course.Cname,count(Sno) 
from SC, Course
where SC.Cno=Course.Cno
group by SC.Cno,Course.Cname
15、查询每个学生的学号、姓名及选课门数。
复制代码
select SC.Sno,Sname,count(Cno) 
from SC,Student
where SC.Sno=Student.Sno
group by SC.Sno,Sname
16、查询姓张的学生所选修的课程号、课程名称。
复制代码
select distinct SC.Cno,Cname
from SC,Course,Student
where SC.Cno=Course.Cno and Student.Sno=SC.Sno and Sname like '张%'
17、统计每个同学选修及格的课程的平均分,列出其学号、姓名及平均分。
复制代码
select SC.Sno,Sname,avg(Grade)
from SC,Student
where SC.Sno=Student.Sno and Grade>60
group by Sname,SC.Sno
18、查询选修了课程C1和C2的学生的学号和其各自成绩
复制代码
select SC1.Sno,SC1.Grade Grade1,SC2.Grade Grade2
from SC SC1,SC SC2
where SC1.Sno=SC2.Sno and SC1.Cno='81001' and SC2.Cno='81002'
19、查询选修了C1和C2课程,并且成绩均大于85分的同学的学号、课程号以及成绩
复制代码
select SC1.Sno,SC1.Cno Cno1,SC2.Cno Cno2,SC1.Grade Grade1,SC2.Grade Grade2
from SC SC1,SC SC2
where SC1.Sno=SC2.Sno and SC1.Cno='1' and SC2.Cno='2' and SC1.Grade>85 and SC2.Grade>85
20、查询每一门课程的间接先修课程号
复制代码
select Course1.Cno,Course2.Cpno
from Course Course1,Course Course2
where Course1.Cpno=Course2.Cno
21、查询跟20201031号学生同学院的学生的学号与姓名
复制代码
select S2.Sno,S2.Sname
from Student S1,Student S2
where S1.Smajor=S2.Smajor and S1.Sno='20180002'
22、查询选修了数据库这门课的学生的学号及姓名
复制代码
select Student.Sno,Sname
from Student,SC,Course
where SC.Sno=Student.Sno and SC.Cno=Course.Cno and Course.Cname='数据库'
23、查询跟李四在同一个系学习的学生的学号和姓名
复制代码
select Sno,Sname
from Student
where Sdept in (
    select Sdept
    from Student
    where Sname='李四'
)
24、查询至少有一门课成绩大于70分的学生的学号与姓名
复制代码
select distinct SC.Sno,Sname
from SC,Student
where SC.Sno=Student.Sno and SC.Grade >70
或者
select distinct Sno,Sname
from Student
where exists (
  select*
  from SC
  where Student.Sno=SC.Sno and SC.Grade>70
)
25、查询既选修了C1课程又选修了C2课程的学生的学号
复制代码
select SC.Sno
from SC,(
  select Sno
  from SC
  where Cno='1'
) S1
where S1.Sno=SC.Sno and SC.Cno='2';
或者
select SC1.Sno
from SC SC1
where exists (
   select *
   from SC SC2
   where SC1.Sno=SC2.Sno and SC1.Cno='1' and SC2.Cno='2'
)
26、查询所选课程成绩全部大于70分的学生的学号
复制代码
select distinct SC1.Sno
from SC SC1
where not exists(
   select *
   from SC SC2
   where SC1.Sno=SC2.Sno and (SC2.Grade<70 or SC2.Grade is null) 
)
27、查询选修了全部课程的学生的学号和姓名
复制代码
select Sname
from Student
where not exists(
  select *
  from Course
  where not exists(
    select *
  from SC
  where SC.Sno=Student.Sno and  SC.Cno=Course.Cno
  )
)
28、查询至少选修了2020003号学生所选的全部课程的学生的学号与姓名
复制代码
select distinct SCx.Sno,Sname
from SC SCx,Student
where SCx.Sno=Student.Sno and not exists(
   select *
   from SC SCy
   where SCy.Sno='2020003' and not exists(
      select *
    from SC SCz
    where SCz.Sno=SCx.Sno and SCz.Cno=SCy.Cno
   )
)
相关推荐
倒流时光三十年4 小时前
SpringBoot 数据库同步 Elasticsearch 性能优化
数据库·spring boot·elasticsearch
码农小卡拉4 小时前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
怣504 小时前
MySQL多表连接:全外连接、交叉连接与结果集合并详解
数据库·sql
wjhx5 小时前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
冰暮流星5 小时前
javascript之二重循环练习
开发语言·javascript·数据库
万岳科技系统开发5 小时前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
冉冰学姐5 小时前
SSM智慧社区管理系统jby69(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·管理系统·智慧社区·ssm 框架
杨超越luckly6 小时前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强
斯普信专业组6 小时前
构建基于MCP的MySQL智能运维平台:从开源服务端到交互式AI助手
运维·mysql·开源·mcp
Elastic 中国社区官方博客6 小时前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索