【MySQL】SELECT文とWHERE句による条件指定の基本まとめ

今回はMySQLでのSELECT文とWHERE句による条件指定の基本についてまとめと解説をしていきたいと思います。

SQLが始めたてで、基本から学んでいきたいという方向けの記事となります。

データベースとデータの準備

まずはデータベースを作成しましょう。データベース名はなんでもいいですが、このブログではtrainingというデータベースを作成して進めていきます。

CREATE DATABASE training;
USE training;

また、今回はこちらのデータを使って解説していきますので、下記のテーブルを作成し、データをインポートしてください。

CREATE TABLE users (
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    first_name CHAR(3) NOT NULL,
    last_name CHAR(3) NOT NULL,
    sex CHAR(1) NOT NULL,
    age TINYINT NOT NULL,
    birthday DATE NOT NULL,
    birthplace CHAR(3) NOT NULL,
    PRIMARY KEY(id)
);
LOAD DATA LOCAL INFILE 'users.csv' INTO TABLE users FIELDS TERMINATED BY ',';

データが300件登録されていれば準備完了です。

基本的なSELECT文の使い方

テーブルのデータを全て取得

SELECT * FROM users;
 id  first_name  last_name  sex  age  birthday  birthplace
1  尚子  片倉  女 34  1985-11-17  千葉県
2  忠良  荒巻  男 40  1980-06-22  山梨県
3  佳代  清家  女 30  1990-01-10  宮崎県
4  直也  大黒  男 15  2004-11-16  岡山県
・・・ ・・・  ・・・  ・・・ ・・・  ・・・  ・・・
解説
  • データを取得するには「SELECT {カラム名} FROM {テーブル名}」という構文で書きましょう。
  • 全てのカラムを取得するには「*」と指定します。
注意
今回は300件程度のデータなので全件取得しましたが、基本的には全件取得は控えましょう。必ずLIMITをかけるか、WHERE句で取得する件数を絞り込んでください。是何億ものデータがある場合、全件取得すると画面にデータが大量に流れて止まらなくなります。

カラムを指定してデータを取得

今度は取得したいカラムを指定してデータを取得してみましょう。今回はlast_nameとageのカラムを選択します。

SELECT last_name, age FROM users;
 last_name  age
 片倉 34
 荒巻 40
 清家 30
 大黒 15
・・・ ・・・
解説

特定のカラムを抽出するには、「SELECT」の後にカラム名を指定する。複数選択したい場合は、カンマでカラム名を区切ります。並び順は任意の並び順で問題ありません。

LIMITを指定して一部のデータを抽出

SELECT文の後にLIMITを指定することで、データの取得する行数を指定することができます。

SELECT * FROM users LIMIT 3;
 id  first_name  last_name  sex  age  birthday  birthplace
1  尚子  片倉  女 34  1985-11-17  千葉県
2  忠良  荒巻  男 40  1980-06-22  山梨県
3  佳代  清家  女 30  1990-01-10  宮崎県
解説

「SELECT」文の後に「LIMIT {取得したい行数}」を指定することで上から取得したい行数分のデータを取得することができます。上記の例だと、「LIMIT 3」としているため、3行のレコードが取得されます。

ORDER BYでデータをソート

SELECT文の後にORDER BYを使うことでデータをソートすることができます。例えば年齢が一番若いユーザーを1件だけ取得する例を挙げてみます。

SELECT * FROM users ORDER BY age LIMIT 1;
 id  first_name  last_name  sex  age  birthday  birthplace
293  健次郎  宇田川  男 4  2015-12-28  大阪府

今度は逆に年齢が高いユーザーを1件だけ出力してみましょう。

SELECT * FROM users ORDER BY age DESC LIMIT 1;
 id  first_name  last_name  sex  age  birthday  birthplace
83  有正  岩谷  男 68  1952-05-23  東京都
解説
  • 「ORDER BY {カラム名}」を指定することで任意の列でソートすることができる。
  • ORDER BYでカラム指定した後に「DESC」を指定すると「降順」になる
  • ORDER BYのデフォルトは「昇順」です。意図的に昇順と指定する場合は「ASC」を指定しましょう。

基本的なWHERE句の使い方

ここからはSQLの条件指定(WHERE句)について解説していきます。WHERE句はSELECT文で取得したデータに対して条件を指定して、取得するデーターを絞り込むことができます。LIMITとは違い、各カラムに対して、「年齢が40歳以上のレコードを取得」といったような絞り込みをすることができるようになります。

 

試しに「年齢が40歳以上のレコードを取得」を抽出する例をやってみましょう。

SELECT * FROM users WHERE age >= 40 ORDER BY age;
 id  first_name  last_name  sex  age  birthday  birthplace
2  忠良  荒巻  男 40  1980-06-22  山梨県
58  泉  湯川  女 40  1979-12-14  京都府
71  幹雄  都築  男 40  1980-04-06  大分県
155  瑠菜  君島  女 40  1980-02-23  山口県
174  新一郎  池本  男 40  1979-12-14  岐阜県
206  幸司  猪野  男 40  1980-01-10  沖縄県
220  花音  市村  女 40  1980-02-22  福島県
222  華乃  辻田  女 40  1980-07-08  長野県
251  真理子  湊  女 40  1980-07-04  山口県
31  孝宏  阿南  男 41  1979-07-17  茨城県
46  真琴  川中  女 41  1979-08-09  石川県
76  香穂  都築  女 41  1979-01-26  宮城県
102  哲二  緒方  男 41  1978-10-24  新潟県
解説
  • SELECT文に続いて「WHERE {条件式}」というように条件指定をします。今回は「年齢が40歳以上」なので「age >= 40」となります。117レコード抽出できれば正しいです。
  • 「ORDER BY age」で年齢を昇順にし、本当に「年齢が40歳以上」になっているか確認しています。

特定の文字列にマッチするレコードの抽出

今度は文字列に対して条件指定を指定みましょう。「出身地が東京都」のレコードを抽出してみます。

SELECT * FROM users WHERE birthplace = '東京都';
 id  first_name  last_name  sex  age  birthday  birthplace
68  与三郎  大東  男 48  1972-06-17  東京都
83  有正  岩谷  男 68  1952-05-23  東京都
112  亜沙美  栗栖  女 14  2006-06-06  東京都
171  裕平  中条  男 31  1989-06-06  東京都
259  彩芽  谷  女 30  1989-09-11  東京都
291  禎  北沢  男 48  1972-08-31  東京都
解説

文字列比較も条件式を指定するだけで簡単に取得することができます(全6レコード)。文字列比較の際はシングルクォーテーションで囲むのを忘れないようにしてください。

複数の条件を指定して抽出

最後に複数の条件を指定してデータを抽出してみましょう。今度はここまでの例を合わせて、「40歳以上かつ東京都出身」のレコードを抽出してみましょう。

SELECT * FROM users WHERE age >= 40 AND birthplace = '東京都' ORDER BY age;
 id  first_name  last_name  sex  age  birthday  birthplace
68  与三郎  大東  男 48  1972-06-17  東京都
291  禎  北沢  男 48  1972-08-31  東京都
83  有正  岩谷  男 68  1952-05-23  東京都
解説

複数の条件を指定する場合は「AND」で続けて条件式をしていきましょう。上記の場合であれば順番は特に関係ありませんので、先に出身地を先頭に条件を組み立てても同じ結果が得られます。また、「AND」ではなく「OR」にすることで、「40歳以上か東京都出身」といったような抽出をすることができるようになります。

まとめ

ここまでで基本的なSQLの書き方について解説していきました。Excelでやっているようなフィルタくらいであれば、これらの書き方をマスターすることでできるようになると思います。この辺りの基本構文は普段の業務や開発でも当たり前のように使いますのでぜひマスターしてください。

次回はGROUP BYなどのグルーピングや集計関数について解説していきます。