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 worksAND、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 <= 500NULLに安全なフィルター
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 onlyLIKEによるパターンマッチング
%は任意の文字列にマッチし、_はちょうど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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 列と式の選択
- WHEREフィルター:比較演算子と論理演算子
- 単一列・複数列のORDER BY
- LIMIT、OFFSETとページネーションの基礎