CodeGym /コース /SQL SELF /SELECTの基本構文:クエリの構造とコンポーネント

SELECTの基本構文:クエリの構造とコンポーネント

SQL SELF
レベル 1 , レッスン 4
使用可能

さて、もう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の部分。そのあとで結果が返ってくる。裏側ではこんな感じ:

  1. FROMでテーブルを処理:サーバーが指定されたテーブルを探す。
  2. 条件があれば行に適用:条件に合う行だけ選ばれる。
  3. 指定したカラムを選ぶ:残った行から必要なデータを取り出す。

つまり、こんなコマンドの場合:


        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クエリはデータを選ぶだけ。こういうミスはデータベースのデータを壊すことはないよ。でも、データを変更するクエリになると、ミスのダメージはもっと大きくなるから注意!

*を使って全部のカラムを選ぶこと。

*を使うと、必要ないデータまで全部持ってきちゃう。これだとパフォーマンスが落ちるし、大きなテーブルだと問題になることも。ほんとに必要なカラムだけ選ぶようにしよう。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION