多表查詢 1. 分類: * 合併結果集(瞭解) * 連接查詢 * 子查詢合併結果集 * 要求被合併的表中,列的類型和列數相同 * UNION,去除重覆行 * UNION ALL,不去除重覆行 連接查詢 1. 分類 * 內連接 * 外連接 > 左外連接 > 右外連接 > 全外連接(MySQL不支持) ...
多表查詢
1. 分類:
* 合併結果集(瞭解)
* 連接查詢
* 子查詢
合併結果集
* 要求被合併的表中,列的類型和列數相同
* UNION,去除重覆行
* UNION ALL,不去除重覆行
SELECT * FROM cd/*cd表*/ UNION ALL SELECT * FROM ab;/*ab表*
連接查詢
1. 分類
* 內連接
* 外連接
> 左外連接
> 右外連接
> 全外連接(MySQL不支持)
* 自然連接(屬於一種簡化方式)
2. 內連接
* 方言:SELECT * FROM 表1 別名1, 表2 別名2 WHERE 別名1.xx=別名2.xx
* 標準:SELECT * FROM 表1 別名1 INNER JOIN 表2 別名2 ON 別名1.xx=別名2.xx
* 自然:SELECT * FROM 表1 別名1 NATURAL JOIN 表2 別名2
* 內連接查詢出的所有記錄都滿足條件。
3. 外連接
* 左外:SELECT * FROM 表1 別名1 LEFT OUTER JOIN 表2 別名2 ON 別名1.xx=別名2.xx
> 左表記錄無論是否滿足條件都會查詢出來,而右表只有滿足條件才能出來。左表中不滿足條件的記錄,右表部分都為NULL
* 左外自然:SELECT * FROM 表1 別名1 NATURAL LEFT OUTER JOIN 表2 別名2 ON 別名1.xx=別名2.xx
* 右外:SELECT * FROM 表1 別名1 RIGHT OUTER JOIN 表2 別名2 ON 別名1.xx=別名2.xx
> 右表記錄無論是否滿足條件都會查詢出來,而左表只有滿足條件才能出來。右表不滿足條件的記錄,其左表部分都為NULL
* 右外自然:SELECT * FROM 表1 別名1 NATURAL RIGHT OUTER JOIN 表2 別名2 ON 別名1.xx=別名2.xx
* 全鏈接:可以使用UNION來完成全鏈接
子查詢
:查詢中有查詢(查看select關鍵字的個數!)
1. 出現的位置:
* where後作為條件存在
* from後作為表存在(多行多列)
2. 條件
* (***)單行單列:SELECT * FROM 表1 別名1 WHERE 列1 [=、>、<、>=、<=、!=] (SELECT 列 FROM 表2 別名2 WHERE 條件)
* (**)多行單列:SELECT * FROM 表1 別名1 WHERE 列1 [IN, ALL, ANY] (SELECT 列 FROM 表2 別名2 WHERE 條件)
* (*)單行多列:SELECT * FROM 表1 別名1 WHERE (列1,列2) IN (SELECT 列1, 列2 FROM 表2 別名2 WHERE 條件)
* (***)多行多列:SELECT * FROM 表1 別名1 , (SELECT ....) 別名2 WHERE 條件