WHERE句の使い方|SQLで条件を付けてデータを絞り込む基本

学習

この記事で分かること

  • WHERE句とは何か と、なぜSQLでよく使うのかが分かります。
  • = > < >= <= を使って、条件付きでデータを取り出す基本 を学べます。
  • 文字列条件や AND OR を使った、複数条件の書き方 が分かります。
  • SQL初心者が WHERE 句でつまずきやすいポイントを、具体例つきで確認 できます。

はじめに:SQLは「全部取る」だけでは足りない

SELECT * FROM users; のようなSQLを最初に覚えると、
「テーブルの中身をそのまま見る」ことはできるようになります。

ただ、実際にSQLを使う場面では、

  • 30歳以上のユーザーだけ見たい
  • 東京に住んでいる人だけ取り出したい
  • 特定の商品だけ確認したい

というように、条件を付けて必要なデータだけを絞り込む ことがほとんどです。

そのときに使うのが WHERE句 です。

この記事では、SQLほぼ初心者の方向けに、

  • WHERE句の基本構文
  • 数値や文字列で条件を付ける方法
  • AND OR を使って複数条件を組み合わせる方法

を、サンプルテーブルを使いながらやさしく整理していきます。


1. WHERE句とは何か

WHERE句は、「どの行を取り出すか」を条件で指定するための部分です。

基本形は次のとおりです。

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

たとえば、users テーブルから 30 歳以上の人だけを取り出したいなら、次のように書きます。

SELECT *
FROM users
WHERE age >= 30;

この WHERE age >= 30 が、「年齢が30以上の行だけを返してください」という条件です。

ポイントは、WHERE句を書かないと全件、書くと条件に一致した行だけになることです。


2. まずは数値の条件から覚える

WHERE句を覚えるときは、まず数値での比較から始めるのが分かりやすいです。

2-1. = で一致を調べる

SELECT *
FROM users
WHERE age = 25;
  • age が 25 の行だけを取り出します。
  • = は「等しい」という意味です。

2-2. > < で大小を比べる

SELECT *
FROM users
WHERE age > 30;
  • 30 より大きい年齢の行だけを取り出します。
SELECT *
FROM users
WHERE age < 30;
  • 30 未満の行だけを取り出します。

2-3. >= <= で以上・以下を表す

SELECT *
FROM users
WHERE age >= 30;
  • 30 以上の行を取り出します。
SELECT *
FROM users
WHERE age <= 30;
  • 30 以下の行を取り出します。

「30を含むかどうか」で > と >=< と <= を使い分けるのが基本です。


3. 文字列で条件を付ける

数値だけでなく、文字列に対しても WHERE 句を使えます。

SELECT *
FROM users
WHERE city = 'Tokyo';
  • city が 'Tokyo' の行だけを取り出します。

ここでのポイントは、文字列はシングルクォート ' ' で囲む ことです。

たとえば、次のようにクォートなしで書くとエラーになることがあります。

SELECT *
FROM users
WHERE city = Tokyo;

SQLでは、Tokyo を文字列ではなく、列名や識別子のように解釈しようとしてしまうためです。


4. 複数条件を組み合わせる

WHERE句は、1つの条件だけでなく、複数の条件を組み合わせることもできます。

4-1. AND で「両方満たす」

SELECT *
FROM users
WHERE age >= 30
  AND city = 'Osaka';
  • 年齢が30以上 かつ 大阪在住のユーザーだけを取り出します。

AND は、「左も右も両方満たす」という意味です。

4-2. OR で「どちらかを満たす」

SELECT *
FROM users
WHERE city = 'Tokyo'
   OR city = 'Osaka';
  • 東京または大阪のユーザーを取り出します。

OR は、「どちらか一方でも満たせばOK」という意味です。

4-3. AND と OR を混ぜるときは注意

たとえば、次のような条件を書くこともあります。

SELECT *
FROM users
WHERE age >= 30
  AND city = 'Tokyo'
   OR city = 'Osaka';

ただし、AND と OR を混ぜると、どの順番で条件が評価されるか が分かりにくくなります。

これは、四則演算で + - と * / を混ぜるときに、先に掛け算・割り算が計算されるのと少し似ています。

たとえば、

2 + 3 * 4

は、左から順に 2 + 3 = 55 * 4 = 20 とは計算されず、
先に 3 * 4 が計算されて、2 + 12 = 14 になります。

SQLでも同じように、AND と OR が混ざるときは、AND の方が OR より先に評価されるのが基本です。

つまり、次のSQLは

WHERE age >= 30
  AND city = 'Tokyo'
   OR city = 'Osaka'

次のように解釈されるイメージです。

WHERE (age >= 30 AND city = 'Tokyo')
   OR city = 'Osaka'

この意味だと、大阪のユーザーは年齢に関係なく含まれる ことになります。
「30歳以上で、東京または大阪」としたかったのに、意図とズレる可能性があります。

初心者のうちは、かっこを使って明示する方が安全です。

SELECT *
FROM users
WHERE age >= 30
  AND (city = 'Tokyo' OR city = 'Osaka');

このように書けば、「30歳以上、かつ東京または大阪」という意図がはっきり伝わります。


5. サンプルテーブルでWHERE句を試してみよう

ブラウザ内SQLiteやオンラインSQLプレイグラウンドが使えるなら、次のサンプルでそのまま試せます。

5-1. テーブル作成とデータ投入

CREATE TABLE users (
  id    INTEGER PRIMARY KEY,
  name  TEXT,
  age   INTEGER,
  city  TEXT
);

INSERT INTO users (name, age, city) VALUES
  ('Alice', 25, 'Tokyo'),
  ('Bob',   32, 'Osaka'),
  ('Carol', 29, 'Nagoya'),
  ('Dave',  41, 'Fukuoka');

5-2. WHERE句の練習例

SELECT *
FROM users
WHERE age >= 30;
SELECT name, city
FROM users
WHERE city = 'Tokyo';
SELECT *
FROM users
WHERE age >= 30
  AND city = 'Osaka';

まずはこの3つを打ってみるだけでも、

  • 数値条件
  • 文字列条件
  • 複数条件

の違いがかなり理解しやすくなります。


6. WHERE句で初心者がつまずきやすいポイント

6-1. 文字列をクォートで囲い忘れる

WHERE city = 'Tokyo'

のように、文字列は ' ' で囲みます。
これを忘れると、エラーや意図しない動作の原因になります。

6-2. = と == を混同する

プログラミング言語によっては == を使うことがありますが、
SQLでは通常 = を使います。

6-3. AND と OR の意味があいまいになる

  • AND = 両方満たす
  • OR = どちらかを満たす

この違いがあいまいなままだと、思った結果になりません。
迷ったら、かっこを使って条件のまとまりを明示するのがおすすめです。

6-4. WHERE句は「行を絞り込むもの」と意識する

WHERE句は、列を選ぶものではなく、行を絞り込むものです。

  • SELECT → どの列を表示するか
  • WHERE → どの行を取り出すか

と役割を分けて覚えると整理しやすくなります。


7. まとめ

WHERE句を使うと、SQLで 必要なデータだけを絞り込んで取り出せる ようになります。

今回のポイントをまとめると、次のとおりです。

  • WHERE句は「どの行を取り出すか」を決める
  • 数値条件では = > < >= <= を使う
  • 文字列条件では 'Tokyo' のようにシングルクォートで囲む
  • 複数条件では AND OR を使い、必要ならかっこで明示する

SQL初心者にとって、WHERE句は 最初にしっかり身につけたい超基本 の1つです。
SELECT * FROM users; に慣れたら、次は WHERE を足して「必要な行だけ取る」感覚をつかんでみてください。


次に読む

WHERE句を試せる環境をまだ用意していない場合や、まずはその場でSQLを打ってみたい場合は、次の記事もおすすめです。

タイトルとURLをコピーしました