postgresql----UNION&&INTERSECT&&EXCEPT

多个SELECT语句可以使用UNION,INTERSECT和EXCEPT进行集合处理,其中UNION用于求并集,INTERSECT用于求交集,EXCEPT用于求差集。用法如下

query1 UNION query2

query1 INTERSECT query2

query1 EXCEPT query2

其中query1和query2的SELECT子句中字段个数必须相同,且对应的数据类型必须相同(如果int和bigint结果取bigint,varchar(5)和varchar(10)结果取varchar(10)),字段名可以不同,但是最终结果会以第一个SELECT子句中字段名称返回。

测试表:

test=# create table tbl_test1(
test(# a int,
test(# b varchar(10),
test(# c varchar(5)
test(# );
CREATE TABLE
test=# create table tbl_test2(
test(# e int,
test(# f varchar(10),
test(# g varchar(32)
test(# );
CREATE TABLE
test=# insert into tbl_test1(a,b,c) values (1,‘HA‘,‘12‘),(2,‘ha‘,‘543‘);
INSERT 0 2
test=# insert into tbl_test2(e,f,g) values (1,‘HA‘,‘dh‘),(3,‘hk‘,‘76sskjhk‘);
INSERT 0 2

一.UNION

两个查询使用UNION的结果使用图片表示如下:

UNION默认会去重,即重复数据只会返回一行,如果需要保留重复数据所有行可以使用UNION ALL。

示例1.

test=# select a,b from tbl_test1 union select e,f from tbl_test2 ;
 a | b
---+----
 3 | hk
 1 | HA
 2 | ha
(3 rows)

示例2.

test=# select a,b from tbl_test1 union all select e,f from tbl_test2 ;
 a | b
---+----
 1 | HA
 2 | ha
 1 | HA
 3 | hk
(4 rows)

示例3.

test=# select a,c from tbl_test1 union all select e,g from tbl_test2 ;
 a |    c
---+----------
 1 | 12
 2 | 543
 1 | dh
 3 | 76sskjhk
(4 rows)

二.INTERSECT

两个查询使用INTERSECT求交集的结果使用图片表示如下:

示例1.

test=# select a,b from tbl_test1 intersect select e,f from tbl_test2 ;
 a | b
---+----
 1 | HA
(1 row)

三.EXCEPT

两个查询使用EXCEPT(A EXCEPT B)求差集的结果:

示例1.

test=# select a,b from tbl_test1 except select e,f from tbl_test2 ;
 a | b
---+----
 2 | ha
(1 row)
时间: 2024-08-08 09:30:34

postgresql----UNION&&INTERSECT&&EXCEPT的相关文章

LINQ to SQL语句Concat/Union/Intersect/Except--2017年2月22日

Concat/Union/Intersect/Except操作 适用场景:对两个集合的处理,例如追加.合并.取相同项.相交项等等. Concat(连接) 说明:连接不同的集合,不会自动过滤相同项:延迟. 1.简单形式: var q = ( from c in db.Customers select c.Phone ).Concat( from c in db.Customers select c.Fax ).Concat( from e in db.Employees select e.Home

LINQ to SQL语句(8)之Concat/Union/Intersect/Except

Concat/Union/Intersect/Except操作 适用场景:对两个集合的处理,例 如追加.合并.取相同项.相交项等等. Concat(连接) 说明:连接 不同的集合,不会自动过滤相同项:延迟. 1.简单形式: var q = ( from c in db.Customers select c.Phone ).Concat( from c in db.Customers select c.Fax ).Concat( from e in db.Employees select e.Ho

[转]C#Linq中的Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods,skip,take,takewhile,skipwhile,编译查询等

本文转自:http://www.cnblogs.com/suizhikuo/p/3791799.html 我们继续讲解LINQ to SQL语句,这篇我们来讨论Union All/Union/Intersect操作和Top/Bottom操作和Paging操作和SqlMethods操作 . Union All/Union/Intersect操作 适用场景:对两个集合的处理,例如追加.合并.取相同项.相交项等等. Concat(连接) 说明:连接不同的集合,不会自动过滤相同项:延迟. 1.简单形式:

LINQ体验(8)——LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods

我们继续解说LINQ to SQL语句,这篇我们来讨论Union All/Union/Intersect操作和Top/Bottom操作和Paging操作和SqlMethods操作 . Union All/Union/Intersect操作 适用场景:对两个集合的处理,比如追加.合并.取同样项.相交项等等. Concat(连接) 说明:连接不同的集合.不会自己主动过滤同样项:延迟. 1.简单形式: var q = ( from c in db.Customers select c.Phone ).

List之Union(),Intersect(),Except() 亦可以说是数学中的并集,交集,差集

Union() 这个方法将会Union(并集)两个序列(集合)连接成一个新列表(集合) 方法定义是: public static IEnumerable<TSource> Union<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second) public static IEnumerable<TSource> Union<TSource>(this I

SQL集合操作符样例(UNION,INTERSECT,EXCEPT)

由于MYSQL目前只实现了UNION, 所以后面两个就没得玩罗.... SELECT emp_id, assigned_branch_id -> FROM employee -> WHERE title = 'Teller' -> UNION -> SELECT open_emp_id, open_branch_id -> FROM account -> WHERE product_cd = 'SAV' -> ORDER BY emp_id;

Postgresql流水帐(第六天):view

CREATE OR REPLACE view_name AS query DROP VIEW [ IF EXISTS ] view_name; 一个复杂的 query: SELECT cu.customer_id AS id, ????(((cu.first_name)::text || ' '::text) || (cu.last_name)::text) AS name, ????a.address, ????a.postal_code AS "zip code", ????a.p

PostgreSQL 行排序详解

在查询生成输出表之后,也就是在处理完选择列表之后,你还可以对输出表进行排序. 如果没有排序,那么行将以不可预测的顺序返回(实际顺序将取决于扫描和连接规划类型和在磁盘上的顺序, 但是肯定不能依赖这些东西).确定的顺序只能在明确地使用了排序步骤之后才能保证. ORDER BY子句用于声明排序顺序: SELECT _select_list_ FROM _table_expression_ ORDER BY _sort_expression1_ [ASC | DESC] [NULLS { FIRST |

PostgreSQL 语法

格式约定 方括弧([ 和 ])表示可选的部分(在Tcl命令里使用的是问号 (?).花括弧({ 和 }) 和竖条(|)表示你必须选取一个候选.连续点(...) 表示前面的元素可以重复. ABORT 语法: ABORT [ WORK | TRANSACTION ] ALTER AGGREGATE 语法: ALTER AGGREGATE name ( type ) RENAME TO new_name ALTER AGGREGATE name ( type ) OWNER TO new_owner A

【转载】如果有人问你数据库的原理,叫他看这篇文章

原文:如果有人问你数据库的原理,叫他看这篇文章 本文由 伯乐在线 - Panblack 翻译,黄利民 校稿.未经许可,禁止转载!英文出处:Christophe Kalenzaga.欢迎加入翻译组. 一提到关系型数据库,我禁不住想:有些东西被忽视了.关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 Teradata .但很少有文章讲解数据库是如何工作的.你可以自己谷歌/百度一下『关系型数据库原理』,看看结果多么的稀少[译者注:百度为您找到相关结果约1,850,000个…]