Postgresql UNION 语句
在 Postgresql 中,UNION 子句用于合并多个SELECT语句的结果集,并去除重复的行。它能够将多个查询的结果合并成一个结果集,但要求每个查询的列数和数据类型必须一致或兼容。
基本语法
select_statement UNION [ ALL | DISTINCT ] select_statement
select_statement 是任何没有 ORDER BY、LIMIT、FOR NO KEY UPDATE、FOR UPDATE、FOR SHARE 或 FOR KEY SHARE 子
句的 SELECT 语句。(如果 ORDER BY 和 LIMIT 括在括号中,则可以将其附加到子表达式。如果没有括号,这些子句将被视为应用于 UNION 的结果,而不是其右侧的 input 表达式。
UNION 运算符计算所涉及的 SELECT 语句返回的行的集合并集。如果行至少出现在一个结果集中,则该行位于两个结果集的集合并集中。表示 UNION 的直接操作数的两个 SELECT 语句必须生成相同数量的列,并且相应的列必须具有兼容的数据类型。
除非指定了 ALL 选项,否则 UNION 的结果不包含任何重复的行。ALL 阻止消除重复项。(因此,UNION ALL 通常比 UNION 快得多;请尽可能使用 ALL。可以编写 DISTINCT 以显式指定消除重复行的默认行为。
同一 SELECT 语句中的多个 UNION 运算符从左到右计算,除非括号中另有指示。
目前,无法为 UNION 结果或 UNION 的任何输入指定 FOR NO KEY UPDATE、FOR UPDATE、FOR SHARE 和 FOR KEY SHARE。
使用示例
查询全校老师和学生的姓名
select student_name from students UNION select teacher_name from teachers
或
select student_name from students UNION ALL select teacher_name from teachers