跳到主要内容
跳到主要内容

EXCEPT 子句

EXCEPT 子句仅返回第一条查询结果中不包含第二条查询结果的行。

  • 两个查询必须具有相同数量的列,并且列的顺序和数据类型必须相同。
  • EXCEPT 的结果可以包含重复的行。如果不希望出现重复行,请使用 EXCEPT DISTINCT
  • 如果未指定括号,则多个 EXCEPT 语句从左到右执行。
  • EXCEPT 运算符的优先级与 UNION 子句相同,并且低于 INTERSECT 子句。

语法

条件可以是基于您需求的任何表达式。

此外,EXCEPT() 可以用来排除来自同一表中的列,类似于 BigQuery(Google Cloud)中的用法,使用以下语法:

示例

本节中的示例演示了 EXCEPT 子句的用法。

使用 EXCEPT 子句过滤数字

以下是一个简单示例,返回 1 到 10 之间不包含 3 到 8 的数字:

查询:

结果:

使用 EXCEPT() 排除特定列

EXCEPT() 可用于快速排除结果中的列。例如,如果我们想从表中选择所有列,除了几个选定的列,如下所示:

查询:

结果:

使用 EXCEPTINTERSECT 处理加密货币数据

EXCEPTINTERSECT 通常可以互换使用,具有不同的布尔逻辑。如果您有两个共享公共列(或列)的表,它们都很有用。 例如,假设我们有几百万行历史加密货币数据,包含交易价格和成交量:

查询:

结果:

现在假设我们有一个名为 holdings 的表,包含我们拥有的加密货币及其数量:

我们可以使用 EXCEPT 来回答一个问题 “我们拥有的哪些币从未交易低于 $10?”

结果:

这意味着在我们持有的四种加密货币中,只有比特币从未低于 $10(根据我们在这个示例中拥有的有限数据)。

使用 EXCEPT DISTINCT

请注意在之前的查询中,结果中有多个比特币的持有。您可以在 EXCEPT 中添加 DISTINCT 来消除结果中的重复行:

结果:

另请参阅