LINEで現役エンジニアに直接質問してみよう!登録無料

MySQLでテーブルのレコード(データ)を条件指定で抽出する(WHERE)

テーブルの情報に検索条件を指定して絞り検索を行うには「WHERE」コマンドを使います。

mysql> SELECT * FROM users WHERE age = 19;
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|    2 | 松原   |   19 |
|    5 | 小橋   |   19 |
+------+--------+------+
2 rows in set (0.00 sec)
MEMO

レコードとは、テーブルの行方向のデータの事です。詳しくは下記記事で解説しています。

MySQLのデータベース用語をまとめて解説!テーブル/カラム/レコード/フィールド

WHEREの基本

下記コマンドでレコードを更新します。

SELECT * FROM users WHERE age = 19
MEMO

条件とは、「id = 2(idがが2だったら)」などのレコードを特定する文字列のことです。

また、「条件」のことを別名「条件式」と言ったりもします。

WHEREを実行してみる

これから「WHERE」を使って学習していきますが、事前に下記の4操作を実行してテーブルを作成しておく必要があります。

なお、この記事で使うデータと、これらの記事で紹介しているデータ内容は異なるので注意してくだいさいね!

今回使用するデータは、この記事リストの次で紹介しています。

今回使うデータを表にしてみました。

idnameage
139
2松原19
3深江50
4小山32
5小橋19
5小柴NULL

このデータを一括で作成するSQLが下記です。すべてコピーして実行すれば、上記のデータが作れます。

DROP DATABASE IF EXISTS sampleapp_development;
CREATE DATABASE sampleapp_development;
USE sampleapp_development;
CREATE TABLE users (id INT, name VARCHAR(255), age INT);
INSERT INTO users (id, name, age) VALUES
(1, '岡', 39),
(2, '松原', 19),
(3, '深江', 50),
(4, '小山', 32),
(5, '小橋', 19),
(6, '小柴', NULL);

データを見てみましょう!

mysql> SELECT * FROM users;
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|    1 | 岡     |   39 |
|    2 | 松原   |   19 |
|    3 | 深江   |   50 |
|    4 | 小山   |   32 |
|    5 | 小橋   |   19 |
|    6 | 小柴   | NULL |
+------+--------+------+
6 rows in set (0.00 sec)

ここから、WHEREを使って条件にあったデータのみを抜き出してみます。

まずは、id = 2のデータ抜き出してみましょう!

mysql> SELECT * FROM users WHERE age = 19;
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|    2 | 松原   |   19 |
|    5 | 小橋   |   19 |
+------+--------+------+
2 rows in set (0.00 sec)

ここまでが「WHERE」の基本です。

この後は、「AND」や「OR」などを使い複数条件を指定して抜き出す方法や、大なり(>)/小なり(<)を使って範囲指定で抜き出す方法を紹介します。

複数条件を指定する「AND」と「OR」

複数条件を指定して絞り込むには「AND」「OR」を使います。ANDを使えば、どちらの条件にも合ったデータだけを抽出できます。ORを使えば、どちらかに合った条件を抽出できます。

どちらもWHEREコマンドの後に書きます。

mysql> SELECT * FROM users WHERE age = 19 AND name = "松原";
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|    2 | 松原   |   19 |
+------+--------+------+
1 row in set (0.00 sec)

mysql> SELECT * FROM users WHERE age = 19 OR age = 50;
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|    2 | 松原   |   19 |
|    3 | 深江   |   50 |
|    5 | 小橋   |   19 |
+------+--------+------+
3 rows in set (0.00 sec)

また、( )で囲めば、ANDとORを組み合わせて使うこともできます。

mysql> SELECT * FROM users WHERE (age = 19 OR age = 50) AND name = "深江";
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|    3 | 深江   |   50 |
+------+--------+------+
1 row in set (0.00 sec)

大なり(>)/小なり(<)を使って範囲条件で抽出する

年齢などで「20歳以上」などの検索条件で抽出したいときもあると思います。そんな時のために範囲条件で抽出ことができる「大なり(>)/小なり(<)」を使った条件指定が用意されています。

例えば、下記のようなSQLにすればageが20歳以上の人だけを抽出できます。

mysql> SELECT * FROM users WHERE age > 20;
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|    1 | 岡     |   39 |
|    3 | 深江   |   50 |
|    4 | 小山   |   32 |
+------+--------+------+
3 rows in set (0.00 sec)

まとめ

  • WHEREコマンドをつかって条件絞り込みができます
  • AND ORをつかって条件を複合出来ます
  • 大なり(>)/小なり(<)を使って範囲条件で抽出ができます

以上、テーブルのレコード条件指定をアキ(@hackablejp)が解説しました!

この記事を書いた人

自身がプログラミングを独学で勉強し始めて躓いた経験を元に、これから勉強をする人に向けに「イラスト多めでわかりやすい記事」にこだわって情報を発信しています。

現在はフルスタックエンジニアとしてサービス開発などのお仕事をしています。