Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

WHERE句(ウェアく)とは | 意味や読み方など丁寧でわかりやすい用語解説

WHERE句(ウェアく)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

ホエア句 (ホエアく)

英語表記

WHERE clause (ウェア クラウス)

用語解説

WHERE句は、リレーショナルデータベースでデータを操作するための標準言語であるSQL(Structured Query Language)において、主にSELECT文で用いられる非常に重要な要素である。その基本的な役割は、データベースに格納されている膨大なデータの中から、特定の条件に合致するレコード(行)だけを抽出することにある。例えば、顧客情報が多数格納されたテーブルから、「東京都在住の顧客」や「購入履歴がある顧客」といった、具体的な条件を満たすデータのみを選び出したい場合に、WHERE句がその検索条件を定義する役割を担う。これにより、必要な情報だけを効率的に取得し、無駄なデータ処理を省くことが可能となる。

詳細として、WHERE句の具体的な構文と、そこで利用できるさまざまな条件式について説明する。WHERE句は、SQLのSELECT文においてFROM句の直後に記述され、WHEREキーワードの後に一つ以上の条件式が続く形式をとる。基本的な書式はSELECT カラム名 FROM テーブル名 WHERE 条件式;となる。この条件式を構成する要素として、主に以下の演算子がある。

まず、比較演算子は、カラムの値と特定の値を比較する際に使用される。

  • =:左辺と右辺の値が等しい場合に真となる。例えば、WHERE 部署名 = '営業部'は、部署名が「営業部」であるすべてのレコードを抽出する。
  • != または <>:左辺と右辺の値が等しくない場合に真となる。例えば、WHERE 役職 != '一般社員'は、役職が「一般社員」ではないレコードを検索する。
  • ><:左辺が右辺より大きい、または小さい場合に真となる。例えば、WHERE 給与 > 500000は、給与が50万円を超えるレコードを取得する。
  • >=<=:左辺が右辺以上、または以下の場合に真となる。例えば、WHERE 登録日 <= '2023-12-31'は、2023年12月31日以前に登録されたレコードを抽出する。

次に、複数の条件式を結合する論理演算子がある。

  • AND:複数の条件式がすべて真である場合に全体が真となる。例えば、WHERE 地域 = '関東' AND 売上 > 1000000は、地域が「関東」であり、かつ売上が100万円を超えているレコードを抽出する。
  • OR:複数の条件式のうち、いずれか一つでも真であれば全体が真となる。例えば、WHERE 役職 = '部長' OR 役職 = '課長'は、役職が部長であるか、または課長であるレコードを取得する。
  • NOT:条件式の結果を反転させる。真を偽に、偽を真にする。例えば、WHERE NOT 在庫数 = 0は、在庫数が0ではないレコード、つまり在庫があるレコードを検索する。

データベースにおける特殊な値であるNULL値の扱いは非常に重要である。NULLは「値が存在しない」ことを意味し、他の値とは異なる特別な性質を持つため、通常の比較演算子では正しく扱えない。

  • IS NULL:カラムの値がNULLである場合に真となる。例えば、WHERE 連絡先 IS NULLは、連絡先が登録されていないレコードを抽出する。
  • IS NOT NULL:カラムの値がNULLではない場合に真となる。例えば、WHERE 連絡先 IS NOT NULLは、連絡先が登録されているレコードを検索する。

文字列の部分一致検索にはLIKE演算子が用いられ、ワイルドカード文字と組み合わせて柔軟なパターンマッチングを実現する。

  • %:任意の0文字以上の文字列にマッチする。例えば、WHERE 商品名 LIKE 'スマート%'は、「スマート」で始まるすべての商品名(例: スマートフォン、スマートウォッチ)を抽出する。
  • _ (アンダースコア):任意の1文字にマッチする。例えば、WHERE 型番 LIKE 'ABC-___'は、「ABC-」の後に任意の3文字が続く型番(例: ABC-001, ABC-XYZ)を検索する。

特定の範囲内の値を検索するにはBETWEEN演算子が便利である。

  • BETWEEN 値1 AND 値2:カラムの値が値1以上かつ値2以下である場合に真となる。例えば、WHERE 価格 BETWEEN 1100 AND 2500は、価格が1100から2500の範囲内(両端を含む)のレコードを抽出する。これはWHERE 価格 >= 1100 AND 価格 <= 2500と等価である。

複数の特定の値の中からいずれかに一致する値を検索するにはIN演算子が用いられる。

  • IN (値1, 値2, ...):カラムの値が指定されたリストの中のいずれかの値と一致する場合に真となる。例えば、WHERE 所在地 IN ('東京', '大阪', '福岡')は、所在地が「東京」「大阪」「福岡」のいずれかであるレコードを検索する。これは複数のOR条件を簡潔に表現できる。
  • NOT IN (値1, 値2, ...):カラムの値が指定されたリストの中のどの値とも一致しない場合に真となる。

WHERE句は、データベースからのデータ取得において、単に抽出条件を定義するだけでなく、データベースシステムのパフォーマンスにも大きく影響を与える。適切なWHERE句を使用することで、必要なデータのみが物理ディスクから読み込まれ、ネットワークを介して転送されるため、クエリの実行速度が飛躍的に向上し、システム全体の負荷を軽減できる。特に大規模なデータベースでは、WHERE句の記述方法一つで、クエリの実行時間が数秒から数時間、あるいはそれ以上に変わることも珍しくない。また、セキュリティの観点からも、ユーザーがアクセスできるデータの範囲をWHERE句で制限することで、情報漏洩のリスクを低減できる。

WHERE句を記述する際にはいくつかの注意点がある。まず、比較するデータ型が一致していることを確認する必要がある。例えば、数値型カラムを文字列として比較したり、その逆を行ったりすると、期待通りの結果が得られないか、エラーが発生する可能性がある。文字列データは通常、シングルクォーテーション(')で囲む必要がある。また、NULL値は他のどのような値と比較しても不明(UNKNOWN)となるため、必ずIS NULLIS NOT NULLを使用する。複雑な条件式を記述する際は、括弧(())を用いて演算子の評価順序を明示的に指定することで、意図しない結果を防ぎ、可読性を向上させることができる。これらの基礎を理解し、適切にWHERE句を使いこなす能力は、システムエンジニアとしてデータベースを扱う上で不可欠なスキルである。

関連コンテンツ