SQL 组合查询

组合查询

在 SQL 中,组合查询(Combined Queries)允许你将多个查询的结果集合并成一个结果集。这在需要从多个表中检索数据并将其合并显示时非常有用。组合查询通常使用 UNIONUNION ALL 来实现。

1. UNION

UNION 用于组合两个或多个 SELECT 语句的结果集,并自动去除重复的行。

语法:
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
  • column1, column2, ...:要选择的列,必须在所有查询中具有相同的名称和数据类型。
  • table1, table2, ...:要查询的表。

2. UNION ALL

UNION ALL 也用于组合两个或多个 SELECT 语句的结果集,但不会去除重复的行。这在需要保留所有重复行时非常有用。

语法:
SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;

3. INTERSECT

INTERSECT 用于返回两个查询结果集的交集,即两个结果集中都存在的记录。需要注意的是,INTERSECT 在某些数据库系统(如 MySQL)中不支持。

语法:
SELECT column1, column2, ...
FROM table1
INTERSECT
SELECT column1, column2, ...
FROM table2;

4. EXCEPTMINUS

EXCEPT(在 SQL Server 中)或 MINUS(在 Oracle 中)用于返回两个查询结果集的差集,即第一个结果集中存在但第二个结果集中不存在的记录。需要注意的是,EXCEPTMINUS 在某些数据库系统(如 MySQL)中不支持。

语法:
SELECT column1, column2, ...
FROM table1
EXCEPT
SELECT column1, column2, ...
FROM table2;
示例:

假设有两个表 employeescontractors,数据如下:

employees 表:

employee_id name role
1 Alice Developer
2 Bob Manager
3 Charlie Designer

contractors 表:

contractor_id name role
1 David Consultant
2 Eve Analyst
3 Alice Developer
UNION

将两个表中的数据合并,显示所有员工和承包商的名称和角色:

SELECT name, role
FROM employees
UNION
SELECT name, role
FROM contractors;

结果:

name role
Alice Developer
Bob Manager
Charlie Designer
David Consultant
Eve Analyst
UNION ALL:

将两个表中的数据合并,显示所有员工和承包商的名称和角色,保留重复行:

SELECT name, role
FROM employees
UNION ALL
SELECT name, role
FROM contractors;

结果:

name role
Alice Developer
Bob Manager
Charlie Designer
David Consultant
Eve Analyst
Alice Developer
INTERSECT:

查询两个表中都存在的记录:

SELECT name, role
FROM employees
INTERSECT
SELECT name, role
FROM contractors;

结果:

name role
Alice Developer
EXCEPT 或 MINUS

查询 employees 表中存在但 contractors 表中不存在的记录:

SELECT name, role
FROM employees
EXCEPT
SELECT name, role
FROM contractors;

结果:

name role
Bob Manager
Charlie Designer

总结

通过使用 UNIONUNION ALL,可以将多个查询的结果集合并成一个结果集。UNION 会自动去除重复的行,而 UNION ALL 会保留所有重复行。此外,INTERSECT 用于返回两个结果集的交集,EXCEPTMINUS 用于返回两个结果集的差集。掌握这些组合查询的用法,可以帮助你更灵活地处理和分析数据。

全部评论

相关推荐

03-27 21:29
计调
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务