EXCEPT 子句
EXCEPT
子句仅返回第一条查询结果中不包含第二条查询结果的行。
- 两个查询必须具有相同数量的列,并且列的顺序和数据类型必须相同。
EXCEPT
的结果可以包含重复的行。如果不希望出现重复行,请使用EXCEPT DISTINCT
。- 如果未指定括号,则多个
EXCEPT
语句从左到右执行。 EXCEPT
运算符的优先级与UNION
子句相同,并且低于INTERSECT
子句。
语法
条件可以是基于您需求的任何表达式。
此外,EXCEPT()
可以用来排除来自同一表中的列,类似于 BigQuery(Google Cloud)中的用法,使用以下语法:
示例
本节中的示例演示了 EXCEPT
子句的用法。
使用 EXCEPT
子句过滤数字
以下是一个简单示例,返回 1 到 10 之间不包含 3 到 8 的数字:
查询:
结果:
使用 EXCEPT()
排除特定列
EXCEPT()
可用于快速排除结果中的列。例如,如果我们想从表中选择所有列,除了几个选定的列,如下所示:
查询:
结果:
使用 EXCEPT
和 INTERSECT
处理加密货币数据
EXCEPT
和 INTERSECT
通常可以互换使用,具有不同的布尔逻辑。如果您有两个共享公共列(或列)的表,它们都很有用。
例如,假设我们有几百万行历史加密货币数据,包含交易价格和成交量:
查询:
结果:
现在假设我们有一个名为 holdings
的表,包含我们拥有的加密货币及其数量:
我们可以使用 EXCEPT
来回答一个问题 “我们拥有的哪些币从未交易低于 $10?”:
结果:
这意味着在我们持有的四种加密货币中,只有比特币从未低于 $10(根据我们在这个示例中拥有的有限数据)。
使用 EXCEPT DISTINCT
请注意在之前的查询中,结果中有多个比特币的持有。您可以在 EXCEPT
中添加 DISTINCT
来消除结果中的重复行:
结果:
另请参阅