작성완료

MySQL JOIN
JOIN은 여러 테이블의 레코드를 조합하여 결과 집합을 생성하며, INNER JOIN, LEFT JOIN, RIGHT JOIN의 세 가지 주요 유형이 있다. INNER JOIN은 조건에 맞지 않는 레코드를 제외하고, LEFT JOIN은 첫 번째 테이블 기준으로 조합하며 조건에 맞지 않는 필드는 NULL로 표시된다. RIGHT JOIN은 두 번째 테이블 기준으로 조합하며, 마찬가지로 조건에 맞지 않는 필드는 NULL로 나타난다.
JOIN
JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현해 준다.
특징
JOIN은 보통SELECT문과 함께 자주 사용된다.JOIN은ON절과 함께 사용되며,ON절의 조건을 만족하는 데이터만 가져온다.ON절에서는WHERE절에서 사용할 수 있는 모든 조건을 사용할 수 있다.- 표준 SQL과는 달리 MySQL에서는
JOIN,INNER JOIN,CROSS JOIN이 모두 같은 의미로 사용된다.
문법
SELECT *
FROM 첫 번째 테이블
[INNER | LEFT | RIGHT] JOIN 두 번째 테이블
ON 조건
종류
INNER JOINLEFT JOINRIGHT JOIN
tb_user테이블
| ID | NAME | AGE | ADDR_ID |
|---|---|---|---|
| 1 | 홍길동 | 26 | 1 |
| 2 | 홍길순 | 24 | 3 |
| 3 | 홍길동 | 31 | 7 |
| 4 | 유관순 | 27 | 8 |
tb_addr 테이블
| ID | ADDR |
|---|---|
| 1 | 서울 |
| 2 | 부산 |
| 3 | 인천 |
| 4 | 광주 |
| 5 | 울산 |
| 6 | 대구 |
| 7 | 대전 |
INNER JOIN
SELECT tb_user.NAME, tb_addr.ADDR
FROM tb_user
INNER JOIN tb_addr
ON tb_user.ADDR_ID = tb_addr.ID
| NAME | ADDR |
|---|---|
| 홍길동 | 서울 |
| 김유신 | 인천 |
| 이순신 | 대전 |
위 결과와 같이
INNER JOIN은ON절의 조건에 맞지 않는 레코드는 아예 나오지 않는다.
LEFT JOIN
LEFT JOIN은 첫 번째 테이블을 기준으로, 두 번째 테이블을 조합하는 JOIN이다.
SELECT tb_user.NAME, tb_addr.ADDR
FROM tb_user
LEFT JOIN tb_addr
ON tb_user.ADDR_ID = tb_addr.ID
| NAME | ADDR |
|---|---|
| 홍길동 | 서울 |
| 김유신 | 인천 |
| 이순신 | 대전 |
| 유관순 | NULL |
위 결과와 같이
LEFT JOIN은ON절의 조건에 맞지 않는 필드의 값은NULL이다.
RIGHT JOIN
RIGHT JOIN은 두 번째 테이블을 기준으로, 첫 번째 테이블을 조합하는 JOIN이다.
SELECT tb_user.NAME, tb_addr.ADDR
FROM tb_user
RIGHT JOIN tb_addr
ON tb_user.ADDR_ID = tb_addr.ID
| NAME | ADDR |
|---|---|
| 홍길동 | 서울 |
| 김유신 | 인천 |
| 이순신 | 대전 |
| 유관순 | NULL |
위 결과와 같이
RIGHT JOIN은ON절의 조건에 맞지 않는 필드의 값은NULL이다.