3 回答
TA贡献1812条经验 获得超5个赞
UNION将查询中的行放在彼此之后,同时JOIN生成笛卡尔积和子集 - 完全不同的操作。琐碎的例子UNION:
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中的列。当一个表中的列与另一个表中的列匹配时,将创建行。此匹配称为连接条件。
这使得联接非常适合查找值并将其包含在结果中。这通常是非规范化(反转规范化)的结果,并涉及在一个表中使用外键来通过在另一个表中使用主键来查找列值。
现在将上述描述与联盟的描述进行比较。在联合中,结果中的每一行都来自一个表或另一个表。在联合中,不会组合列来创建结果,而是组合行。
连接和联合都可用于将来自一个或多个表的数据组合成单个结果。他们两个都是不同的方式。虽然联接用于组合来自不同表的列,但联合用于组合行。
添加回答
举报