0
SELECT *
FROM   table1,
       table2; 

どのような出力が得られるか知りたいですか?JOINSとも呼ばれますか?

4

2 に答える 2

2

これにより、テーブル 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 の反対側に一致する行がない場合でも、結合の一方の側が返されます。

于 2013-10-20T16:56:53.090 に答える
2

これは CARTESIAN JOIN と呼ばれます。table1 のすべての行を table2 のすべての行と結合します。

これは、ほとんどの場合、クエリの書き込みエラーの結果です。無関係なデータを結合することは、非常にまれな操作です。

于 2013-10-19T18:30:36.370 に答える