SQLのSELECT文を完全ガイド!初心者でもわかるデータの取得方法
新人
「データベースから情報を取得する方法を知りたいです!」
先輩
「データベースのデータを取得するには、SQLのSELECT文を使うんだ。」
新人
「SELECT文って何ですか?」
先輩
「SQLのSELECT文を使うと、データベースのテーブルから必要なデータを取得できるんだ。実際にテーブルを見てみよう!」
1. 今回使用するテーブルデータ
今回のSQLの解説では、社員情報を管理するemployeeテーブルを使用します。このテーブルには、社員のid、name、age、department、salaryの情報が格納されています。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 30 | 営業 | 5000000 |
| 2 | 佐藤 花子 | 25 | マーケティング | 4200000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 4 | 高橋 直子 | 28 | 人事 | 4800000 |
| 5 | 山本 健太 | 40 | 経理 | 5500000 |
2. SELECT文の基本
SQLのSELECT文は、データベースからデータを取得するための命令文です。例えば、employeeテーブルからすべてのデータを取得するには、次のように記述します。
SELECT * FROM employee;
このSQL文の意味は、次の通りです。
SELECT *: すべてのカラム(列)を取得する。FROM employee:employeeテーブルからデータを取得する。
このSQLを実行すると、以下のような結果が得られます。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 30 | 営業 | 5000000 |
| 2 | 佐藤 花子 | 25 | マーケティング | 4200000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 4 | 高橋 直子 | 28 | 人事 | 4800000 |
| 5 | 山本 健太 | 40 | 経理 | 5500000 |
3. 特定のカラムを取得する方法
すべてのカラムではなく、特定のカラムだけを取得したい場合は、*の代わりにカラム名を指定します。
SELECT name, age FROM employee;
このSQLを実行すると、以下のような結果が得られます。
| name | age |
|---|---|
| 田中 太郎 | 30 |
| 佐藤 花子 | 25 |
| 鈴木 一郎 | 35 |
| 高橋 直子 | 28 |
| 山本 健太 | 40 |
4. WHERE句でデータを絞り込む
データを取得するときに、すべてのデータではなく、特定の条件に合うデータだけを取得したい場合は、WHERE句を使います。
SELECT * FROM employee WHERE age >= 30;
このSQL文は、employeeテーブルから30歳以上の社員のデータだけを取得します。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 30 | 営業 | 5000000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 5 | 山本 健太 | 40 | 経理 | 5500000 |
このように、WHERE句を使うことで、条件に一致したデータのみを取得できます。
5. ORDER BYでデータを並び替える
データを取得するときに、特定の順番で並び替えたい場合は、ORDER BYを使います。
SELECT * FROM employee ORDER BY age ASC;
このSQL文は、年齢の昇順(小さい順)に並び替えてデータを取得します。
| id | name | age | department | salary |
|---|---|---|---|---|
| 2 | 佐藤 花子 | 25 | マーケティング | 4200000 |
| 4 | 高橋 直子 | 28 | 人事 | 4800000 |
| 1 | 田中 太郎 | 30 | 営業 | 5000000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 5 | 山本 健太 | 40 | 経理 | 5500000 |
逆に、降順(大きい順)に並び替えたい場合は、DESCを指定します。
SELECT * FROM employee ORDER BY age DESC;
このSQLを実行すると、年齢の降順(大きい順)に並び替えられます。
| id | name | age | department | salary |
|---|---|---|---|---|
| 5 | 山本 健太 | 40 | 経理 | 5500000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 1 | 田中 太郎 | 30 | 営業 | 5000000 |
| 4 | 高橋 直子 | 28 | 人事 | 4800000 |
| 2 | 佐藤 花子 | 25 | マーケティング | 4200000 |
このように、ORDER BYを使うと、データの並び順を自由に調整できます。
6. LIMITで取得するデータ数を制限
データが多すぎる場合、すべてのデータを取得するのではなく、最初の数件だけ取得したいことがあります。そのような場合は、LIMIT句を使用します。
SELECT * FROM employee LIMIT 3;
このSQL文は、employeeテーブルから最初の3件のデータだけを取得します。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 30 | 営業 | 5000000 |
| 2 | 佐藤 花子 | 25 | マーケティング | 4200000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
また、取得するデータの開始位置を指定したい場合は、OFFSETを使用します。
SELECT * FROM employee LIMIT 3 OFFSET 2;
このSQL文は、データの3件目から3件のデータを取得します。
| id | name | age | department | salary |
|---|---|---|---|---|
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 4 | 高橋 直子 | 28 | 人事 | 4800000 |
| 5 | 山本 健太 | 40 | 経理 | 5500000 |
このように、LIMITとOFFSETを組み合わせることで、データの取得範囲を自由に制御できます。
7. よくあるエラーと対策
初心者がSQLのSELECT文を使うときに、よくあるエラーを紹介します。
1. テーブル名の間違い
例えば、employeesではなく、正しいテーブル名はemployeeなのに間違えると、エラーが発生します。
SELECT * FROM employees;
エラー内容: ERROR: relation "employees" does not exist
対策: 正しいテーブル名を使用しているか確認する。
SELECT * FROM employee;
2. カラム名の間違い
存在しないカラム名を指定するとエラーになります。
SELECT fullname FROM employee;
エラー内容: ERROR: column "fullname" does not exist
対策: 正しいカラム名を指定する。
SELECT name FROM employee;
3. WHERE句の条件ミス
WHERE句で条件を間違えると、期待したデータが取得できないことがあります。
SELECT * FROM employee WHERE age = "30";
エラー内容: ERROR: column "age" is of type integer but expression is of type text
対策: 数値型のカラムには、クォーテーションを使わない。
SELECT * FROM employee WHERE age = 30;
4. ORDER BYの使用ミス
カラム名を間違えると、ソートがうまく動作しません。
SELECT * FROM employee ORDER BY ages ASC;
エラー内容: ERROR: column "ages" does not exist
対策: 存在するカラムを正しく指定する。
SELECT * FROM employee ORDER BY age ASC;
このように、よくあるエラーを理解し、正しいSQL文を書けるようにしましょう!