题
之间的区别是什么 JOIN
和 UNION
?我可以有一个例子吗?
解决方案
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)
其他提示
UNION 结合两种结果或多个查询到一个结果集,包括属于在工会所有查询的所有行。
使用加入,则可以检索基于表之间的逻辑关系从两个或更多表中的数据。联接指示SQL应该如何使用数据从一个表中的另一表中选择行。
在UNION操作是从使用JOINS从两个表合并列不同。
UNION示例:
SELECT 1 AS [Column1], 2 AS [Column2]
UNION
SELECT 3 AS [Column1], 4 AS [Column2]
输出:
Column1 Column2
-------------------
1 2
3 4
JOIN示例:
SELECT a.Column1, b.Column2 FROM TableA a INNER JOIN TableB b ON a.Id = b.AFKId
此将输出所有从两个表中的行的量,条件a.Id = b.AFKId
是真实的。
连接与联合可以用于将数据从一个或多个表结合起来。不同之处在于数据的方式相结合。
在简单来说,<强>加入数据组合成新的列即可。如果两个表连接在一起,然后,从第一表中的数据示出在一组列的旁边的相同行中的第二个表的列中。
<强>联盟结合数据到新的行。如果两个表是“联合在一起”在一起,然后从第一表中的数据是在一组行,以及从所述第二表中的另一组数据。中的行位于相同的结果。
下面是一个连接的视觉描绘。表A和B的列被组合成单个结果。
结果中的每行包含创建从BOTH表A和B的行列时从另一个表匹配列的列。该匹配被称为连接条件。
这使得加入用于查找值,并让他们参与的结果真的很棒。这通常是反规范化(倒车正常化)的结果,并使用在一个表的外键通过在另一使用主键来查找列值涉及。
现在比较与联合的上述描述。在工会的结果中的每一行是从一个表或其他。在一个联盟,列不组合以产生结果,列组合。
这两个连接与联合可以用于将数据从一个或多个表组合成单个结果。他们俩都有关,这是不同的方法。而加入用于从不同的表列组合在一起,结合被用于行结合。
JOIN:
一个连接用于与相同的或显示的列 从不同的表不同的名字。输出显示 将单独显示的所有列。那就是 列将被对准彼此相邻。
UNION:
在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
现在用于执行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
这是联接。
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
联盟使得两个查询看起来像一个。连接被用于在单个查询语句检查两个或多个表
连接与联合可以用于将数据从一个或多个表结合起来。不同之处在于数据的方式相结合。
在简单来说,加入的数据组合成新的列。如果两个表连接在一起,然后,从第一表中的数据示出在一组列的旁边的相同行中的第二个表的列中。
联盟结合数据到新的行。如果两个表是“联合在一起”在一起,然后从第一表中的数据是在一组行,以及从所述第二表中的另一组的数据。中的行位于相同的结果。
请记住,联盟将合并结果( SQL服务器可以肯定的)(功能或者错误?)
select 1 as id, 3 as value
union
select 1 as id, 3 as value
ID,值
1,3
select * from (select 1 as id, 3 as value) t1 inner join (select 1 as id, 3 as value) t2 on t1.id = t2.id
ID,值,ID,值
1,3,1,3
1。 在SQL连接子句用于记录来自两个或多个数据库中的表结合起来。 A JOIN是用于通过使用共同的每个值组合从两个表中的字段的装置。
2。 在SQL UNION运算符将两个或多个SELECT语句的结果。 联盟内的每个SELECT语句必须具有相同的列数。列也必须有类似的数据类型。此外,在各SELECT语句中的列必须按相同的顺序。
例如: 表1客户/表2目
内加入:
选择ID,NAME,金额,日期
FROM客户
INNER JOIN订单
在CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
联合:
选择ID,NAME,金额,日期
FROM客户
LEFT连接顺序
在CUSTOMERS.ID = ORDERS.CUSTOMER_ID
UNION
选择ID,NAME,金额,日期 FROM客户
RIGHT连接顺序
在CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
尤斯UNION
UNION是两个或多个查询的结果组合成一个结果集,包括属于在工会所有查询的所有行。
UNION Example: SELECT 121 AS [Column1], 221 AS [Column2] UNION SELECT 321 AS [Column1], 422 AS [Column2]
Output: Column1 Column2 ------------------- 121 221 321 422
尤斯JOIN的
联接,可以从两个或多个表基于表之间的逻辑关系中检索数据。
JOIN Example: SELECT a.Column1, b.Column2 FROM TblA a INNER JOIN TblB b ON a.Id = b.id
在抽象的,它们是相似的,因为两个表或结果集被组合,但UNION是真的结果集与各列具有类似数据类型的列相同数目的完美组合。该结构被添加相同的,只是新行。
在联接,可以结合表/结果集与任何可能的结构,包括一个直角连接在没有共享/类似的列。
联盟操作被组合在垂直的结果强>行的骨料, UNION操作被组合的结果的水平强>列的骨料。
我喜欢将一般差异视为:
- JOINS 连接表
- UNION(等)组合查询。