今回は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 {テーブル名}」という構文で書きましょう。
- 全てのカラムを取得するには「*」と指定します。
カラムを指定してデータを取得
今度は取得したいカラムを指定してデータを取得してみましょう。今回は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などのグルーピングや集計関数について解説していきます。