SQL中的UNION和JOIN

UNION

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
(1) UNION
UNION是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集 。
UNION 语法:

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

(2)UNION ALL
默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
UNION ALL语法:

SELECT column_name(s) FROM table_name1 
UNION ALL 
SELECT column_name(s) FROM table_name2

另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
UNION 指令表示将多个表合并显示,并不是连接显示。UNION只是把结果集并集起来,而不是交集出来。
UNION的限制是多个表的列必须是相同的种类
UNION并起来的结果集自动执行distinc,去除重复的列。
UNION ALL则把重复的列保留,完整显示多个结果集的并集。

JOIN

JOIN用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
JOIN具体的使用如下:
(1)INNER JOIN
内部联接两个表中的记录,仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。我理解的是只要记录不符合ON条件,就不会显示在结果集内。
产生的是两个表的交集。INNER JOIN语法如下:

SELECT * FROM table_name1 
INNER JOIN
table_name2
ON table_name1.column_name=table_name2.column_name
WHERE ...

(2) FULL JOIN
完整外部联接返回左表和右表中的所有行。就是LEFT JOIN和RIGHT JOIN和合并,左右两表的数据都全部显示
产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。FULL OUTER JOIN语法如下:

SELECT * FROM table_name1 
FULL OUTER JOIN
table_name2
ON table_name1.column_name=table_name2.column_name
WHERE ...

(3) LEFT JOIN
外部联接两个表中的记录,并包含左表中的全部记录。如果左表的某记录在右表中没有匹配记录,则在相关联的结果集中右表的所有选择列表列均为空值。理解为即使不符合ON条件,左表中的记录也全部显示出来,且结果集中该类记录的右表字段为空值。
从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。LEFT JOIN语法如下:

SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name
WHERE ...

(4)RIGHT JOIN
外部联接两个表中的记录,并包含右表中的全部记录。简单说就是和LEFT JOIN反过来。
从右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。RIGHT JOIN语法如下:

SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

JOIN和UNION的区别

join 是两张表做交连后里面条件相同的部分记录产生一个记录集,
union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集 。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值