天天看點

使用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))      

繼續閱讀