UNION 操作符用於將兩個或多個 SELECT 語句的結果集合併為一個結果集。
select_statement
UNION [ALL] select_statement
[UNION [ALL] select_statement] [...]
ALL 選項:保留所有行(包括重複行)。若省略,則自動去重。SELECT 語句為準。查詢1 UNION (查詢2 UNION 查詢3)。-- 返回同時擁有玩具的孩子 user_id
SELECT user_id FROM user INTERSECT SELECT user_id FROM toy;
-- 返回沒有玩具的孩子 user_id
SELECT user_id FROM user EXCEPT SELECT user_id FROM toy;
連接是關係型數據庫的核心特性,用於根據關聯條件從多張表中查詢數據。
笛卡爾積,將第一張表的每一行與第二張表的每一行組合。若表 A 有 5 行,表 B 有 4 行,結果為 20 行。
SELECT u.username, t.toyname FROM user AS u CROSS JOIN toy AS t;
只返回滿足連接條件的行。
SELECT u.username, t.toyname
FROM user AS u INNER JOIN toy AS t ON u.user_id = t.user_id;
-- 也可用 WHERE 子句:WHERE u.user_id = t.user_id
SELECT u.username, t.toyname
FROM user AS u INNER JOIN toy AS t ON u.user_id <> t.user_id
ORDER BY u.username;
自動根據兩張表中同名的列進行等值連接。要求連接列名稱完全相同。
SELECT u.username, t.toyname FROM user AS u NATURAL JOIN toy AS t;
包含左外連接、右外連接。除返回滿足條件的行外,還返回基準表中不滿足條件的行(另一表列顯示為 NULL)。
以左表為基準,返回左表所有行及右表匹配行。
SELECT u.username, t.toyname
FROM user u LEFT OUTER JOIN toy t ON u.user_id = t.user_id;
以右表為基準,返回右表所有行及左表匹配行。
SELECT u.username, t.toyname
FROM user u RIGHT OUTER JOIN toy t ON u.user_id = t.user_id;