例えば、こういう顧客テーブルを全件取得するSQLがあります。
SELECT * FROM customers
上記のSQLはこうやっても一緒です。
SELECT * FROM (SELECT * FROM customers)
テーブルCustomersって要は全件取得した結果集合をFROMに設定してるんだよねっていうこと。
JOINでも同じ。Salesテーブルは外部キーとして、CustomersテーブルのIDを持っている。カラム名はcustomer_id。
SELECT * FROM customers as c join sales as s on s.customer_id = c.id
以下のように書いても一緒です。
SELECT * FROM (SELECT * FROM customers) as c join (SELECT * FROM sales) as s on s.customer_id = c.id
JOINの対象にサブクエリを仕込めるっていうのは、こいつが一番わかり易い気がするなと新人トレーニングで感じた。
SQLが集合の関係演算を行うものであるというのは、FROM句を細かく見ていくとよくわかる。逆に言うと、FROM句が書けない場合はSELECTすることは絶対にできないなー