標籤:
/* UNION */ ------------------
將多個select查詢的結果組合成一個結果集合。
SELECT ... UNION [ALL|DISTINCT] SELECT ...
預設 DISTINCT 方式,即所有返回的行都是唯一的
建議,對每個SELECT查詢加上小括弧包裹。
ORDER BY 排序時,需加上 LIMIT 進行結合。
需要各select查詢的欄位數量一樣。
每個select查詢的欄位列表(數量、類型)應一致,因為結果中的欄位名以第一條select語句為準。
/* 子查詢 */ -----------------
- - 子查詢需用括弧包裹。
-- from型
from後要求是一個表,必須給子查詢結果取個別名。
- 簡化每個查詢內的條件。
- from型需將結果產生一個暫存資料表格,可用以原表的鎖定的釋放。
- 子查詢返回一個表,表型子查詢。
select * from (select * from tb where id>0) as subfrom where id>1;
-- where型
- 子查詢返回一個值,標量子查詢。
- 不需要給子查詢取別名。
- where子查詢內的表,不能直接用以更新。
select * from tb where money = (select max(money) from tb);
-- 列子查詢
如果子查詢結果返回的是一列。
使用 in 或 not in 完成查詢
exists 和 not exists 條件
如果子查詢返回資料,則返回1或0。常用於判斷條件。
select column1 from t1 where exists (select * from t2);
-- 行子查詢
查詢條件是一個行。
select * from t1 where (id, gender) in (select id, gender from t2);
行構造符:(col1, col2, ...) 或 ROW(col1, col2, ...)
行構造符通常用於與對能返回兩個或兩個以上列的子查詢進行比較。
-- 特殊運算子
!= all() 相當於 not in
= some() 相當於 in。any 是 some 的別名
!= some() 不等同於 not in,不等於其中某一個。
all, some 可以配合其他運算子一起使用。
/* 串連查詢(join) */ -------------
將多個表的欄位進行串連,可以指定串連條件。
-- 內串連(inner join)
- 預設就是內串連,可省略inner。
- 只有資料存在時才能發送串連。即串連結果不能出現空行。
on 表示串連條件。其條件運算式與where類似。也可以省略條件(表示條件永遠為真) 也可用where表示串連條件。 還有 using, 但需欄位名相同。 using(欄位名)
-- 交叉串連 cross join
即,沒有條件的內串連。
select * from tb1 cross join tb2;
-- 外串連(outer join)
- 如果資料不存在,也會出現在串連結果中。
-- 左外串連 left join
如果資料不存在,左表記錄會出現,而右表為null填充
-- 右外串連 right join
如果資料不存在,右表記錄會出現,而左表為null填充
-- 自然串連(natural join)
自動判斷串連條件完成串連。 相當於省略了using,會自動尋找相同欄位名。
natural join
natural left join
natural right join
(未完待續)
(Shocker 來源:http://www.cnblogs.com/shockerli/p/1000-plus-line-mysql-notes.html)
一千行MySQL學習筆記(四)