SQL

SQL SELECT基礎(4-1) 列を減らす (project 射影)

この記事は「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(射影)操作と言ったりします。

こう、表からいくつか列を除外するイメージ。
image.png

また、スクリプト言語でよくあるmap関数に相当する機能も持ち合わせています。

今回のサンプル表

image.png

こんな感じでいいや。

(
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

image.png

列を書き並べる

表を構成する列の名前を書き並べることもできます。*を使わずに丁寧に書くとこうです。

SELECT id,name,birthday FROM sample

SELECT "hello world"と違い、ダブルクォーテーションで囲っていないことに注意して下さい。id, name, birthday は列名であって、文字列ではないからです。

ここまでで察しがつくと思いますが、書き並べる列を減らせば、結果の列が減ります。

SELECT id,name FROM sample

image.png

書く順番を変えれば列の順番も変わります。

SELECT name,id FROM sample

image.png

簡単ですね。

列を増やす

逆にスカラ値をSELECT文中に直接書いて、列を増やすこともできます。

SELECT id, 1 FROM sample

FROM句があると、表を1行1行読みながら動作するため、定数値を書いていても行数分出力されます。

冒頭のクイズ結果は

SELECT 1,"hello" FROM sample

image.png

sampleテーブルの行数分出力される、ということになります。

列を加工する

簡単な加工であれば、まとめて書いてしまうことができます。加工した後の値と、加工前の値を並べることもできます。

SELECT id * 2, id FROM sample

列同士を使って何か計算する

複数の列の値を同時に使って計算することもできます。たとえば文字列連結のCONCAT()関数を使って、適当な文字列を作ることもできます。

SELECT CONCAT(name, "さんは", birthday, "生まれです") FROM sample

image.png

他にも四則演算やMySQL組み込みの関数を組み合わせたり、結構いろんなことができます。

感覚がつかめてきたでしょうか?