首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 聯合查詢 (UNION) 與連接查詢 (JOIN) 完整指南

     編輯:MySQL 綜合教學

MySQL 聯合查詢 (UNION) 與連接查詢 (JOIN) 完整指南

一、聯合查詢:UNION、INTERSECT、EXCEPT

UNION 操作符用於將兩個或多個 SELECT 語句的結果集合併為一個結果集。

語法格式

select_statement
UNION [ALL] select_statement
[UNION [ALL] select_statement] [...]
  • ALL 選項:保留所有行(包括重複行)。若省略,則自動去重。
  • 結果集的列標題以第一個 SELECT 語句為準。
  • 所有參與聯合的查詢必須具有相同數量的列,且對應列的數據類型相容(系統會自動將低精度數值類型轉換為高精度)。
  • 執行順序自左至右,可用括號改變優先級,如:查詢1 UNION (查詢2 UNION 查詢3)。

INTERSECT (交集) 與 EXCEPT (差集)

  • INTERSECT:返回兩個查詢結果集的交集(共同存在的行)。
  • EXCEPT:返回第一個查詢結果集減去第二個查詢結果集後的差集(僅存在於第一個集合中的行)。
-- 返回同時擁有玩具的孩子 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;

二、連接查詢 (JOIN)

連接是關係型數據庫的核心特性,用於根據關聯條件從多張表中查詢數據。

1. 交叉連接 (CROSS JOIN)

笛卡爾積,將第一張表的每一行與第二張表的每一行組合。若表 A 有 5 行,表 B 有 4 行,結果為 20 行。

SELECT u.username, t.toyname FROM user AS u CROSS JOIN toy AS t;

2. 內連接 (INNER JOIN)

只返回滿足連接條件的行。

等值連接 (Equal Join)
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
非等值連接 (Non-Equal Join)
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;
自然連接 (NATURAL JOIN)

自動根據兩張表中同名的列進行等值連接。要求連接列名稱完全相同。

SELECT u.username, t.toyname FROM user AS u NATURAL JOIN toy AS t;

3. 外連接 (OUTER JOIN)

包含左外連接、右外連接。除返回滿足條件的行外,還返回基準表中不滿足條件的行(另一表列顯示為 NULL)。

左外連接 (LEFT OUTER JOIN)

以左表為基準,返回左表所有行及右表匹配行。

SELECT u.username, t.toyname
FROM user u LEFT OUTER JOIN toy t ON u.user_id = t.user_id;
右外連接 (RIGHT OUTER JOIN)

以右表為基準,返回右表所有行及左表匹配行。

SELECT u.username, t.toyname
FROM user u RIGHT OUTER JOIN toy t ON u.user_id = t.user_id;

總結

  • UNION 適用於結果集合併(同結構);JOIN 適用於多表關聯查詢(不同結構)。
  • 內連接只返回匹配行;外連接保留基準表所有行。
  • 自然連接依賴同名列,使用時需謹慎確保列名語義一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved