天天看点

使用SQL进行内外连接和嵌套查询

文章目录

  • ​​1.查询每个学生的选课情况​​
  • ​​2.查询每个学生及其选修课程的情况, 包括没有选修课程的学生​​
  • ​​3.查询每门课的选课人数,包括选课人数为0的课程。​​
  • ​​4.查询选修了”10010”号课程的学生姓名。​​
  • ​​5.查询选修了“计算机基础”这门课的学生学号和学生姓名​​
  • ​​6.查询选修“计算机基础”这门课成绩在80分以上的学生学号,姓名。​​
  • ​​7.查询与“王磊”在同一个系的学生信息​​
  • ​​8.查询每个学生超过他选修课平均成绩的课程号。​​
  • ​​9.查询其他系中比“计算机系”某一学生年龄小的学生姓名和年龄(分别使用ANY谓词和MAX函数完成)。​​
  • ​​10.查询其他系中比“计算机系”所有学生年龄都小的学生姓名及年龄(分别使用ALL谓词和MIN函数完成)。​​
  • ​​11.查询选修了10001号课程的学生姓名(使用EXISTS谓词)​​
  • ​​12.查询没有选修10001号课程的学生姓名。​​
  • ​​13.查询选修了全部课程的学生学号和姓名​​

1.查询每个学生的选课情况

使用内连接和外连接

select
*
from
student
inner join//内连接
sc
on
student.sno=sc.sno      

2.查询每个学生及其选修课程的情况, 包括没有选修课程的学生

select
*
from
sc
left join//左连接
sc
on
student.sno=sc.sno      

3.查询每门课的选课人数,包括选课人数为0的课程。

SELECT 
Course.Cno,COUNT(SC.Cno)
FROM 
Course 
LEFT JOIN 
SC 
ON 
Course.Cno=SC.Cno
GROUP BY Course.Cno      

4.查询选修了”10010”号课程的学生姓名。

SELECT Sname
FROM Student
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Cno='10010')      

5.查询选修了“计算机基础”这门课的学生学号和学生姓名

SELECT Sno,Sname
FROM Student
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Cno IN
(SELECT Cno
FROM Course
WHERE Cname='计算机基础'))      

6.查询选修“计算机基础”这门课成绩在80分以上的学生学号,姓名。

SELECT Sno,Sname
FROM Student
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Score>90 AND Cno IN
(SELECT Cno
FROM Course
WHERE Cname='计算机基础'))      

7.查询与“王磊”在同一个系的学生信息

SELECT Sno,Sname
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname='王磊')      

8.查询每个学生超过他选修课平均成绩的课程号。

SELECT Sno,Cno
FROM SC x
WHERE Score>=
(SELECT AVG(Score)
FROM SC y
WHERE x.Sno=y.Sno)      

9.查询其他系中比“计算机系”某一学生年龄小的学生姓名和年龄(分别使用ANY谓词和MAX函数完成)。

--ANY谓词
SELECT Sname,Sage
FROM Student
WHERE Sdept!='计算机系' AND Sage<ANY
(SELECT Sage
FROM Student
WHERE Sdept='计算机系')

--MAX函数
SELECT Sname,Sage
FROM Student
WHERE Sdept!='计算机系' AND Sage<
(SELECT MAX(Sage)
FROM Student
WHERE Sdept='计算机系')      

10.查询其他系中比“计算机系”所有学生年龄都小的学生姓名及年龄(分别使用ALL谓词和MIN函数完成)。

--ALL谓词
SELECT Sname,Sage
FROM Student
WHERE Sdept!='计算机系' AND Sage<ALL
(SELECT Sage
FROM Student
WHERE Sdept='计算机系')

--MIN函数
SELECT Sname,Sage
FROM Student
WHERE Sdept!='计算机系' AND Sage<
(SELECT MIN(Sage)
FROM Student
WHERE Sdept='计算机系')      

11.查询选修了10001号课程的学生姓名(使用EXISTS谓词)

SELECT Sno,Sname
FROM Student
WHERE EXISTS
(SELECT *
 FROM SC
 WHERE Sno=Student.Sno AND Cno='10001')      

12.查询没有选修10001号课程的学生姓名。

SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE Sno=Student.Sno AND Cno='10001')      

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

SELECT Sno,Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM Course
WHERE NOT EXISTS
(SELECT *
 FROM SC
 WHERE SC.Sno=Student.Sno AND Course.Cno=SC.Cno))      

继续阅读