###質問内容
2つのテーブルのレコードの総当たり表を出力するためには、下記の3つの方法があると認識しております。
この3つの方法の違いについて教えてください。
パフォーマンスや、クエリ処理される手順、注意すべき点、DBによる違い等々。
方法①:INNER JOIN - ON 1
方法②: CROSS JOIN
方法③: SELECT -, (SELECT -)
また、他に方法があれば、その方法と上記3つの方法との違いについても教えてください。
###2つのテーブル
(TABLE1):
ID | DATA |
---|---|
A | 100 |
B | 101 |
C | 102 |
(TABLE2):
ID | NAME |
---|---|
A | あ |
B | い |
C | う |
###出力結果
DATA | NAME |
---|---|
100 | あ |
101 | あ |
102 | あ |
100 | い |
101 | い |
102 | い |
100 | う |
101 | う |
102 | う |
###方法① INNER JOIN - ON 1 | |
```SQL | |
SELECT T1.DATA, T2.NAME FROM TABLE1 T1 | |
INNER JOIN TABLE2 T2 on 1 | |
``` | |
###方法② CROSS JOIN | |
```SQL | |
SELECT T1.DATA, T2.NAME from TABLE1 T1 | |
CROSS JOIN TABLE2 T2 | |
``` | |
###方法③ SELECT -, (SELECT -) | |
```SQL | |
SELECT T1.DATA, T2.NAME FROM TABLE1 T1, | |
(SELECT NAME FROM TABLE2) T2 | |
``` | |
###前提条件 | |
現環境はMySQLを用いています。が、他のDBも扱うため他のDBでのことについても知りたいです。 | |
TABLE1, TABLE2 は下記でCREATE, INSERTしています。 |
SQL
1CREATE TABLE `TABLE1` ( 2 `ID` char(2) NOT NULL, 3 `DATA` int(4) DEFAULT NULL, 4 PRIMARY KEY (`ID`) 5) 6INSERT INTO `TABLE1` VALUES 7('A',100), 8('B',101), 9('C',102);
SQL
1CREATE TABLE `TABLE2` ( 2 `ID` char(2) NOT NULL, 3 `NAME` char(4) DEFAULT NULL, 4 PRIMARY KEY (`ID`) 5) 6INSERT INTO `TABLE2` VALUES 7('A','あ'), 8('B','い'), 9('C','う');
回答2件
あなたの回答
tips
プレビュー