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

  • 0
    Like
  • 0
    Comment

    この記事は「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組み込みの関数を組み合わせたり、結構いろんなことができます。

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