SELECT *
FROM table1,
table2;
どのような出力が得られるか知りたいですか?JOINSとも呼ばれますか?
これにより、テーブル 1 の行の列とテーブル 2 の列のすべての組み合わせが得られます。
部門テーブルと従業員テーブルがあり、従業員が所属する部門の ID を格納できるとします。
EMPLOYEES
ID FORENAME SURNAME DEPARTMENT_ID
1 A X 1
2 B Y 1
3 C Z 2
DEPARTMENTS
ID NAME
1 Department 1
2 Department 2
クエリを実行すると、デカルトが実行されます。
ID NAME FORENAME SURNAME DEPARTMENT_ID
1 Department 1 A X 1
1 Department 1 B Y 1
1 Department 1 C Z 2
2 Department 2 A X 1
2 Department 2 B Y 1
2 Department 2 C Z 2
部門の行ごとに、各従業員の製品を取得します。3x2 行を取得します。
条件に基づいてテーブルを「結合」するようにクエリを変更すると、この場合、従業員に保存されている department_id が次のようになります。
SELECT *
FROM departments d
JOIN employees e ON d.id = e.department_id
ID NAME FORENAME SURNAME DEPARTMENT_ID
1 Department 1 A X 1
1 Department 1 B Y 1
2 Department 2 C Z 2
意図したとおり、3 行になりました。部門 1 については、部門 1 の列と、部門に一致する/結合する 2 人の従業員の列を取得します。次に、部門 2 の列と、JOIN できる従業員行の列を取得します。
部門に一致する従業員がいない場合、その部門はまったく表示されません。これは OUTER JOIN が使用される場所であり、JOIN の反対側に一致する行がない場合でも、結合の一方の側が返されます。
これは CARTESIAN JOIN と呼ばれます。table1 のすべての行を table2 のすべての行と結合します。
これは、ほとんどの場合、クエリの書き込みエラーの結果です。無関係なデータを結合することは、非常にまれな操作です。