Ale*_*lli 290
UNION
将查询中的行放在彼此之后,同时JOIN
生成笛卡尔积和子集 - 完全不同的操作.琐碎的例子UNION
:
mysql> SELECT 23 AS bah
-> UNION
-> SELECT 45 AS bah;
+-----+
| bah |
+-----+
| 23 |
| 45 |
+-----+
2 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
类似的简单例子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)
Run Code Online (Sandbox Code Playgroud)
Kir*_*tan 59
UNION将两个或多个查询的结果合并到一个结果集中,该结果集包括属于联合中所有查询的所有行.
通过使用JOIN,您可以根据表之间的逻辑关系从两个或多个表中检索数据.联接指示SQL应如何使用来自一个表的数据来选择另一个表中的行.
UNION操作与使用组合来自两个表的列的JOIN不同.
UNION示例:
SELECT 1 AS [Column1], 2 AS [Column2]
UNION
SELECT 3 AS [Column1], 4 AS [Column2]
Run Code Online (Sandbox Code Playgroud)
输出:
Column1 Column2
-------------------
1 2
3 4
Run Code Online (Sandbox Code Playgroud)
加入示例:
SELECT a.Column1, b.Column2 FROM TableA a INNER JOIN TableB b ON a.Id = b.AFKId
Run Code Online (Sandbox Code Playgroud)
这将输出条件a.Id = b.AFKId
为true的两个表中的所有行.
Hum*_*mad 53
联接和联合可用于组合来自一个或多个表的数据.不同之处在于数据的组合方式.
简单来说,连接将数据组合到新列中.如果将两个表连接在一起,则第一个表中的数据将显示在同一行中第二个表的列旁边的一组列中.
联合将数据组合成新行. 如果两个表一起"联合",则第一个表中的数据位于一组行中,而第二个表中的数据位于另一个表中.行的结果相同.
这是一个连接的视觉描述.表A和B的列组合成一个结果.
结果中的每一行都包含BOTH表A和B中的列.当一个表中的列与另一个表中的列匹配时,将创建行.此匹配称为连接条件.
这使得联接非常适合查找值并将其包含在结果中.这通常是非规范化(反转规范化)的结果,并且涉及在一个表中使用外键来通过在另一个表中使用主键来查找列值.
现在将上述描述与联盟的描述进行比较.在联合中,结果中的每一行都来自一个表或另一个表.在联合中,不会组合列来创建结果,而是组合行.
连接和联合都可用于将来自一个或多个表的数据组合成单个结果.他们两个都是不同的方式.虽然联接用于组合来自不同表的列,但联合用于组合行.
Jav*_*ain 50
您可能会看到两者的相同原理图说明,但这些都完全令人困惑.
对于UNION:
对于JOIN:
小智 40
连接用于显示来自不同表的具有相同或不同名称的列.显示的输出将单独显示所有列.也就是说,列将彼此相邻排列.
UNION集合运算符用于组合两个具有相同数据类型列的表的数据.执行UNION时,两个表中的数据将收集在具有相同数据类型的单个列中.
例如:
请参见下面的两个表:
Table t1
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2
Table t2
manufacturer_id manufacturer
1 ABC Gmbh
2 DEF Co KG
Run Code Online (Sandbox Code Playgroud)
现在,为了执行JOIN类型,查询如下所示.
SELECT articleno, article, manufacturer
FROM t1 JOIN t2 ON (t1.manufacturer_id =
t2.manufacturer_id);
articelno article manufacturer
1 hammer ABC GmbH
2 screwdriver DEF Co KG
Run Code Online (Sandbox Code Playgroud)
这是一个加入.
UNION意味着您必须使用相同数量和类型的列来表或结果集,并将其一起添加到表/结果集中.看看这个例子:
Table year2006
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2
Table year2007
Articleno article price manufacturer_id
1 hammer 6 $ 3
2 screwdriver 7 $ 4
SELECT articleno, article, price, manufactruer_id
FROM year2006
UNION
SELECT articleno, article, price, manufacturer_id
FROM year2007
articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2
1 hammer 6 $ 3
2 screwdriver 7 $ 4
Run Code Online (Sandbox Code Playgroud)
小智 6
联接和联合可用于组合来自一个或多个表的数据。不同之处在于数据的组合方式。
简单来说,联接将数据合并到新列中。如果两个表连接在一起,则第一个表中的数据显示在同一行中第二个表列旁边的一组列中。
联合将数据合并到新行中。如果两个表“联合”在一起,则第一个表中的数据在一组行中,而第二个表中的数据在另一组中。行在相同的结果中。