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子句(取决于国家/地区)的公共行的输出。