SQL Intersect(计算交集)

时间:2020-02-23 14:32:29  来源:igfitidea点击:

在日常情况下,我们确实满足了需要从多个表中获取通用结果集的要求。
为了达到这样的要求,SQL提供了一个称为Intersect的功能。
交集是指两个或者多个之间共有。
与其字面含义相似,SQL相交提供了多个SELECT语句之间的公共结果。

SQL Intersect

SQL Intersect子句用于合并两个或者多个SELECT查询,但结果集将是查询的交集。
换句话说,SQL Intersect将在多个SELECT语句之间提供相同的结果。

SQL Intersect的使用规则

  • 查询应具有与选择查询相同的列数。

  • 结果集的数据类型应该相同。

  • 相交使用列位置进行组合,而不使用列名称。

  • 每个选择查询中的列必须具有相同的顺序。

SQL Intersect求交集的语法

SELECT column_name[s] from table1
INTERSECT
SELECT column_name[s] from table2;

MySQL不支持SQL Intersect子句。
我在本教程中使用PostgreSQL数据库来显示SQL Intersect示例。

SQL Intersect示例

让我们考虑以下两个用于SQL Intersect的表。

客户表

CUSTOMER IDCUSTOMER NAMESTATECOUNTRY
1AkashDelhiSan Franceco
2AmitHyderabadSan Franceco
3JasonCaliforniaUSA
4JohnTexasUSA

供应商表

SUPPLIER IDSUPPLIER NAMESTATECOUNTRY
1AppleCaliforniaUSA
2TCSHyderabadSan Franceco
3Information SystemDelhiSan Franceco
4Solar EnergyTexasUSA

这是用于创建表和在PostgreSQL数据库中插入示例数据的脚本。

CREATE TABLE public."Customer"
(
  "Customer_Id" bigint NOT NULL,
  "Customer_Name" character varying(50) COLLATE pg_catalog."default" NOT NULL,
  "State" character varying(20) COLLATE pg_catalog."default" NOT NULL,
  "Country" character varying(20) COLLATE pg_catalog."default" NOT NULL,
  CONSTRAINT "Customer_pkey" PRIMARY KEY ("Customer_Id")
)

CREATE TABLE public."Supplier"
(
  "Supplier_Id" bigint NOT NULL,
  "Supplier_Name" character varying(50) COLLATE pg_catalog."default" NOT NULL,
  "State" character varying(20) COLLATE pg_catalog."default" NOT NULL,
  "Country" character varying(20) COLLATE pg_catalog."default" NOT NULL,
  CONSTRAINT "Supplier_pkey" PRIMARY KEY ("Supplier_Id")
)
WITH (
  OIDS = FALSE
)
TABLESPACE pg_default;

INSERT INTO public."Customer"("Customer_Id", "Customer_Name", "State", "Country")VALUES (1, 'Akash', 'Delhi', 'San Franceco'),
	(2, 'Amit', 'Hyderabad', 'San Franceco'),
	(3, 'Jason', 'California', 'USA'),
	(4, 'John', 'Texas', 'USA');

INSERT INTO public."Supplier"("Supplier_Id", "Supplier_Name", "State", "Country")VALUES (1, 'Apple', 'California', 'USA'),
	(2, 'TCS', 'Hyderabad', 'San Franceco'),
	(3, 'Information System', 'Delhi', 'San Franceco'),
	(4, 'Solar Energy', 'Texas', 'USA');

让我们来看一些使用这些表的SQL Intersect示例。

  • SQL相交
Select State ,Country from Customer
Intersect
Select State,Country from Supplier;

输出:

STATECOUNTRY
CaliforniaUSA
HyderabadSan Franceco
TexasUSA
DelhiSan Franceco

SQL相交

上面的结果集是两个表中公共行的输出。

  • SQLIntersect命令
Select State ,Country from Customer
Intersect
Select State,Country from Supplier order by State;

输出:

STATECOUNTRY
CaliforniaUSA
DelhiSan Franceco
HyderabadSan Franceco
TexasUSA

上面的结果集是基于状态以排序模式从两个表中的公共行的输出。

  • SQL基于"Country"列计算交集
Select State ,Country from Customer
Intersect
Select State,Country from Supplier where Country='San Franceco';

输出:

STATECOUNTRY
DelhiSan Franceco
HyderabadSan Franceco

上面的结果集是两个表中基于where子句(取决于国家/地区)的公共行的输出。