連線查詢--巢狀查詢
阿新 • • 發佈:2022-04-20
一、單層巢狀查詢
巢狀查詢分為相關巢狀查詢、不相關巢狀查詢。區分條件是分離之後是否可以單獨查詢。
不相關巢狀查詢:由裡向外查詢,先執行子查詢,得到的結果用來構造外部查詢的條件。子查詢中不可以排序
例如:使用 IN(可以返回多個值),或者 = (使用=時,返回值必須為單個值 , 表示大小關係時用 <, > ,>=,<=, !=
---查詢跟劉晨在一個系的學生的姓名(使用in,考慮可能會有重名的情況分佈在不同的系)
select Sname
from Student
where Sdepe in (
select Sdepe
from Student
where Sname='劉晨')
---查詢年齡比學號為‘201215121’的學生 小的學生,學號,姓名,所在系
select Sno,Sname,Sdepe
from Student
where Sage < (
select Sage
from Student
where Sno = '201215121'
)
'> ANY 等價於 >MIN 大於子查詢結果中的某個值
'>'ALL 等價於>MAX大於子查詢結果中的所有值
'<'ANY 等價於 <MAX 小於子查詢結果中的某個值
'<' ALL等價於<MIN小於子查詢結果中的所有值
'>'= ANY等價於 >MIN大於等於子查詢結果中的某個值
'>'= ALL等價於>=MAX大於等於子查詢結果中的所有值
<= ANY 等價於 <=MAX 小於等於子查詢結果中的某個值
<= ALL等價於<=MIN小於等於子查詢結果中的所有值
= ANY 等價於IN等於子查詢結果中的某個值
=ALL等於子查詢結果中的所有值(通常沒有實際意義)
!= (或<> )ALL等價於NOT IN ANY不等於子查詢結果中的某個值
!= (或<> ) ALL不等於子查詢結果中的任何一個值
NULL+num=NULL,NULL做比較運算結果是unknow
二、多層巢狀查詢
例如:查詢選修了課程名為‘資訊系統’的學生學號和姓名。
分析:1)首先應該在Course表中找出資訊系統的課程號
2)然後再SC表中找出選修了該課程的學生的學號
3)然後再根據學號,在Student表中找到該學生姓名
select Sno,Sname
from Student
where Sno in (
select Sno
from SC
where Cno in (
select Cno
from Course where (Cname = '資訊系統')
)
)