子育てエンジニアブログ

子育てに励むシステムエンジニア(SE)のブログ

【SQL】【SQL Server】交差結合について

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

実行結果
f:id:STSA:20201113214228p:plain

答えは簡単。交差結合をしているかららしい。

交差結合とは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

実行結果
f:id:STSA:20201113223549p:plain

そもそもFROM句で,を使って複数テーブル指定してるのが謎だったのだけど、それは交差結合だったのか。
勉強になった。