나는 이와 같은 2 개의 테이블을 가지고있다 :
> SELECT * FROM table_a;
+------+------+
| id | name |
+------+------+
| 1 | row1 |
| 2 | row2 |
+------+------+
> SELECT * FROM table_b;
+------+------+------+
| id | name | aid |
+------+------+------+
| 3 | row3 | 1 |
| 4 | row4 | 1 |
| 5 | row5 | NULL |
+------+------+------+
INNER JOIN은 두 테이블을 모두 걱정합니다.
INNER JOIN은 두 테이블을 모두 관리하므로 두 테이블에 하나만있는 경우에만 행을 얻습니다. 일치하는 쌍이 둘 이상 있으면 여러 행이 나타납니다.
> SELECT * FROM table_a a INNER JOIN table_b b ON a.id=b.aid;
+------+------+------+------+------+
| id | name | id | name | aid |
+------+------+------+------+------+
| 1 | row1 | 3 | row3 | 1 |
| 1 | row1 | 4 | row4 | 1 |
+------+------+------+------+------+
순서를 반대로해도 두 테이블에 모두 관심이 있기 때문에 INNER JOIN과 아무런 차이가 없습니다.
> SELECT * FROM table_b b INNER JOIN table_a a ON a.id=b.aid;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 4 | row4 | 1 | 1 | row1 |
+------+------+------+------+------+
동일한 행을 얻지 만 다른 순서로 테이블을 언급했기 때문에 열의 순서가 다릅니다.
LEFT JOIN은 첫 번째 테이블에만 관심이 있습니다.
LEFT JOIN은 첫 번째 테이블에 관심이 있고 두 번째 테이블에 대해서는별로 신경 쓰지 않으므로 두 번째 테이블에 해당하는 행이없는 경우에도 항상 첫 번째 테이블에서 행을 가져옵니다.
> SELECT * FROM table_a a LEFT JOIN table_b b ON a.id=b.aid;
+------+------+------+------+------+
| id | name | id | name | aid |
+------+------+------+------+------+
| 1 | row1 | 3 | row3 | 1 |
| 1 | row1 | 4 | row4 | 1 |
| 2 | row2 | NULL | NULL | NULL |
+------+------+------+------+------+
위에서 table_a의 모든 행을 볼 수 있지만 일부는 테이블 b의 내용과 일치하지 않지만 table_b의 모든 행은 아닙니다-table_a의 내용과 일치하는 행만 볼 수 있습니다.
테이블 순서를 반대로 바꾸면 LEFT JOIN은 다르게 동작합니다.
> SELECT * FROM table_b b LEFT JOIN table_a a ON a.id=b.aid;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 4 | row4 | 1 | 1 | row1 |
| 5 | row5 | NULL | NULL | NULL |
+------+------+------+------+------+
이제 table_b의 모든 행을 얻지 만 table_a의 일치하는 행만 가져옵니다.
RIGHT JOIN은 두 번째 테이블에만 관심이 있습니다.
a RIGHT JOIN b
와 정확히 같은 행을 가져옵니다 b LEFT JOIN a
. 유일한 차이점은 열의 기본 순서입니다.
> SELECT * FROM table_a a RIGHT JOIN table_b b ON a.id=b.aid;
+------+------+------+------+------+
| id | name | id | name | aid |
+------+------+------+------+------+
| 1 | row1 | 3 | row3 | 1 |
| 1 | row1 | 4 | row4 | 1 |
| NULL | NULL | 5 | row5 | NULL |
+------+------+------+------+------+
이것은 table_b LEFT JOIN table_a
LEFT JOIN 섹션에서 보았던 것과 같은 행 입니다.
비슷하게:
> SELECT * FROM table_b b RIGHT JOIN table_a a ON a.id=b.aid;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 4 | row4 | 1 | 1 | row1 |
| NULL | NULL | NULL | 2 | row2 |
+------+------+------+------+------+
와 같은 행 table_a LEFT JOIN table_b
입니다.
전혀 참여하지 않아도 모든 사본이 제공됩니다.
Join 절 없음 : JOIN 절을 전혀 사용하지 않고 쉼표로 구분하여 테이블을 작성하면 첫 번째 테이블의 모든 행이 두 번째 테이블의 모든 행 옆에 가능한 모든 조합으로 작성됩니다.
> SELECT * FROM table_b, table_a;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 3 | row3 | 1 | 2 | row2 |
| 4 | row4 | 1 | 1 | row1 |
| 4 | row4 | 1 | 2 | row2 |
| 5 | row5 | NULL | 1 | row1 |
| 5 | row5 | NULL | 2 | row2 |
+------+------+------+------+------+
(이것은 내 블로그 게시물 에서 SQL 조인 유형의 예입니다 )