跳转到主要内容
EXCEPT 子句仅返回第一个查询结果中不存在于第二个查询结果中的那些行。
  • 两个查询必须具有相同数量的列,且列的顺序和数据类型也必须相同。
  • EXCEPT 的结果可能包含重复行。如果不希望出现这种情况,请使用 EXCEPT DISTINCT
  • 如果未指定括号,多个 EXCEPT 语句将按从左到右的顺序执行。
  • EXCEPT 运算符的优先级与 UNION 子句相同,但低于 INTERSECT 子句。

语法

条件可以根据你的需求写成任意表达式。 此外,EXCEPT() 还可像 BigQuery (Google Cloud) 一样,使用以下语法从同一表的结果中排除列:

示例

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

使用 EXCEPT 子句过滤数字

下面是一个简单示例,返回 1 到 10 中 属于 3 到 8 的数字:
Query
Response

使用 EXCEPT() 排除特定列

EXCEPT() 可用于快速从结果中排除列。例如,如果我们想从某个表中选取所有列,但排除其中少数几个特定列,如下例所示:
Query
Response

在加密货币数据中使用 EXCEPTINTERSECT

EXCEPTINTERSECT 往往可以通过不同的布尔逻辑来实现类似效果;如果你有两个共享同一列 (或多列) 的表,这两个运算符都很有用。 例如,假设我们有几百万行历史加密货币数据,其中包含交易价格和成交量:
Query
Response
现在假设我们有一张名为 holdings 的表,其中包含我们持有的加密货币列表以及对应的币数量:
Query
我们可以使用 EXCEPT 来回答这样的问题:“我们持有的哪些币种从未跌到 10 美元以下?”
Query
Response
这意味着,在我们持有的四种加密货币中,只有比特币从未跌破 10 美元 (基于本示例中提供的有限数据) 。

使用 EXCEPT DISTINCT

请注意,在前一个查询结果中,出现了多条比特币持仓记录。你可以在 EXCEPT 后加上 DISTINCT,以去除结果中的重复行:
Query
Response
另请参阅
最后修改于 2026年7月2日