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 ID | CUSTOMER NAME | STATE | COUNTRY |
|---|---|---|---|
| 1 | Akash | Delhi | San Franceco |
| 2 | Amit | Hyderabad | San Franceco |
| 3 | Jason | California | USA |
| 4 | John | Texas | USA |
供应商表
| SUPPLIER ID | SUPPLIER NAME | STATE | COUNTRY |
|---|---|---|---|
| 1 | Apple | California | USA |
| 2 | TCS | Hyderabad | San Franceco |
| 3 | Information System | Delhi | San Franceco |
| 4 | Solar Energy | Texas | USA |
这是用于创建表和在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;
输出:
| STATE | COUNTRY |
|---|---|
| California | USA |
| Hyderabad | San Franceco |
| Texas | USA |
| Delhi | San Franceco |
SQL相交
上面的结果集是两个表中公共行的输出。
- SQLIntersect命令
Select State ,Country from Customer Intersect Select State,Country from Supplier order by State;
输出:
| STATE | COUNTRY |
|---|---|
| California | USA |
| Delhi | San Franceco |
| Hyderabad | San Franceco |
| Texas | USA |
上面的结果集是基于状态以排序模式从两个表中的公共行的输出。
- SQL基于"Country"列计算交集
Select State ,Country from Customer Intersect Select State,Country from Supplier where Country='San Franceco';
输出:
| STATE | COUNTRY |
|---|---|
| Delhi | San Franceco |
| Hyderabad | San Franceco |
上面的结果集是两个表中基于where子句(取决于国家/地区)的公共行的输出。

