1. 程式人生 > 其它 >連線查詢--巢狀查詢

連線查詢--巢狀查詢

連線查詢--巢狀查詢

一、單層巢狀查詢

巢狀查詢分為相關巢狀查詢、不相關巢狀查詢。區分條件是分離之後是否可以單獨查詢。

不相關巢狀查詢:由裡向外查詢,先執行子查詢,得到的結果用來構造外部查詢的條件。子查詢中不可以排序

例如:使用 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 = '資訊系統')
  )
  )