SQLを利用することで、データベースに関する様々な処理を実施することが可能ですが、中でも最も利用されるのがデータの抽出処理に当たる「SELECT文」です。
本記事では、SQLのSELECT文の使い方について、初心者の方でも分かりやすくご紹介していきたいと思います。
目次
SQLのデータ抽出SELECT文の基本を抑えよう!
まずはSQLのデータ抽出で使用する「SELECT」文の基本的な構文から順番に確認していきましょう。
SELECT文の基本構文
SELECT文の基本構文は下記の通りです。
SELECT カラム名(, カラム名, ...) FROM テーブル名
SELECTの後ろに取得したいカラム名を指定します。
カラム名はいくつでも指定可能で、カンマで区切ることにより1つのカラム名として認識されます。
またテーブル全てのカラムを一括で取得したい場合には全てのカラム名を指定する必要はなく「*」を指定することで取得することが可能です。
サンプルで確認しよう
では、実際にSELECT文の動きをサンプルコードで確認してみましょう。
今回利用するサンプルテーブルは下記となります。
サンプルテーブル
今回はサンプルとして2つのテーブルを用意しています。
userテーブル
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 1 | 山田太郎 | 25 | | 2 | 山田花子 | 22 | | 3 | 佐藤一郎 | 33 | | 4 | 伊藤次郎 | 44 | | 5 | 鈴木三郎 | 22 | +------+--------------+------+
サンプルからデータを抽出してみよう
ではサンプルテーブルからいくつかのデータを抽出してみたいと思います。
まずuserテーブルの全てのデータを抽出したい場合には、下記のようなコマンドで抽出出来ます。
SELECT * FROM user;
実行した結果が下記となります。
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 1 | 山田太郎 | 25 | | 2 | 山田花子 | 22 | | 3 | 佐藤一郎 | 33 | | 4 | 伊藤次郎 | 44 | | 5 | 鈴木三郎 | 22 | +------+--------------+------+
もちろんカラム名を全て列挙しても同様のデータを抽出可能です。
次にidは不要なので「name」「age」のカラムだけを抽出してみたいと思います。
SELECT name, age FROM user;
実行した結果が下記となります。
+--------------+------+ | name | age | +--------------+------+ | 山田太郎 | 25 | | 山田花子 | 22 | | 佐藤一郎 | 33 | | 伊藤次郎 | 44 | | 鈴木三郎 | 22 | +--------------+------+
SQLで条件を指定してデータを抽出してみよう
ここまでで、SELECT文の基本的な構文と使い方についてご紹介してきました。
実際の利用用途としてはテーブル全てのデータを抽出したいことってあまりないんですよね。
そこで条件を指定して、必要なデータだけをSQLで抽出することになります。
条件指定にはWHERE句を使用する
まずはSELECT文でWHERE句を使用する際の基本構文を確認しておきましょう。
SELECT カラム名(, カラム名, ...) FROM テーブル名 WHERE 条件式 (AND(OR) 条件式)
WHERE句に条件式を記述することで該当するデータのみ抽出することが可能です。
サンプルで確認しよう
では実際にいくつかのサンプルで確認していきましょう。
まずはuserテーブルからidが2のデータを抽出するサンプルSQLを作成してみます。
SELECT * FROM user WHERE id=2;
実行した結果が下記となります。
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 2 | 山田花子 | 22 | +------+--------------+------+
対象データだけが抽出出来ていることをご確認頂けます。
次に年齢が22歳で、名前に「山田」が含まれているデータだけを取得したいと思います。
SELECT * FROM user WHERE age=22 AND name like "%山田%";
実行した結果が下記となります。
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 2 | 山田花子 | 22 | +------+--------------+------+
SQL中の「name like “%山田%”」は部分一致条件で、「山田」がname列に含まれる場合、抽出対象として認識されます。
ちなみに上記ではAND条件を使用することで、年齢が22歳かつ名前に「山田」が含まれるという条件を指定しましたが、OR条件に変更するとどうなるのでしょうか?
SELECT * FROM user WHERE age=22 OR name like "%山田%";
実行した結果が下記の通りとなります。
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 1 | 山田太郎 | 25 | | 2 | 山田花子 | 22 | | 5 | 鈴木三郎 | 22 | +------+--------------+------+
OR条件に変更したことにより、年齢が22歳または名前に「山田」が入っているデータを取得する指定方法に変更されたことを意味します。
ANDとOR条件では取得出来るデータに大きな差が生まれるため、しっかりと両者の意味合いを理解するようにしましょう。
SQLで取得するデータの並び順を変更するには?
もうひとつデータ抽出の際、頻繁に利用されるものにデータの並び替えが存在します。
何も指定しない場合、データベースに依存するため、意図しない順番でデータを抽出する可能性も否定出来ません。
基本的には、意図しない不具合を防ぐ意味でもデータの並び順はご自身で明確化しておくのが良いでしょう。
データの並び替えにはORDER BY句を使用する
まずはSELECT文でORDER BY句を使用する際の基本構文を確認しておきましょう。
SELECT カラム名(, カラム名, ...) FROM テーブル名 ORDER BY カラム名 (ASC(DESC), カラム名)
ORDER BY句にカラム名を指定することで昇順(ASC)・降順(DESC)を指定することが可能です。
ASC・DESCの指定を行わずカラム名だけを指定した場合、デフォルトの昇順(ASC)指定となります。
ORDER BY句では複数のカラム名を指定した場合、左側に記述したカラム名から順に優先されます。
サンプルで確認しよう
では実際にいくつかのサンプルで確認していきましょう。
まずはuserテーブルのageカラムを指定した並び替えを実施してみます。
SELECT * FROM user ORDER BY age;
実行した結果が下記の通りとなります。
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 2 | 山田花子 | 22 | | 5 | 鈴木三郎 | 22 | | 1 | 山田太郎 | 25 | | 3 | 佐藤一郎 | 33 | | 4 | 伊藤次郎 | 44 | +------+--------------+------+
ageカラムの昇順でデータが並んでいることをご確認頂けます。
では続いて、同じ年齢の場合idカラムの降順で並べるような処理に変更してみたいと思います。
SELECT * FROM user ORDER BY age, id DESC;
実行した結果が下記の通りとなります。
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 5 | 鈴木三郎 | 22 | | 2 | 山田花子 | 22 | | 1 | 山田太郎 | 25 | | 3 | 佐藤一郎 | 33 | | 4 | 伊藤次郎 | 44 | +------+--------------+------+
年齢の昇順で並べた上で、同じ年齢のデータはidの降順に並んでいることをご確認頂けます。
さいごに:SQLのデータ抽出は奥が深い!簡単なものから徐々にスキルアップを目指そう!
本記事では、SQLでのデータ抽出の基本について、初心者の方向けにご紹介してきました。
今回ご紹介した内容は初歩の初歩となる内容で、SQLの抽出処理だけでもテーブル結合などを筆頭に、まだまだたくさん身につけなければならないスキルがあります。
まずは本記事でご紹介した基本をしっかりと抑えた上で、徐々にスキルアップに挑戦していきましょう。
本記事でのサンプルは全て同じテーブルを利用します。