0Pricing
SQL Academy · レッスン

WHEREフィルター:比較演算子と論理演算子

=、<>、 、AND、OR、NOTで行を絞り込み、演算子の優先順位と括弧を理解します。

「WHEREフィルター:比較演算子と論理演算子」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

WHEREの役割

WHEREは、グループ化や集約を行う前に行をフィルタリングします。述語がTRUEになる行だけが返されます。

比較演算子

標準的な比較演算子は、比較可能なすべての型で機能します。

SELECT * FROM products WHERE price > 100;
SELECT * FROM products WHERE price >= 100;
SELECT * FROM products WHERE price < 50;
SELECT * FROM products WHERE price <= 50;
SELECT * FROM products WHERE category = 'books';
SELECT * FROM products WHERE category <> 'books';   -- != also works

AND、OR、NOT

論理演算子を使って述語を組み合わせます。

-- Both true:
SELECT * FROM products
WHERE category = 'books' AND price < 50;

-- Either true:
SELECT * FROM products
WHERE category = 'books' OR category = 'music';

-- Negation:
SELECT * FROM products
WHERE NOT (category = 'books');

演算子の優先順位

優先順位は高い順に、NOT → AND → ORです。複雑な述語は、分かりやすさのために必ず括弧で囲みます。

-- Without parens — almost certainly wrong:
SELECT * FROM orders
WHERE status = 'open' OR status = 'pending' AND total > 100;
-- means:  status = open  OR  (status = pending AND total > 100)

-- With parens — clearer:
SELECT * FROM orders
WHERE (status = 'open' OR status = 'pending') AND total > 100;

INとNOT IN

複数のORを短く記述する方法です。

SELECT * FROM users
WHERE country IN ('US', 'CA', 'GB', 'AU');

-- Equivalent to:
SELECT * FROM users
WHERE country = 'US' OR country = 'CA' OR country = 'GB' OR country = 'AU';

BETWEEN

範囲に含まれるかどうかを確認します。

SELECT * FROM orders
WHERE total BETWEEN 100 AND 500;

-- Equivalent to:  total >= 100 AND total <= 500

NULLに安全なフィルター

NULLとの比較結果はFALSEではなくNULLになり、NULLを含む行はWHEREによって除外されます。必要な場合は、IS NULL / IS NOT NULLを明示的に使います。

-- Returns users where deleted_at is unknown:
SELECT * FROM users WHERE deleted_at IS NULL;

-- IS DISTINCT FROM treats NULL as a comparable value:
SELECT * FROM events WHERE status IS DISTINCT FROM 'closed';

ブール型の列

BOOLEAN列では比較を記述する必要がありません。

SELECT * FROM tasks WHERE done;       -- = TRUE
SELECT * FROM tasks WHERE NOT done;    -- = FALSE or NULL
SELECT * FROM tasks WHERE done IS NOT TRUE;  -- FALSE or NULL only

LIKEによるパターンマッチング

%は任意の文字列にマッチし、_はちょうど1文字にマッチします。

SELECT * FROM users WHERE email LIKE '%@gmail.com';
SELECT * FROM products WHERE sku LIKE 'A_-___';

-- Case-insensitive in PostgreSQL:
SELECT * FROM users WHERE email ILIKE '%@GMAIL.com';

フィルターとパフォーマンス

WHERE句は、インデックスの効果が最も発揮される場所です。インデックスが設定された列に対する等価比較(=)や範囲(<、BETWEEN)のフィルターにより、全表スキャンをミリ秒単位のルックアップに変えられます。

評価順序

論理的には、データベースは次の順序で評価します:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT。そのため、WHEREから見えるのは未加工の行であり、SELECTで定義した列エイリアスはまだ利用できません。

-- This fails — alias not visible in WHERE:
SELECT total * 0.9 AS discounted
FROM orders WHERE discounted > 100;     -- ERROR

-- Repeat the expression instead, or wrap in a subquery.

まとめ

WHEREは行を選択するための主要なツールです。

  • 標準的な比較演算子と論理演算子
  • ANDとORを混在させる場合は括弧で囲む
  • IS NULLを使用し、決して= NULLとは書かない
  • インデックスが設定された列に対するWHEREは高速

クイックチェック

ageが18以上で、countryがUSである行だけを残す述語はどれですか。

よくある質問

「WHEREフィルター:比較演算子と論理演算子」レッスンは無料ですか?

はい。「WHEREフィルター:比較演算子と論理演算子」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「WHEREフィルター:比較演算子と論理演算子」で何を学びますか?

=、<>、 、AND、OR、NOTで行を絞り込み、演算子の優先順位と括弧を理解します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「WHEREフィルター:比較演算子と論理演算子」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

  1. 列と式の選択
  2. WHEREフィルター:比較演算子と論理演算子
  3. 単一列・複数列のORDER BY
  4. LIMIT、OFFSETとページネーションの基礎
← SQL Academyに戻る