MariaDB INTERSECT 子句用于返回两个或多个 SELECT 语句的结果集的交集。如果两个结果集中都存在一条记录,则它将包含在 INTERSECT 结果中。但是,如果一条记录存在于一个结果集中而不存在于另一个结果集中,则将从 INTERSECT 结果中删除该记录。
使用 INTERSECT 子句时,必须满足以下条件:
- 每个 SELECT 语句中的列数应该相等。
- 每个 SELECT 语句中的列的数据类型应该匹配。
- 每个 SELECT 语句中的列顺序应该匹配。
语法
在 MariaDB 中使用 INTERSECT 子句的语法如下:
SELECT column1, column2, ... FROM table1
INTERSECT [ALL | DISTINCT]
SELECT column1, column2, ... FROM table2
注意: 默认情况下,INTERSECT 子句仅采用不同的值价值观。要选择重复值,可以使用 INTERSECT ALL 子句。要强制此子句选择不同的值,可以使用 INTERSECT DISTINCT 子句。
示例:
考虑名为 Product 和 Inventory 的数据库表,其中包含以下记录:
表 1:Product 表
Name | Brand | Price | Quantity |
---|---|---|---|
Apple | Delicious | 1.5 | 40 |
Apple | Harvest | 1.6 | 50 |
Orange | Delicious | 2.0 | 40 |
Orange | Harvest | 1.9 | 50 |
Watermelon | LocalFarm | 4.0 | 50 |
Mango | LocalFarm | 3.5 | 60 |
表 2:Inventory 表
Name | Brand | Price | Quantity |
---|---|---|---|
Apple | Delicious | 1.5 | 20 |
Orange | LocalFarm | 2.0 | 40 |
Watermelon | LocalFarm | 4.0 | 20 |
使用INTERSECT子句:获取Name的记录如果两个记录集中都存在该列,则可以使用以下查询:
SELECT Name FROM Product
INTERSECT
SELECT Name FROM Inventory
ORDER BY Name;
这将产生如下所示的结果:
Name |
---|
Apple |
Orange |
Watermelon |
使用 INTERSECT 子句和 WHERE 子句: 要获取两个记录集中都存在指定条件的 Name 列的记录,可以使用以下语句:
SELECT Name FROM Product
INTERSECT
SELECT Name FROM Inventory
WHERE Quantity < 30
ORDER BY Name;
这将产生以下结果:
Name |
---|
Apple |
Watermelon |
对多列使用 INTERSECT 子句:获取两个记录集中都存在的 Name 和 Brand 列的记录,查询将为:
SELECT Name, Brand FROM Product
INTERSECT
SELECT Name, Brand FROM Inventory
ORDER BY Name;
这将产生以下结果:
Name | Brand |
---|---|
Apple | Delicious |
Watermelon | LocalFarm |