問題:
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の句 。