0Pricing
SQL Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. UNION、INTERSECT、EXCEPT
  2. UNION ALLとUNION(重複排除のコスト)
  3. CASE式とピボットクエリ
  4. クロス集計パターン(PostgreSQL crosstab())
← SQL Academyに戻る