SQLの基本であり、最も利用されるコマンドがデータを検索して抽出する「SELECT文」です。
本記事では、SQLの検索処理の基本として、SELECT文の使い方をサンプルコードを交えながら詳しく解説していきます。
目次
SQLの検索処理 SELECT文の基本的な使い方
まずはSELECT文の最も基本となる「SELECT句」と「FROM句」について解説していきます。
基本構文
SELECT文の最小限の構成は下記の通りです。
SELECT カラム名[, カラム名, ...] FROM テーブル名;
FROM句には取得対象のテーブル名を指定し、SELECT句にはテーブルから取得したいカラム名を指定します。
カラム名とはテーブル作成時に定義した「列名」のことです。
後述するサンプルテーブルを例にすると「id」「name」「team_name」がカラム名に当たります。
サンプルデータ
本記事のサンプルでは「member」テーブルに格納した下記のデータを使用します。
+------+-----------------+------------+ | id | name | team_name | +------+-----------------+------------+ | 1 | 田中はじめ | チーム1 | | 2 | 鈴木ごろう | チーム2 | | 3 | 山田あかね | チーム3 | | 4 | 斎藤ゆか | チーム2 | | 5 | 坂本一生 | チーム1 | | 6 | 安倍みき | チーム1 | | 7 | NULL | NULL | +------+-----------------+------------+
対象テーブルから1つのカラムを取得する
まずは指定したテーブルから、1つのカラムデータを対象として取得してみましょう。
SELECT name FROM member;
実行した結果が下記となります。
+-----------------+ | name | +-----------------+ | 田中はじめ | | 鈴木ごろう | | 山田あかね | | 斎藤ゆか | | 坂本一生 | | 安倍みき | | NULL | +-----------------+
カラム名の「name」を検索対象としましたので、「name」列のデータだけが取得出来ていますね。
対象テーブルから2つ以上のカラムを取得する
対象テーブルから2つ以上のカラムを取得したい場合、「,(カンマ)」でカラム名を区切ることで取得可能です。
また「AS」を利用することにより、取得したカラム名を任意の名前に変更することも可能です。
今回はカラム名を日本語に変更してみましょう。
SELECT name AS "名前", team_name AS "テーブル名" FROM member;
実行した結果が下記となります。
+-----------------+-----------------+ | 名前 | テーブル名 | +-----------------+-----------------+ | 田中はじめ | チーム1 | | 鈴木ごろう | チーム2 | | 山田あかね | チーム3 | | 斎藤ゆか | チーム2 | | 坂本一生 | チーム1 | | 安倍みき | チーム1 | | NULL | NULL | +-----------------+-----------------+
今回は2つのカラムを取得しましたが、カンマで繋げていくことでより多くのカラムを取得することが可能です。
テーブルのカラムデータを全て取得する
テーブルに定義された全てのカラムデータを取得したい場合には「*」を利用することが可能です。
全てのカラム名を1つ1つ指定する必要はありません。
SELECT * FROM member;
実行した結果が下記となります。
+------+-----------------+------------+ | id | name | team_name | +------+-----------------+------------+ | 1 | 田中はじめ | チーム1 | | 2 | 鈴木ごろう | チーム2 | | 3 | 山田あかね | チーム3 | | 4 | 斎藤ゆか | チーム2 | | 5 | 坂本一生 | チーム1 | | 6 | 安倍みき | チーム1 | | 7 | NULL | NULL | +------+-----------------+------------+
SQLに検索条件を指定するWHERE句
SQLの検索でテーブルからデータを取得する際、条件を指定して任意のデータを取得するケースが大半です。
SQLではWHERE句を利用することで検索条件を指定することが可能となります。
基本構文
WHERE句はFROM句の後に記述して実行します。
SELECT カラム名[, カラム名, ...] FROM テーブル名 WHERE 条件式 [AND(OR) 条件式];
条件指定のサンプル
では実際に上述したサンプルテーブルを使用して、条件指定のデータ取得を確認してみましょう。
今回のサンプルSQLでは「team_name」カラムの値が「チーム1」のデータのみを取得してみます。
SELECT * FROM member WHERE team_name = "チーム1";
実行した結果が下記となります。
+------+-----------------+------------+ | id | name | team_name | +------+-----------------+------------+ | 1 | 田中はじめ | チーム1 | | 5 | 坂本一生 | チーム1 | | 6 | 安倍みき | チーム1 | +------+-----------------+------------+
条件式に「カラム名=値」 と指定することで、一致したデータのみが取得されています。
文字列や日付を指定する場合には、ダブルクォーテーションやシングルクォーテーションで値を囲う必要があります。
2つ以上の検索条件を指定する
2つ以上の検索条件を指定する場合、AND条件もしくはOR条件を使用します。
AND条件の場合には、ANDの前後に記述した条件に一致すること、OR条件の場合にはORの前後に記述した条件のどちらかに一致することが取得条件となります。
AND条件
下記のサンプルでは「id」カラムが「5以上の値」で、「team_name」カラムが「チーム1」のデータを取得しています。
mysql> SELECT * FROM member WHERE id >= 5 AND team_name = "チーム1"; +------+--------------+------------+ | id | name | team_name | +------+--------------+------------+ | 5 | 坂本一生 | チーム1 | | 6 | 安倍みき | チーム1 | +------+--------------+------------+ 2 rows in set (0.01 sec)
OR条件
下記のサンプルでは「team_name」カラムが「チーム2」のデータか「name」カラムが「田中」から始まる値を取得しています。
mysql> SELECT * FROM member WHERE team_name = "チーム2" OR name like "田中%"; +------+-----------------+------------+ | id | name | team_name | +------+-----------------+------------+ | 1 | 田中はじめ | チーム1 | | 2 | 鈴木ごろう | チーム2 | | 4 | 斎藤ゆか | チーム2 | +------+-----------------+------------+ 3 rows in set (0.01 sec)
SQLの検索結果を並び替えるORDER BY句
SQLの検索結果を取得する際、データの並び順が重要になることもあるでしょう。
検索結果の並び替えにはORDER BY句を利用します。
基本構文
SELECT カラム名[, カラム名, ...] FROM テーブル名 [WHERE 条件式[ ORDER BY カラム名[, カラム名, ...];
カラム名の後ろに「ASC」と指定することで昇順、「DESC」と指定することで降順への並び替えとなります。
並び順を指定するサンプル
下記のサンプルでは「team_name」カラムの降順で並び替えを行うSQLです。
SELECT * FROM member ORDER BY team_name DESC;
実行した結果が下記の通りです。
+------+-----------------+------------+ | id | name | team_name | +------+-----------------+------------+ | 3 | 山田あかね | チーム3 | | 2 | 鈴木ごろう | チーム2 | | 4 | 斎藤ゆか | チーム2 | | 1 | 田中はじめ | チーム1 | | 5 | 坂本一生 | チーム1 | | 6 | 安倍みき | チーム1 | | 7 | NULL | NULL | +------+-----------------+------------+
2つ以上のカラムを指定して並び替え
次のサンプルでは「team_name」を昇順に並び替えたのち、「id」の降順で並び替えを行っています。
ORDER BY句では左側から指定した順番に並び替えを行い、同じ値だった場合には、次に指定したカラムで並び替えを行うという仕組みです。
SELECT * FROM member ORDER BY team_name ASC, id DESC;
実行した結果が下記の通りです。
+------+-----------------+------------+ | id | name | team_name | +------+-----------------+------------+ | 7 | NULL | NULL | | 6 | 安倍みき | チーム1 | | 5 | 坂本一生 | チーム1 | | 1 | 田中はじめ | チーム1 | | 4 | 斎藤ゆか | チーム2 | | 2 | 鈴木ごろう | チーム2 | | 3 | 山田あかね | チーム3 | +------+-----------------+------------+
SQL検索の基本を抑えて任意のデータを取得しよう
本記事では、SQLでの検索処理の基本についてご紹介してきました。
今回ご紹介した内容は、初心者の方に必ず抑えておいてもらいたい内容をピックアップして紹介しており、まだまだ様々な検索方法をSQLのSELECT文では実現することが可能です。
基本をしっかりと抑えた上で、少しずつ応用的な検索処理が扱えるよう取り組んでいきましょう。
今回記事内のサンプル及び解説にはMySQLデータベースを利用しています。
各種データベース毎に少しずつ仕様が異なりますので、ご利用のデータベースの仕様を確認した上でお試しください。