この記事は「SQL SELECT基礎」の第4回目です。
SQL SELECT基礎 目次
←前の記事はSQL SELECT基礎(3) その場で表を作る
→次の記事はSQL SELECT基礎(4-2) 行を減らす (WHERE 制限)
※以下がわかってたらこの章は飛ばしてOK
-- このSQL文の結果を説明して下さい。もちろん暗算で。
SELECT 1,"hello" FROM sample
表の加工(1) 列を減らす (project 射影)
SELECT文は、既にある表を加工してその場で別の表を作っていく構文です。
最も単純なのがSELECT
からFROM
の間に書く、1行1行に対して単純な加工を行う構文です。
**projection(射影)**操作と言ったりします。
また、スクリプト言語でよくあるmap関数に相当する機能も持ち合わせています。
今回のサンプル表

こんな感じでいいや。
(
SELECT 1 AS id, "taro" AS name, "1990-01-01" AS birthday
UNION ALL
SELECT 2, "hanako", "1995-04-12"
UNION ALL
SELECT 3, "jiro", "2004-03-02"
) AS sample
以降のSQLでsample
と書いている部分は↑に置き換えると実行できます。
例えば SELECT * FROM sample
と書いてあるSQLを実行したかったら、↓のような感じでコピペして実行して下さいね。
SELECT * FROM
(
SELECT 1 AS id, "taro" AS name, "1990-01-01" AS birthday
UNION ALL
SELECT 2, "hanako", "1995-04-12"
UNION ALL
SELECT 3, "jiro", "2004-03-02"
) AS sample
全列を取得する*
無加工で全列取得するときは*
と書くことができます。
SELECT * FROM sample

列を書き並べる
表を構成する列の名前を書き並べることもできます。*
を使わずに丁寧に書くとこうです。
SELECT id,name,birthday FROM sample
SELECT "hello world"
と違い、ダブルクォーテーションで囲っていないことに注意して下さい。id
, name
, birthday
は列名であって、文字列ではないからです。
ここまでで察しがつくと思いますが、書き並べる列を減らせば、結果の列が減ります。
SELECT id,name FROM sample

書く順番を変えれば列の順番も変わります。
SELECT name,id FROM sample

簡単ですね。
列を増やす
逆にスカラ値をSELECT文中に直接書いて、列を増やすこともできます。
SELECT id, 1 FROM sample
FROM句があると、表を1行1行読みながら動作するため、定数値を書いていても行数分出力されます。
冒頭のクイズ結果は
SELECT 1,"hello" FROM sample

sampleテーブルの行数分出力される、ということになります。
列を加工する
簡単な加工であれば、まとめて書いてしまうことができます。加工した後の値と、加工前の値を並べることもできます。
SELECT id * 2, id FROM sample
列同士を使って何か計算する
複数の列の値を同時に使って計算することもできます。たとえば文字列連結のCONCAT()
関数を使って、適当な文字列を作ることもできます。
SELECT CONCAT(name, "さんは", birthday, "生まれです") FROM sample

他にも四則演算やMySQL組み込みの関数を組み合わせたり、結構いろんなことができます。
感覚がつかめてきたでしょうか?