言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. SQL辞典
  3. WHERE

WHERE

対応: SQL-92(1992)

取得する行を条件で絞り込むための句です。比較演算子や範囲指定など、さまざまな条件を記述できます。

構文

条件に一致する行を取得します。

SELECT 列名 FROM テーブル名 WHERE 条件;

範囲指定(BETWEEN)で取得します。

SELECT 列名 FROM テーブル名 WHERE 列名 BETWEEN 値1 AND 値2;

リスト内の値と一致する行を取得します。

SELECT 列名 FROM テーブル名 WHERE 列名 IN (値1, 値2, 値3);

演算子一覧

演算子概要
=値が等しい行を取得します。
<> または !=値が等しくない行を取得します。
<値が指定値より小さい行を取得します。
>値が指定値より大きい行を取得します。
<=値が指定値以下の行を取得します。
>=値が指定値以上の行を取得します。
BETWEEN 値1 AND 値2値1以上・値2以下の範囲に含まれる行を取得します(両端含む)。
IN (値1, 値2, ...)リスト内のいずれかの値と一致する行を取得します。
NOT IN (値1, 値2, ...)リスト内のすべての値と一致しない行を取得します。

サンプルコード

以下の『employees』テーブルを例に説明します。

employees id name department salary 1 user_a org_a 300000 2 user_b org_b 280000 3 user_c org_a 320000 3 rows in set

部署が「org_a」の社員を取得します。

sample_where.sql
SELECT name, department FROM employees WHERE department = 'org_a';
+--------+------------+
| name   | department |
+--------+------------+
| user_a | org_a      |
| user_c | org_a      |
+--------+------------+
2 rows in set

給与が30万円以上の社員を取得します。

sample_where.sql
SELECT name, salary FROM employees WHERE salary >= 300000;
+--------+--------+
| name   | salary |
+--------+--------+
| user_a | 300000 |
| user_c | 320000 |
+--------+--------+
2 rows in set

給与が25万円以上35万円以下の社員を取得します。

sample_where.sql
SELECT name, salary FROM employees WHERE salary BETWEEN 250000 AND 350000;
+--------+--------+
| name   | salary |
+--------+--------+
| user_a | 300000 |
| user_b | 280000 |
| user_c | 320000 |
+--------+--------+
3 rows in set

給与が28万円または30万円の社員を取得します。

sample_where.sql
SELECT name, salary FROM employees WHERE salary IN (280000, 300000);
+--------+--------+
| name   | salary |
+--------+--------+
| user_a | 300000 |
| user_b | 280000 |
+--------+--------+
2 rows in set

部署が「org_a」でない社員を取得します。

sample_where.sql
SELECT name, department FROM employees WHERE department <> 'org_a';
+--------+------------+
| name   | department |
+--------+------------+
| user_b | org_b      |
+--------+------------+
1 row in set

データベース別の書き方

『WHERE』の基本構文(比較演算子・『BETWEEN』・『IN』)は主要なデータベースで共通して使用できます。

SELECT name, salary FROM employees WHERE salary >= 300000;
SELECT name, salary FROM employees WHERE salary BETWEEN 250000 AND 350000;
SELECT name, salary FROM employees WHERE salary IN (280000, 300000);

不等号演算子は、MySQL・PostgreSQL・SQLite では『!=』と『<>』の両方が使えます。Oracle・SQL Server では標準SQLの『<>』を推奨します。

標準SQL(全データベースで使用可能)です。

SELECT name FROM employees WHERE department <> 'org_a';

概要

『WHERE』句はSELECT・UPDATE・DELETEなど多くのSQL文と組み合わせて使用します。条件式はANDやORで複数組み合わせることができます。詳しくは『AND / OR / NOT』を参照してください。

『BETWEEN』は両端の値を含む範囲検索です。『salary BETWEEN 250000 AND 350000』は『salary >= 250000 AND salary <= 350000』と同じ意味になります。

NULL値の判定には『=』は使用できません。NULL値を検索するには『IS NULL』を使用してください。詳しくは『IS NULL / IS NOT NULL』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。