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操作符只是用于组合两个或多个SELECT语句。
而JOIN用于从每个表中选择行,可以通过内、外、左或右方法。
参考这里和这里。用例子来解释会更好。
连接和联合可用于组合来自一个或多个表的数据。不同之处在于数据是如何组合的。
简单来说,连接将数据合并到新的列中。如果两个表连接在一起,那么来自第一个表的数据将显示在同一行中的一组列中,与第二个表的列一起显示。
联合将数据合并到新的行中。如果两个表“联合”在一起,那么来自第一个表的数据在一组行中,来自第二个表的数据在另一组行中。结果是一样的。
加入:
连接用于显示具有相同或的列 不同表的不同名称。显示的输出 将单独显示所有列。也就是 列将彼此对齐。
联盟:
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中,如何在范围中“分组”?
- 选项(RECOMPILE)总是更快;为什么?
- 设置数据库从单用户模式到多用户
- oracle中的RANK()和DENSE_RANK()函数有什么区别?
- 的类型不能用作索引中的键列
- SQL逻辑运算符优先级:And和Or
- 如何检查一个表是否存在于给定的模式中
- 添加一个复合主键
- 如何在SQL Server Management Studio中查看查询历史
- 可以为公共表表达式创建嵌套WITH子句吗?
- 什么时候我需要在Oracle SQL中使用分号vs斜杠?
- SQL Server的NOW()?
- 在SQL中,count(列)和count(*)之间的区别是什么?
- 在SQL Server中截断(不是四舍五入)小数位
- 仅在Datetime列上按日期分组