SQLで交差結合についてわかっていなかったのでメモ。
今回はDBはSQL Server。
よく、下のようなFROM句に複数のテーブル名があってSELECTすることがある。
SELECT * FROM work1,work2;
で、work1にはデータがあってwork2にはデータがない時にSELECTした時に何も表示されないのでナゼ?と思った。
CREATE TABLE #work1 (id int ,name varchar(10) ); CREATE TABLE #work2 (id int ,name varchar(10) ); INSERT INTO #work2 ([id], [name]) VALUES (1, 'test'); select * from #work1,#work2
実行結果
答えは簡単。交差結合をしているかららしい。
交差結合とは2つのテーブルのデータの全ての組み合わせを取得する。
明示的に書くとCROSS JOIN。
つまり次のようなSQLを実行しているのと同じ。
select * from #work1 cross join #work2
どちらにもテーブルのデータがあればSELECTできる。
CREATE TABLE #work1 (id int ,name varchar(10) ); CREATE TABLE #work2 (id int ,name varchar(10) ); INSERT INTO #work2 ([id], [name]) VALUES (1, 'test'); INSERT INTO #work1 ([id], [name]) VALUES (1, 'testwork1'); select * from #work1 cross join #work2
実行結果
そもそもFROM句で,を使って複数テーブル指定してるのが謎だったのだけど、それは交差結合だったのか。
勉強になった。