JOIN和UNION有什么不同?
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将两个或更多个查询的结果合并到一个结果集中,该结果集包含属于联合中所有查询的所有行。
通过使用JOIN ,您可以基于表之间的逻辑关系从两个或多个表中检索数据。 连接表明SQL如何使用一个表中的数据来select另一个表中的行。
UNION操作不同于使用组合两个表中的列的JOIN。
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
为真的两个表中的所有行。
join:
连接用于显示来自不同表的相同或不同名称的列。 显示的输出将具有单独显示的所有列。 也就是说,这些列将相互alignment。
联盟:
UNION集操作符用于组合两个具有相同数据types列的表中的数据。 当执行UNION时,两个表中的数据将被收集到具有相同数据types的单个列中。
例如:
看下面的两个表格:
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
现在执行JOINtypes查询如下所示。
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
这是一个join。
UNION意味着您必须使用相同数量和types的列的表或结果集,并将其添加到表/结果集中。 看看这个例子:
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
你可能会看到两个相同的原理图解释,但这些完全是混淆的。
对于联盟:
对于JOIN:
他们是完全不同的东西。
连接允许您在不同的表中关联类似的数据。
联合将两个不同查询的结果作为单个logging集返回。
Union使两个查询看起来像一个。 连接用于检查单个查询语句中的两个或多个表
连接和联合可用于合并来自一个或多个表的数据。 不同之处在于数据如何组合。
简单来说, 连接将数据组合成新的列 。 如果两个表连接在一起,则第一个表中的数据将显示在同一行中第二个表的列旁边的一组列中。
联合将数据合并到新的行中。 如果两个表“联合”在一起,那么来自第一个表的数据在一组行中,而来自第二个表的数据在另一组中。 行在相同的结果。
这是一个join的视觉描述。 表A和B的列合并为一个结果。
结果中的每一行都包含BOTH表A和B中的列。当一个表中的列与另一个表中的列匹配时,会创build行。 这个匹配被称为连接条件。
这使得连接非常适合查找值并将其包含在结果中。 这通常是非规格化(反转规范化)的结果,并且涉及在一个表中使用外键通过在另一个表中使用主键来查找列值。
现在将上面的描述与工会的描述进行比较。 在一个联合中,结果中的每一行都来自一个表或另一个表。 在联合中,不合并列以创build结果,合并行。
连接和联合都可以用来将来自一个或多个表格的数据合并为一个结果。 他们两人谈到这是不同的方式。 尽pipe使用联接来组合不同表中的列,但联合用于组合行。
资源
连接和联合可用于合并来自一个或多个表的数据。 不同之处在于数据如何组合。
简单来说,连接将数据组合成新的列。 如果两个表连接在一起,则第一个表中的数据将显示在同一行中第二个表的列旁边的一组列中。
联合将数据合并到新的行中。 如果两个表“联合”在一起,那么来自第一个表的数据在一组行中,而来自第二个表的数据在另一组中。 行在相同的结果。
请记住,联合会合并结果( SQL Server肯定)(function或错误?)
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连接子句用于组合来自数据库中两个或多个表的logging。 JOIN是一种通过使用两个表中的公共值来组合两个表中的字段的方法。
2. SQL UNION运算符组合两个或更多SELECT语句的结果。 UNION中的每个SELECT语句必须具有相同的列数。 这些列也必须具有相似的数据types。 另外,每个SELECT语句中的列必须是相同的顺序。
例如:表1客户/表2订单
内部联接:
SELECT ID,NAME,AMOUNT,DATE
从客户
内部联接订单
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
联盟:
SELECT ID,NAME,AMOUNT,DATE
从客户
左join订单
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
联盟
SELECT ID,NAME,AMOUNT,DATE FROM CUSTOMERS
正确join排列
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
在摘要中,它们是相似的,因为两个表或结果集合在一起,但是UNION实际上是将结果集合与具有相似数据types的列的相同数量的列相组合。 STRUCTURE是相同的,只有新的行被添加。
在连接中,可以将表/结果集与任何可能的结构组合在一起,包括没有共享/类似列的笛卡尔连接。
UNION运算符仅用于组合两个或更多SELECT语句。
而JOIN是用于从每个表中select行,无论是内部,外部,左侧或右侧的方法。
请参考这里和这里 。 用例子有一个更好的解释。
任何现代的DBS,如MariaDB ,都实现了一个UNION JOIN命令。 这是一个SQL 3命令,但它不是众所周知或使用的。 在UNION JOIN上学习更多。