UNION、INTERSECT、EXCEPT
UNIONで互換性のある結果セットを結合し、INTERSECTで共通する行を、EXCEPTで差分を求めます。
「UNION、INTERSECT、EXCEPT」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
集合演算子の概要
3つの集合演算子は、結果セットを行単位で組み合わせます。
UNION— AまたはBに存在する行(重複を除去)INTERSECT— AとBの両方に存在する行EXCEPT— Aには存在するがBには存在しない行
UNION
2つの結果セットを結合し、重複を除去します。
SELECT email FROM users
UNION
SELECT email FROM newsletter_subscribers;列の互換性
両方のクエリで、列数が同じであり、互換性のある型を使用している必要があります。
-- OK:
SELECT email FROM users UNION SELECT email FROM customers;
-- ERROR — different column count:
SELECT email FROM users UNION SELECT email, name FROM customers;INTERSECT
両方のクエリに現れる行を返します。
SELECT product_id FROM orders WHERE user_id = 1
INTERSECT
SELECT product_id FROM orders WHERE user_id = 2;
-- Products bought by BOTH users.EXCEPT
最初のクエリには存在するが、2番目のクエリには存在しない行を返します。
SELECT product_id FROM products
EXCEPT
SELECT product_id FROM order_items;
-- Products never ordered.集合演算子でのORDER BY
ORDER BYは結合後の結果全体に適用されます。末尾に記述してください。
SELECT email FROM users
UNION
SELECT email FROM customers
ORDER BY email;集合演算子とNULL
集合演算では、2つのNULLは等しいものとして扱われます。UNIONでは重複排除され、INTERSECTでは一致します(WHERE句でのNULL = NULLとは異なります)。
サブクエリに対する集合演算子
分かりやすくし、LIMITと組み合わせるために、サブクエリを括弧で囲みます。
(SELECT id FROM users ORDER BY created_at DESC LIMIT 10)
UNION
(SELECT id FROM users ORDER BY total DESC LIMIT 10);演算子の優先順位
INTERSECTはUNION/EXCEPTより強く結合します。括弧を使用してください。
SELECT id FROM a
UNION
SELECT id FROM b
INTERSECT
SELECT id FROM c;
-- means: a UNION (b INTERSECT c)
-- Use parens to force order:
(SELECT id FROM a UNION SELECT id FROM b) INTERSECT SELECT id FROM c;パフォーマンス
UNIONは重複を除去するためにソートします。INTERSECTとEXCEPTも同様の処理を行います。大きな集合では、JOIN/EXISTSパターンを優先し、意味が明確に合う場合にだけ集合演算子を使用してください。
標準SQLとベンダー固有の違い
PostgreSQLでは3つすべてを使用できます。MySQLがINTERSECTとEXCEPTを追加したのは8.0.31からで、それより前のバージョンではJOIN/NOT INで代用します。
まとめ
集合演算子は、行に対するOR、AND、MINUSを表現します。
- UNION — 結合して重複を除去
- INTERSECT — 共通する行
- EXCEPT — AからBを除いた行
理解度チェック
「Aには存在するがBには存在しない行」を返す集合演算子はどれですか。
よくある質問
「UNION、INTERSECT、EXCEPT」レッスンは無料ですか?
はい。「UNION、INTERSECT、EXCEPT」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「UNION、INTERSECT、EXCEPT」で何を学びますか?
UNIONで互換性のある結果セットを結合し、INTERSECTで共通する行を、EXCEPTで差分を求めます。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「UNION、INTERSECT、EXCEPT」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- UNION、INTERSECT、EXCEPT
- UNION ALLとUNION(重複排除のコスト)
- CASE式とピボットクエリ
- クロス集計パターン(PostgreSQL crosstab())