Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

SQLのFROM句はテーブルである必要はございません!

どうもそのように思っている方が多い気がしたので。

FROM句に指定できるのはテーブルそのものではなく、SELECT文を発行した結果でも指定できます。派生テーブルという表現をすることが多いみたい。

PostgreSQLのマニュアルでもそんなような事が書いてあります。

FROM句は、カンマで分けられたテーブル参照リストで与えられる1つ以上のテーブルから、1つのテーブルを派生します。

テーブル参照は、テーブル名(スキーマで修飾することもできます)、副問い合わせによる派生テーブル、結合の組み立て、またはこれらの複雑な組み合わせからなります。

https://www.postgresql.jp/document/9.5/html/queries-table-expressions.html#queries-from

派生テーブルの例

こんなやつ。from句でテーブルではなくSQLの選択結果をFROMに入れています。

select
 *
from
  (
    select
        id,
        user_id,
        access_path,
        created
    from
        logs
    where
        year(created) = 2015
    order by
        id desc
) as tmp_table 
group by 
  user_id

SQL集合論ですから。集合指向の言語であります。

オヌヌメ

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)