3 回答

TA貢獻1812條經驗 獲得超5個贊
UNION將查詢中的行放在彼此之后,同時JOIN生成笛卡爾積和子集 - 完全不同的操作?,嵥榈睦覷NION:
mysql> SELECT 23 AS bah
-> UNION
-> SELECT 45 AS bah;
+-----+
| bah |
+-----+
| 23 |
| 45 |
+-----+
2 rows in set (0.00 sec)
類似的簡單例子JOIN:
mysql> SELECT * FROM
-> (SELECT 23 AS bah) AS foo
-> JOIN
-> (SELECT 45 AS bah) AS bar
-> ON (33=33);
+-----+-----+
| foo | bar |
+-----+-----+
| 23 | 45 |
+-----+-----+
1 row in set (0.01 sec)

TA貢獻2080條經驗 獲得超4個贊
UNION將兩個或多個查詢的結果合并到一個結果集中,該結果集包括屬于聯合中所有查詢的所有行。
通過使用JOIN,您可以根據表之間的邏輯關系從兩個或多個表中檢索數據。聯接指示SQL應如何使用來自一個表的數據來選擇另一個表中的行。
UNION操作與使用組合來自兩個表的列的JOIN不同。
UNION示例:
SELECT 1 AS [Column1], 2 AS [Column2]
UNION
SELECT 3 AS [Column1], 4 AS [Column2]
輸出:
Column1 Column2
-------------------
1 2
3 4
加入示例:
SELECT a.Column1, b.Column2 FROM TableA a INNER JOIN TableB b ON a.Id = b.AFKId
這將輸出條件a.Id = b.AFKId為true的兩個表中的所有行。

TA貢獻1839條經驗 獲得超15個贊
聯接和聯合可用于組合來自一個或多個表的數據。不同之處在于數據的組合方式。
簡單來說,連接將數據組合到新列中。如果將兩個表連接在一起,則第一個表中的數據將顯示在同一行中第二個表的列旁邊的一組列中。
聯合將數據組合成新行。 如果兩個表一起“聯合”,則第一個表中的數據位于一組行中,而第二個表中的數據位于另一個表中。行的結果相同。
這是一個連接的視覺描述。表A和B的列組合成一個結果。
結果中的每一行都包含BOTH表A和B中的列。當一個表中的列與另一個表中的列匹配時,將創建行。此匹配稱為連接條件。
這使得聯接非常適合查找值并將其包含在結果中。這通常是非規范化(反轉規范化)的結果,并涉及在一個表中使用外鍵來通過在另一個表中使用主鍵來查找列值。
現在將上述描述與聯盟的描述進行比較。在聯合中,結果中的每一行都來自一個表或另一個表。在聯合中,不會組合列來創建結果,而是組合行。
連接和聯合都可用于將來自一個或多個表的數據組合成單個結果。他們兩個都是不同的方式。雖然聯接用于組合來自不同表的列,但聯合用于組合行。
添加回答
舉報