SELECT文(抽出)
はじめに
SELECT文 は SQL(データベース言語) において、とっても重要な文です。
SELECT文は名前のとおり、データベースにある情報を抽出する文です。
単純に データの一覧を抽出 したり、 条件を指定して必要な情報を抽出 することができます。
この章では、SELECT文の基本的な部分を学んで行きましょう!
Step1 : SELECT文の使い方
SELECT文はDBにあるデータを取得する命令文です。
SELECT 取得したい列名 FROM テーブル名
SQL文では大文字、小文字の区別がありません。
ここでは見やすいように列名、テーブル名は小文字で記述します。
※SQLPlusやMySQLコマンドラインクライアントなどで実行する時は、
最後に ;
をつけて、文の終了であることを示します。
図のテーブル名は staff です。
ここから社員全員の氏名を抽出したい場合は次のように記述します。
SELECT name FROM staff
全社員の氏名と所属部署を抽出したい場合は次のように列名をカンマで区切ります。
SELECT name , section FROM staff
また、列名に *(アスタリスク)
を使用することで全列指定することもできます。
SELECT * FROM staff
※しかしアスタリスクを使用すると、処理速度が列名を指定する場合より下がり、
テーブルレイアウト変更による障害の原因にもなるため実際の開発では通常使用しません。
Step2 : 別名
列名に別名をつけることもできます。
SELECT name AS namae FROM staff (ASは省略できます)
日本語を表示できる環境、設定ならば別名には日本語も使えます。
SELECT name AS 名前 FROM staff (DBMSによりシングルクォートやダブルクォートが必要な場合があります)
Step3 : Distinct
社内にはどれだけの部署があるのか抽出してみましょう。
SELECT section FROM staff
重複して存在する名前がいくつも出てきてしまいます。
DISTINCTで列名を指定すると重複分は抽出されません。
SELECT DISTINCT section FROM staff
Step4 : ORDER BY (ソート)
データをソートすることも可能です。 ORDER BY句
を使用します。
昇順、降順をそれぞれ ASC、DESC で指定します。 ASCは ascending 、 DESCは descending の略です。
では、入社年度をそれぞれ昇順と降順で抽出してみましょう。
SELECT * FROM staff ORDER BY entrance_year ASC (昇順) SELECT * FROM staff ORDER BY entrance_year DESC (降順)
ASC、DESCを指定しない場合、ASC(昇順)と判断されます。
SELECT * FROM staff ORDER BY entrance_year
ソート対象が文字列型の場合、文字コード順に並びます。
SELECT * FROM staff ORDER BY section
部署でソートされました。しかし、その中でも更に入社年度の新しい人から出力したい・・・。
そのような場合は、ソート対象の列名をカンマで区切って複数指定することで、
複数のソートキーによるソートを行うことができます。
SELECT * FROM staff ORDER BY section, entrance_year DESC
これで部署ごとに入社年度の新しい人から並びました。