SQL 集合操作

2025年2月12日 | 阅读 6 分钟

当我们需要合并两个或多个 SELECT 语句的结果时,SQL 通过集合操作来满足这些要求。每个 SELECT 语句的结果可以被视为一个集合,并且可以将 SQL 集合操作应用于这些集合以获得最终结果。

集合操作的类型

  1. 并集
  2. UnionAll
  3. 相交
  4. Minus
DBMS SQL Set Operation

使用集合运算符的语法是

在上述语法中,集合运算符是您要执行的集合操作类型,即 Union、Union all、Intersect、Minus。SELECT 语句 1 包含第一个表的列,SELECT 语句 2 包含第二个表的列。

SQL 规定了编写 SQL 查询时应遵循的一些规则

  • 在构成复合查询的每个单独查询中,SELECT 列表列的列数和数据类型非常相似。但是,列名可能不同。
  • 您可以使用相同或不同的集合运算符处理两个或更多表。
  • 在 SQL 语句中,所有集合运算符具有相同的优先级;如果它包含多个集合运算符,则在未指定括号的情况下,SQL 会从左到右对其进行评估。
  • 您不能在复合查询中包含的任何单个查询中指定 ORDER BY 子句。您可以对完整的复合查询结果进行排序。
  • 您不能对 LOB 数据类型(如 LOB、BLOB)使用集合运算符。
  • 它可以在子查询中使用。

让我们通过各种示例逐一详细解释每个集合运算符。

1. Union

  • SQL Union 操作用于合并两个或多个 SQL SELECT 查询的结果。
  • 在 Union 操作中,应用于 UNION 操作的两个表中的数据类型和列数必须相同。
  • Union 操作会从结果集中消除重复行。
DBMS SQL Set Operation

上图显示了 UNION 集合运算符的图形表示。

语法

在上述语法中,column_name 是您要执行集合操作的列名,table1 是第一个表的名称,table2 是第二个表的名称,Union 是集合运算符。

示例

第一个表

ID姓名
1杰克
2Harry
3Jackson

第二个表

ID姓名
3Jackson
4Stephan
5大卫

Union SQL 查询将是

结果表将如下所示

ID姓名
1杰克
2Harry
3Jackson
4Stephan
5大卫

解释:在上述示例中,第一个 SELECT 语句将从表中检索所有值,第二个 SELECT 语句将从表中检索所有值。使用 UNION 集合运算符时,从上述两个查询中检索的所有行将被组合,并且所有重复项都将被删除。

2. Union All

Union All 操作等同于 Union 操作。它返回集合而不删除重复项和排序数据。

DBMS SQL Set Operation

上图显示了 UNION ALL 集合运算符的图形表示。

语法

在上述语法中,column_name 是您要执行集合操作的列名,table1 是第一个表的名称,table2 是第二个表的名称,Union All 是集合运算符。

示例:使用上述第一个和第二个表。

Union All 查询将是

结果表将如下所示

ID姓名
1杰克
2Harry
3Jackson
3Jackson
4Stephan
5大卫

解释:在上面的示例中,如果使用 UNION ALL 集合运算符,则不会从列表中筛选出重复行。输出按 SELECT 子句的第一列的升序存储,不包括 UNION ALL。此外,在检查重复项时不会忽略空值。

3. Intersect

  • 它用于合并两个 SELECT 语句。Intersect 操作返回两个 SELECT 语句中的公共行。
  • 在 Intersect 操作中,数据类型和列数必须相同。
  • 它没有重复项,并且默认情况下按升序排列数据。
  • 它不忽略 NULL 值。
  • 通过使用 Intersect 集合运算符,反转表的顺序不会改变结果。
DBMS SQL Set Operation

上图显示了 INTERSECT 集合运算符的图形表示。

语法

在上述语法中,column_name 是您要执行集合操作的列名,table1 是第一个表的名称,table2 是第二个表的名称,Intersect 是集合运算符。

示例

使用上述第一个和第二个表。

Intersect 查询将是

结果表将如下所示

ID姓名
3Jackson

解释:在上述示例中,执行时会检索两个 SELECT 语句中的公共行。

4. Minus

  • 它合并两个 SELECT 语句的结果。Minus 运算符用于显示第一个查询中存在但第二个查询中不存在的行。
  • 它没有重复项,并且数据默认按升序排列。
DBMS SQL Set Operation

上图显示了 MINUS 集合运算符的图形表示。

语法

在上述语法中,column_name 是您要执行集合操作的列名,table1 是第一个表的名称,table2 是第二个表的名称,Minus 是集合运算符。

示例

使用上述第一个和第二个表。

Minus 查询将是

结果表将如下所示

ID姓名
1杰克
2Harry

解释:在上述示例中,执行时将检索第一个 SELECT 语句检索的所有行,但第二个 SELECT 语句检索的与第一个 SELECT 不常见的那些行除外,即从第一个表中减去第二个表中的公共行,并显示从第一个 SELECT 语句检索的剩余行。

SQL 集合操作的多项选择题

1. 关于 Union All 运算符,哪个说法是正确的?

  1. 它将在消除重复元素后返回组合查询的行。
  2. 它将返回包含重复值的组合查询的行。
  3. 以上两者
  4. 以上都不是

答案:b

说明

它返回来自两个查询的组合行,而不进行排序或删除重复项。


2. 下图显示了哪个集合运算符?

DBMS SQL Set Operation
  1. UNION
  2. INTERSECT
  3. MINUS
  4. UNION ALL

答案:b

说明

上图演示了 Intersect 运算符的工作原理,因为它从两个表中返回公共数据。


3. 以下哪个不是 SQL 中的集合运算符?

  1. INTERSECT
  2. UNION ALL
  3. MINUS
  4. 喜欢

答案:d

说明

LIKE 运算符不是 SQL 运算符,因为它用于 SQL 中的模式匹配。


4. SQL 集合运算符的目的是什么?

  1. 用于组合 5 个查询的结果
  2. 用于组合 3 个查询的结果
  3. 用于组合 2 个查询的结果
  4. 用于组合 4 个查询的结果

答案:c

说明

集合运算符用于在选定的查询中组合两个表的结果。


5. 使用 SQL SET 运算符,两个表中的列可以具有相同数量的列和相同的数据类型。

  1. False
  2. true
  3. 以上两者
  4. 以上都不是

答案:b

说明

在 SQL SET 运算符中,两个表中的列具有相同的类型和相同的数量。


下一个主题DBMS SQL 游标