子查詢+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 的列名,但是需要使用聚合函式修飾.