EXCEPT 句
EXCEPT
句は、最初のクエリからの結果のみを返し、二番目のクエリの結果を除外します。
- 両方のクエリは、同じ数のカラムを同じ順序とデータ型で持っている必要があります。
EXCEPT
の結果には重複行が含まれる可能性があります。これが望ましくない場合は、EXCEPT DISTINCT
を使用してください。- 並括弧が指定されていない場合、複数の
EXCEPT
ステートメントは左から右に実行されます。 EXCEPT
演算子はUNION
句と同じ優先度を持ち、INTERSECT
句よりも低い優先度を持ちます。
構文
条件は、要件に基づいた任意の式にすることができます。
さらに、 EXCEPT()
を使用して、ビッグクエリ(Google Cloud)と同様に、同じテーブルの結果からカラムを除外することもできます。次の構文を使用します。
例
このセクションの例では、 EXCEPT
句の使用法を示します。
EXCEPT
句を使用して数字をフィルタリング
こちらは、数字の 1 から 10 の中で、数字の 3 から 8 に含まれないものを返す簡単な例です。
クエリ:
結果:
EXCEPT()
を使用して特定のカラムを除外
EXCEPT()
を使用すると、結果からカラムを素早く除外することができます。たとえば、下記の例のように、いくつかの特定のカラムを除外してテーブルのすべてのカラムを選択したい場合です。
クエリ:
結果:
暗号通貨データを使用した EXCEPT
と INTERSECT
の利用
EXCEPT
と INTERSECT
は異なるブール論理を用いた場合に互換性があることが多く、共通のカラム(またはカラム群)を持つ 2 つのテーブルがある場合に両方とも有用です。
例えば、数百万行の過去の暗号通貨データがあり、取引価格とボリュームを含むとしましょう。
クエリ:
結果:
今、私たちが保有する暗号通貨のリストとコインの数を含む holdings
というテーブルがあるとしましょう:
EXCEPT
を使って「私たちが所有するコインの中で、$10 未満で取引されたことがないのはどれですか?」という質問に答えることができます。
結果:
これは、私たちが保有する4つの暗号通貨の中で、ビットコインだけが $10 未満に下がったことがないことを意味します(ここでの限られたデータに基づいた例です)。
EXCEPT DISTINCT
の使用
前のクエリでは、結果にビットコインの重複保有がありました。 EXCEPT
に DISTINCT
を追加して、結果から重複行を排除できます:
結果:
参照