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是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集 。