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

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

时间:2024-04-03 23:59:09浏览次数:19  
标签:难题 学号 Sno 查询 关系数据库 课程 SQL SC Cno

文章目录

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

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

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

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

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

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

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

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

9、查询选修了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
   )
)

标签:难题,学号,Sno,查询,关系数据库,课程,SQL,SC,Cno
From: https://blog.csdn.net/m0_73776435/article/details/137352462

相关文章

  • ctfshow--web7 sql注入空格过滤
    ?id=10//union//select//1,database(),3//%23查看库名查看表名-1/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database()),3/**/%23查看flag表下的flag字段-1/**/union/**/select/**/1,(......
  • mysql操作
    mysql启动(停止):1、开始-右击-管理-服务和应用程序-服务-mysql名-右击-启动(停止)2、开始-命令提示符-右击-以管理员身份-netstart(stop)mysql名mysql服务端的登录和退出进入:1、开始-mysql-mysqlserver-mysqlCommandLineClient-输入root密码(不建议,只适用于root用户)2、通过Win......
  • MySQL数据库 数据库基本操作(二):表的增删查改(上)
    1.CRUDCRUD即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写,就是数据库基本操作中针对表的一系列操作.2.新增(create)-->insert语法:insertinto表名[列名1,列名2…]values(val1,val2…)[注意]列名可以没有,如果没有列名,所......
  • ctfshow--web6 sql注入空格绕过
    这道题目空格被过滤了,那么我们可以用/**/来替换空格'union/**/select/**/1,(select/**/database()),3#//查看数据库名名字为web2查看web2下的表名'union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schem......
  • MySQL UPDATE JOIN 根据一张表或多表来更新另一张表的数据
    当使用MySQL时,经常需要根据一张表或多张表的数据来更新另一张表的数据。这种情况下,我们可以使用UPDATE语句结合JOIN操作来实现这一需求。本文将介绍MySQL中使用UPDATEJOIN的技术。什么是UPDATEJOINUPDATEJOIN是MySQL中一种结合UPDATE语句和JOIN操作的技术,用于根据一张表或多......
  • MySQL 入门教程
    创作目的以前在学习mysql的时候,经常东拼西凑的学习零碎的知识。完全无法形成完整的知识体系。这个属于mysql核心知识点的梳理,新人可以作为学习的参考,有经验的话也可以作为可查的资料宝典。mysqlinstallmysql安装教程参见以前的文章:MySQL5.6Install,WindowsM......
  • 盘点一个dbeaver导入csv文件到sql server报错的一个问题
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【金光灿灿】问了一个dbeaver导入csv文件到sqlserver报错的一个问题,问题如下:我在使用dbeaver导入csv文件到sqlserver时一直出现Can'tparsenumericvalue[B02010ZZZ]usingformatter这样的报错二、实现过程......
  • 关于openEuler系统的基本环境配置(包括nginx,mysql5.7和java1.8)
    关于openEuler系统的基本环境配置(包括nginx,mysql5.7和java1.8)观前BB:openEuler虽然是国产系统,但是本质还是centos的套壳系统,你可以通过(uname-a)命令得以观察出,而且系统更类似于centos8(这个还有待确认),这就导致了安装环境的时候经常会出现奇奇怪怪的错误(比如yum找不到源什么的),本......
  • 18、MySQL多表连查详解
    MySQL的多表连查(即多表连接查询)对于数据库管理员、开发人员以及数据分析师来说都是非常重要的。对此,笔者专门写一文进行详细讲解,以便个人学习:首先建立两张表用于数据验证: 1、笛卡尔积:笛卡儿积(Cartesianproduct)是指在两个集合A和B之间的所有可能的有序对的集合。具体来说,如果......
  • MySQL索引背后的数据结构及算法原理
    摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MyS......