1. 程式人生 > >子查詢+in+exists/not exists+all+any+多列子查詢

子查詢+in+exists/not exists+all+any+多列子查詢

子查詢:
將查詢語句作為外部sql的條件
注意
1子查詢不能使用order by
2多行子查詢可以返回多行記錄,外部要使用多行操作符(In,exists,any ,all… )

where 或者 having +in ,not in,>,<,<=等等+跟子查詢
,from後面+跟子查詢

where sno>(select …)
having >(select …)
內聯檢視:
selec * from A, (select …from B) bb…:A表和查詢的B表內連線

舉例:
查詢大於學生平均年齡的學號和姓名
where sno>(select …)

這裡寫圖片描述

having >(select …)
這裡寫圖片描述

內聯檢視:
selec * from A, (select …from B) bb…:A表和查詢的B表內連線
這裡寫圖片描述

in

這裡寫圖片描述

exists/not exists返回真假值,不返回資料,效能會比in來的好
這裡寫圖片描述

如果有exists後面是真 相當where 1=1,否則where 1=2

all比較子查詢返回列表中的每一個值
> all :大於最大值
< all :小於最小值

=all:對比的是All後面的集合,幾個有多個數據不返回結果,有一個數據=all相當於=資料

< all :小於最小值
這裡寫圖片描述
=all:等於all集合的所有值
這裡寫圖片描述


這裡寫圖片描述

any適用於獲取扣除最大和最小的資料的集合
\< any :小於最大的
> any :大於最小的
=any:等價於in

\< any :小於最大的
這裡寫圖片描述

=any:
這裡寫圖片描述

多列子查詢
成對比較:多個列的資料要同時匹配
where (name ,id)in (select name ,id …..)
非成對比較:通過指定關鍵字and 或or ,and 關鍵字,指定多個列的資料要同時匹配;
or 關鍵字,指定多個列的資料不必同時匹配;
非成對比較:就是查詢將條件分開,不是成對出現
where name in (select name …..) and id in (select id …..)

select no,name from a
where (no,name) in (select no ,group from B…..)

這裡寫圖片描述

字句解釋:

(select min(sage),sname from student group by sname);
1.查詢資料
2.按sname分組
3.分組時可能每一組有多個值,取sage的最小值

錯誤一直情況
這裡寫圖片描述

解釋:select 後面的列名
1.group by的 列名
2非group by 的列名,但是需要使用聚合函式修飾.