直積(CROSS JOIN

■データ間の全ての組み合わせを取得することを直積という。

f:id:akCs:20210326112648p:plain  f:id:akCs:20210326112720p:plain

users                         items(owner_idとusers.idは連結キーとする)

上記の様なテーブルがある場合に、両テーブル間の全組み合わせを取る。
・SELECT U.*,I.* FROM users u CROSS JOIN items I

 

f:id:akCs:20210326112954p:plain

通常、LEFT OUTER JOIN等をして各ユーザのの持つアイテム一覧を取得したりするが、

これらJOINは全て、直積結果を元に条件に一致したデータを抽出したものとなる。

ex)

以下は、INNER JOINにて、ユーザの持つアイテム一覧を取得する例

SELECT u.id,u.name,i.name FROM users u INNER JOIN items i ON
u.id = i.owner_id

f:id:akCs:20210326113851p:plain

これを、直積に対して条件を元に抽出する例で置き換えると以下
SELECT u.id,u.name,i.name,i.owner_id FROM users u CROSS JOIN items i
where u.id = i.owner_id