問題:
SQLの2つのテーブルから行のすべての組み合わせを取得する必要があります。
例:
ここに2つのテーブルがあります:1つは文字を含みます(letters
)、その他には数字が含まれています(numbers
):
letter |
---|
X |
Y |
number |
---|
0 |
1 |
2 |
ソリューション1:
letters
numbers
テーブルでは、CROSS JOIN
を使用します :
SELECT * FROM letters CROSS JOIN numbers;
クエリの結果は次のようになります:
letter | 番号 |
---|---|
X | 0 |
Y | 0 |
X | 1 |
Y | 1 |
X | 2 |
Y | 2 |
ソリューション2:
CROSSJOINを実行する別の方法は次のとおりです。
SELECT * FROM letters, numbers;
これにより、前のクエリで生成されたものとまったく同じ結果が得られます。
ディスカッション:
原則として、CROSS JOIN
あるテーブルのすべての行が別のテーブルのすべての行に結合される結果セットを生成します。つまり、最初のテーブルに nが格納されている場合 行と2番目のテーブルにはmが格納されます 行、次にCROSS JOIN
結果はデカルト積になります n×m 行。これが、上記の例のクエリによって返される6つの行がある理由です。
CROSS JOIN
結合されるテーブル間の行の可能なすべての組み合わせを生成します。関係を指定する必要はありません。したがって、他のJOINs
とは異なり 、ON
はありません CROSS JOIN
の句 。