3 回答

TA貢獻1812條經(jīng)驗 獲得超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條經(jīng)驗 獲得超4個贊
UNION將兩個或多個查詢的結(jié)果合并到一個結(jié)果集中,該結(jié)果集包括屬于聯(lián)合中所有查詢的所有行。
通過使用JOIN,您可以根據(jù)表之間的邏輯關(guān)系從兩個或多個表中檢索數(shù)據(jù)。聯(lián)接指示SQL應(yīng)如何使用來自一個表的數(shù)據(jù)來選擇另一個表中的行。
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條經(jīng)驗 獲得超15個贊
聯(lián)接和聯(lián)合可用于組合來自一個或多個表的數(shù)據(jù)。不同之處在于數(shù)據(jù)的組合方式。
簡單來說,連接將數(shù)據(jù)組合到新列中。如果將兩個表連接在一起,則第一個表中的數(shù)據(jù)將顯示在同一行中第二個表的列旁邊的一組列中。
聯(lián)合將數(shù)據(jù)組合成新行。 如果兩個表一起“聯(lián)合”,則第一個表中的數(shù)據(jù)位于一組行中,而第二個表中的數(shù)據(jù)位于另一個表中。行的結(jié)果相同。
這是一個連接的視覺描述。表A和B的列組合成一個結(jié)果。
結(jié)果中的每一行都包含BOTH表A和B中的列。當(dāng)一個表中的列與另一個表中的列匹配時,將創(chuàng)建行。此匹配稱為連接條件。
這使得聯(lián)接非常適合查找值并將其包含在結(jié)果中。這通常是非規(guī)范化(反轉(zhuǎn)規(guī)范化)的結(jié)果,并涉及在一個表中使用外鍵來通過在另一個表中使用主鍵來查找列值。
現(xiàn)在將上述描述與聯(lián)盟的描述進行比較。在聯(lián)合中,結(jié)果中的每一行都來自一個表或另一個表。在聯(lián)合中,不會組合列來創(chuàng)建結(jié)果,而是組合行。
連接和聯(lián)合都可用于將來自一個或多個表的數(shù)據(jù)組合成單個結(jié)果。他們兩個都是不同的方式。雖然聯(lián)接用于組合來自不同表的列,但聯(lián)合用于組合行。
添加回答
舉報