UNION语句

2020-12-07
SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]

修饰符

DISTINCT:重复的行将从UNION结果中删除,不指定任何值,与此关键字效果相同
ALL:不会发生重复行删除,结果包含所有SELECT语句中的所有匹配行

UNION语句的每个SELECT语句相同位置的列应具有相同列名,应具有相同的数据类型。例如,第一条语句的第一列应与其他语句的第一列具有相同的类型。如果对应SELECT列的数据类型不匹配,则UNION结果中列的类型和长度将考虑所有SELECT语句检索到的值 
要将ORDER BY或LIMIT子句应用于每个SELECT语句,请在SELECT上加上括号并将该子句放在括号内
ORDER BY对单个SELECT语句的使用不表示行在最终结果中出现的顺序,因为UNION默认情况下会产生一组无序的行。尽管它不一定会影响最终结果中这些行的顺序,但通常会与一起使用LIMIT,以确定要检索的选定行的子集

使用ORDER BY或LIMIT对整个UNION结果进行排序或限制

(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;

union区分不同表

SELECT name,uid,'user' AS table_name FROM user 
UNION ALL
SELECT name,uid,'customer' AS table_name FROM customer

 

{/if}