🌏 DataBase/MySQL
[DB] JOIN 정리 ( INNER / LEFT / RIGHT )
ryang x2
2021. 6. 25. 11:19
728x90
반응형

# JOIN
둘 이상의 테이블을 연결해서 데이터를 검색하는 방법
연결하려는 테이블들이 적어도 하나의 컬럼을 공유하고 있어야 한다.
이 공유하고 있는 컬럼을 PK 또는 FK 값으로 사용 한다.

1. INNER JOIN : 내부조인 -> 교집합
2. LEFT / RIGHT JOIN -> 부분집합
● 예시
TABLE A
| ID | NAME |
| 1 | 김철수 |
| 2 | 이나영 |
| 3 | 삼순이 |
TABLE B
| ID | GENDER |
| 1 | 남 |
| 2 | 여 |
| 4 | 여 |
| 5 | 남 |
1. INNER JOIN
- 교집합, 공통적인 부분만 SELECT

| ID | NAME | GENDER |
| 1 | 김철수 | 남 |
| 2 | 이나영 | 여 |
SELECT A.ID, A.NAME, B.GENDER
FROM A
INNER JOIN B
ON A.ID = B.ID;
2. LEFT JOIN
- 조인 기준 왼쪽에 있는거 '전부' SELECT ( 공통적인 부분 + LEFT에 있는것만 )

| ID | NAME | GENDER |
| 1 | 김철수 | 남 |
| 2 | 이나영 | 여 |
| 3 | 삼순이 | NULL |
SELECT A.ID, A.NAME, B.GENDER
FROM A LEFT JOIN B
ON A.ID = B.ID;
2-1. 조인 기준 왼쪽에 있는것'만' SELECT (A-B)
- LEFT가 가지고 있는 것 중 공통적인 부분을 제외한 값
- LEFT JOIN 값 중에서 WHERE 조건으로 NULL인 값을 조회 하면 B가 NULL의 값을 가지고 있는 A의 값을 가지고 온다

| ID | NAME | GENDER |
| 3 | 삼순이 | NULL |
SELECT A.ID, A.NAME, B.GENDER
FROM A LEFT JOIN B
ON A.ID = B.ID
WHERE B.ID IS NULL;
( 쉽게 생각하면, A를 기준으로 LEFT JOIN 하고 , 겹치는 쪽을 빼기 위해서는 반대쪽 KEY NULL 하면 된다. )
3. RIGHT JOIN
- 조인 기준 오른쪽에 있는 부분 '전부' SELECT

| ID | NAME | GENDER |
| 1 | 김철수 | 남 |
| 2 | 이나영 | 여 |
| 4 | NULL | 여 |
| 5 | NULL | 남 |
SELECT A.ID, A.NAME, B.GENDER
FROM A RIGHT JOIN B
ON A.ID = B.ID;
3-1. 공통적인 부분 제외 조인기준 오른쪽에 있는 부분만 SELECT (B-A)
- RIGHT가 가지고 있는 것 중 공통적인 부분을 제외한 값
- RIGHT JOIN 값 중에서 WHERE 조건으로 NULL 인 값을 조회

| ID | NAME | GENDER |
| 4 | NULL | 여 |
| 5 | NULL | 남 |
SELECT A.ID, A.NAME, B.GENDER
FROM A RIGHT JOIN B
ON A.ID = B.ID
WHERE A.ID IS NULL;
( 쉽게 생각하면, B를 기준으로 LEFT JOIN 하고 , 겹치는 쪽을 빼기 위해서는 반대쪽 KEY NULL 하면 된다. )
4. JOIN
- A, B 테이블 전부 SELECT

| ID | NAME | GENDER |
| 1 | 김철수 | 남 |
| 2 | 이나영 | 여 |
| 3 | 삼순이 | NULL |
| 4 | NULL | 여 |
| 5 | NULL | 남 |
SELECT A.ID, A.NAME, B.GENDER
FROM A JOIN B
ON A.ID = B.ID;
4-1. 공통적인 부분을 제외하고 오른쪽 / 왼쪽에 있는 것만 SELECT

| ID | NAME | GENDER |
| 3 | 삼순이 | NULL |
| 4 | NULL | 여 |
| 5 | NULL | 남 |
SELECT A.ID, A.NAME, B.GENDER
FROM A JOIN B
ON A.ID = B.ID
WHERE A.ID IS NULL OR B.ID IS NULL;
728x90
반응형