さて、もうSELECTについて触れ始めたね。これはSQLのコマンドで、データベースのテーブルや複数テーブルからデータを取り出すためのものだよ。言ってみれば、データベースのF5キーみたいな感じ。「何があるか見せて!」って感じ。シンプルなクエリの構造はこんな感じ:
SELECT カラム1, カラム2, … カラムN
FROM テーブル
どこがどうなってるかというと:
SELECT— クエリはこのキーワードから始まるよ。カラム1, カラム2, ...— ここは欲しいカラム(列)のリスト。FROM テーブル— データを取り出すテーブルを指定する部分。
じゃあ、これをパーツごとに例で見ていこう!
SELECTコマンドの基本構造
全カラムを選ぶ場合。テーブルの全データを見たいなら、アスタリスク *を使えばOK。例えば、studentsってテーブルがあるとするね:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 17 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 21 | C |
このテーブルから全データを取り出すには、こう書く:
SELECT * FROM students
結果はこんな感じでカラムと行が全部出てくる:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 17 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 21 | C |
つまり、テーブル全部がそのまま出てくるってこと!
特定のカラムだけ選ぶ
もちろん、たいていは必要なカラムだけ選びたいよね。余計なデータは持ってきたくないし。例えば、名前と年齢だけ知りたい場合は、こう書く:
SELECT name, age FROM students
クエリの結果はこうなる:
| name | age |
|---|---|
| Alex | 17 |
| Maria | 19 |
| Otto | 21 |
違い分かった?必要なカラムだけ選ぶと、クエリも速くなるし見た目もスッキリ!
クエリの実行順序
SQLクエリってちょっとクセがあるんだ。SELECTを最初に書くけど、実は最初に処理されるのはFROMの部分。そのあとで結果が返ってくる。裏側ではこんな感じ:
FROMでテーブルを処理:サーバーが指定されたテーブルを探す。- 条件があれば行に適用:条件に合う行だけ選ばれる。
- 指定したカラムを選ぶ:残った行から必要なデータを取り出す。
つまり、こんなコマンドの場合:
SELECT name FROM students
まずサーバーがstudentsテーブルを探して、次にnameカラムを読んで、最後に結果を返すって流れ。
実践例
例1:学生リスト。
例えば、君が大学の管理者で、全学生の名前が欲しいとする。クエリはこう:
SELECT name
FROM students;
結果:
| name |
|---|
| Alex |
| Maria |
| Otto |
例2:年齢とidも追加。
今度はidと名前、年齢も欲しい場合。カラムを追加するだけ:
SELECT name, age, id
FROM students;
結果:
| name | age | id |
|---|---|---|
| Alex | 17 | 1 |
| Maria | 19 | 2 |
| Otto | 21 | 3 |
例3:式を追加。
例えば、学生が成人になるまであと何年か知りたいとする。
その場合はageの代わりに21-ageって書く。ここでは成人が21歳ってことにしてみるね:
SELECT name, 21-age
FROM students;
結果はこうなる:
| name | 21-age |
|---|---|
| Alex | 4 |
| Maria | 2 |
| Otto | 0 |
式については次のレクチャーで詳しくやるよ。じゃあ、よくあるミスも見てみよう!
SELECTでありがちなミス
テーブル名やカラム名のタイプミス。
一番多いミスは、テーブル名やカラム名を間違えること。
もしデータベースにstudentszってテーブルがなかったら、エラーになる:
SELECT name
FROM studentsz; -- エラー:テーブルがない!
また、カラム名がnameなのにstudent_nameって書いたら、またエラー:
SELECT student_name -- エラー:カラムがない!
FROM students;
解決法はシンプル。テーブル名とカラム名はちゃんと確認しよう。
クエリの構文ミス。
もう一つよくあるのは、カラムを並べるときにカンマを忘れること:
SELECT name age id -- エラー:カンマがない!
FROM students;
でも心配しなくて大丈夫。SELECTクエリはデータを選ぶだけ。こういうミスはデータベースのデータを壊すことはないよ。でも、データを変更するクエリになると、ミスのダメージはもっと大きくなるから注意!
*を使って全部のカラムを選ぶこと。
*を使うと、必要ないデータまで全部持ってきちゃう。これだとパフォーマンスが落ちるし、大きなテーブルだと問題になることも。ほんとに必要なカラムだけ選ぶようにしよう。
GO TO FULL VERSION