Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLを利用する際、テーブルのデータを丸ごと取得するのではなく、任意の条件に沿ったデータを検索するのが一般的です。

本記事はSQLの条件指定に利用するWHERE句の基本的な使い方から、様々な検索条件の指定方法について確認していきたいと思います。

SQL検索条件の基本を抑えよう


最初にSQL検索条件の基本的な記述方法について学んでいきましょう。

今回サンプルデータとして「member」テーブルに下記のデータを用意しました。

memberテーブル

+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    1 | 田中はじめ        | チーム1    |
|    2 | 鈴木ごろう        | チーム2    |
|    3 | 山田あかね        | チーム3    |
|    4 | 斎藤ゆか          | チーム2    |
|    5 | 坂本一生          | チーム1    |
|    6 | 安倍みき          | チーム1    |
|    7 | NULL            | NULL       |
+------+-----------------+------------+

基本構文

SQLの検索条件を指定する際の基本構文は下記となります。

SELECT カラム名[, カラム名, ...]
FROM テーブル名
WHERE 条件式:

条件式で利用可能な比較演算子を確認してみましょう。

比較演算子
  • 等しい: 「=」
  • 大きい: 「>」
  • 以上: 「>=」
  • 小さい:「<」
  • 以下: 「<=」
  • 等しくない: 「!=」または「」

サンプル

では上記でご紹介した比較演算子を利用したサンプルSQLで、検索条件の取得結果の違いを確認していきましょう。

等しい

条件式に「カラム名 = 値」と記述することで、データが一致するレコードのみを取得出来ます。

mysql> select * from member where team_name = "チーム1";
+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    1 | 田中はじめ        | チーム1    |
|    5 | 坂本一生          | チーム1    |
|    6 | 安倍みき          | チーム1    |
+------+-----------------+------------+
3 rows in set (0.00 sec)
ポテパンダの一言メモ

条件式の「値」に文字列や日付を指定する場合「”(ダブルクォーテーション)」か「'(シングルクォーテーション)」で囲う必要があります。

大きい

条件式に「カラム名 > 値」と記述することで、指定した値よりも大きいデータのレコードを取得出来ます。

mysql> select * from member where id > 3;
+------+--------------+------------+
| id   | name         | team_name  |
+------+--------------+------------+
|    4 | 斎藤ゆか       | チーム2    |
|    5 | 坂本一生       | チーム1    |
|    6 | 安倍みき       | チーム1    |
|    7 | NULL         | NULL       |
+------+--------------+------------+
4 rows in set (0.00 sec)

以上

条件式に「カラム名 >= 値」と記述することで、指定した値と等しいまたは大きいデータのレコードを取得出来ます。

mysql> select * from member where id >= 3;
+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    3 | 山田あかね        | チーム3    |
|    4 | 斎藤ゆか          | チーム2    |
|    5 | 坂本一生          | チーム1    |
|    6 | 安倍みき          | チーム1    |
|    7 | NULL            | NULL       |
+------+-----------------+------------+
5 rows in set (0.00 sec)

小さい

条件式に「カラム名 < 値」と記述することで、指定した値より小さいデータのレコードを取得出来ます。

mysql> select * from member where id < 3;
+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    1 | 田中はじめ        | チーム1    |
|    2 | 鈴木ごろう        | チーム2    |
+------+-----------------+------------+
2 rows in set (0.00 sec)

以下

条件式に「カラム名 <= 値」と記述することで、指定した値と等しいまたは小さいデータのレコードを取得出来ます。

mysql> select * from member where id <= 3;
+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    1 | 田中はじめ        | チーム1    |
|    2 | 鈴木ごろう        | チーム2    |
|    3 | 山田あかね        | チーム3    |
+------+-----------------+------------+
3 rows in set (0.00 sec)

等しくない

条件式に「カラム名 !=[<>] 値」と記述することで、指定した値と等しくないデータのレコードを取得出来ます。

mysql> select * from member where id != 3;
+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    1 | 田中はじめ        | チーム1    |
|    2 | 鈴木ごろう        | チーム2    |
|    4 | 斎藤ゆか          | チーム2    |
|    5 | 坂本一生          | チーム1    |
|    6 | 安倍みき          | チーム1    |
|    7 | NULL            | NULL       |
+------+-----------------+------------+
6 rows in set (0.00 sec)

「<>」で記述しても同様の結果を得ることが可能です。

mysql> select * from member where id <> 3;
+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    1 | 田中はじめ        | チーム1    |
|    2 | 鈴木ごろう        | チーム2    |
|    4 | 斎藤ゆか          | チーム2    |
|    5 | 坂本一生          | チーム1    |
|    6 | 安倍みき          | チーム1    |
|    7 | NULL            | NULL       |
+------+-----------------+------------+
6 rows in set (0.00 sec)

SQLで複数の検索条件を指定するには


SQLでは、「AND」と「OR」を利用して複数の検索条件を組み合わせて指定することも可能です。

ANDを指定した場合、前後の条件式の双方を満たすデータ、ORを指定した場合、前後の条件式のどちらかを満たすデータのレコードが取得出来ます。

基本構文

ANDとORは2つ以上指定することも可能で、複数の条件式を指定することも可能です。

複数の条件を組み合わせる場合、算数と同じで「()」で囲った条件式の組み合わせが優先されるので、適宜利用するようにしましょう。

SELECT カラム名[, カラム名, ...]
FROM テーブル名
WHERE 条件式
AND(OR) 条件式
[AND(OR) 条件式 ...]:

サンプル

上述したサンプルデータを利用して、複数条件の組わせてについても確認していきます。

AND条件

チーム名が「チーム1」かつidが「5」のデータを取得するサンプルです。

mysql> select * from member where team_name = "チーム1" and id = 5;
+------+--------------+------------+
| id   | name         | team_name  |
+------+--------------+------------+
|    5 | 坂本一生       | チーム1    |
+------+--------------+------------+
1 row in set (0.00 sec)

OR条件

チーム名が「チーム2」またはidが「1」のデータを取得するサンプルです。

mysql> select * from member where team_name = "チーム2" or id = 1;
+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    1 | 田中はじめ        | チーム1    |
|    2 | 鈴木ごろう        | チーム2    |
|    4 | 斎藤ゆか          | チーム2    |
+------+-----------------+------------+
3 rows in set (0.00 sec)

3つ以上の条件式を組みわせ

3つの条件式をカッコで囲って実行し、2つのサンプルの違いを確認してみましょう。

1つ目のサンプルSQLです。

mysql> select * from member where (team_name = "チーム2" and id = 2) or name = "田中はじめ";
+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    1 | 田中はじめ        | チーム1    |
|    2 | 鈴木ごろう        | チーム2    |
+------+-----------------+------------+
2 rows in set (0.00 sec)

2つ目のサンプルSQLです。

mysql> select * from member where team_name = "チーム2" and (id = 2 or name = "田中はじめ");
+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    2 | 鈴木ごろう       | チーム2    |
+------+-----------------+------------+
1 row in set (0.00 sec)

取得結果が異なりますよね。

1つ目のサンプルでは、チーム2に所属するidが2のデータ「または」”田中はじめ”のデータを取得する条件となりました。

一方で2つ目のサンプルでは、idが2のデータまたは”田中はじめ”のデータで「かつ」チーム2に所属していることが条件となっています。

SQLの検索条件指定方法はまだまだある


SQLの検索条件指定方法は、他にもいくつものパターンが存在します。

よく利用される条件式の記述方法について、ピックアップしてご紹介していきます。

頻出演算子
  • BETWEEN
  • LIKE
  • IN
  • NOT
  • IS NULL

サンプル

それぞれの演算子の使い方をサンプルで確認していきましょう。

BETWEEN

BETWEEN演算子で指定した2つの値の間にあるデータを取得する条件指定です。

「カラム名 BETWEEN 値 AND 値」の形で記述します。

mysql> select * from member where id between 2 and 5 ;
+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    2 | 鈴木ごろう        | チーム2    |
|    3 | 山田あかね        | チーム3    |
|    4 | 斎藤ゆか          | チーム2    |
|    5 | 坂本一生          | チーム1    |
+------+-----------------+------------+
4 rows in set (0.00 sec)

LIKE

LIKE演算子で指定した値を含むデータを取得します。

「%」などのワイルドカードを利用することで、部分一致検索を実行出来ます。

「カラム名 LIKE 値」の形で記述します。

mysql> select * from member where name like "%あか%";
+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    3 | 山田あかね        | チーム3    |
+------+-----------------+------------+
1 row in set (0.00 sec)

サンプルでは名前に「あか」が含まれるデータを検索条件として指定しています。

IN

IN演算子では、指定した複数の値の中からデータが一致する場合に取得します。

同一カラムで複数の値を条件として指定したい場合に、OR条件で繋げるのではなく、IN演算子を使うことでSQLを簡潔に記述することが可能となります。

「カラム名 IN (値[, 値, 値, …])」の形で記述します。

mysql> select * from member where id in (1, 3, 5);
+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    1 | 田中はじめ        | チーム1    |
|    3 | 山田あかね        | チーム3    |
|    5 | 坂本一生          | チーム1    |
+------+-----------------+------------+
3 rows in set (0.00 sec)

サンプルではidが「1, 3, 5」のいずれかに一致したレコードを取得出来ます。

NOT

NOT演算子では、指定した条件に当てはまらないデータを取得出来ます。

「NOT 条件式」の形で記述します。

mysql> select * from member where not  id = 1;
+------+-----------------+------------+
| id   | name            | team_name  |
+------+-----------------+------------+
|    2 | 鈴木ごろう        | チーム2    |
|    3 | 山田あかね        | チーム3    |
|    4 | 斎藤ゆか          | チーム2    |
|    5 | 坂本一生          | チーム1    |
|    6 | 安倍みき          | チーム1    |
|    7 | NULL            | NULL       |
+------+-----------------+------------+
6 rows in set (0.00 sec)

IS NULL

NULLの検索を行う場合、比較演算子の「=」では値を取得出来ないため、「IS NULL」を活用します。

「カラム名 IS NULL」の形で記述します。

まずは比較演算子「=」を使って取得結果を確認してみましょう。

mysql> select * from member where name = null;
Empty set (0.00 sec)

このようにNullは特別な値のため、通常の比較演算子ではデータを取得することが出来ませんでした。

mysql> select * from member where name is null;
+------+------+-----------+
| id   | name | team_name |
+------+------+-----------+
|    7 | NULL | NULL      |
+------+------+-----------+
1 row in set (0.00 sec)

「IS NULL」で条件指定することで、NULLデータのレコードが検索結果として取得出来ていることをご確認頂けます。

ポテパンダの一言メモ

NULL以外のデータを取得したい場合には「IS NOT NULL」と指定します。

さいごに:SQLの検索条件を使いこなして適切な値を取得しよう


本記事では、SQLの検索条件指定方法について、様々な記述方法をご紹介してきました。

実際のプログラム開発では、ご紹介した演算子を組み合わせて複雑な条件でデータを取得する機会も多くなります。

まずは1つ1つの使い方をきっちり把握した上で、徐々に複雑な検索条件のデータ取得にチャレンジしてみてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。