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
반응형
'🌏 DataBase > MySQL' 카테고리의 다른 글
[MySQL] 전문 검색 기능 : FullText Search (4) | 2023.10.27 |
---|---|
[DB] Subquery (서브쿼리) 사용법 / select문 안에 select문 (0) | 2021.03.24 |
[DB] 13.PL/SQL (0) | 2020.11.06 |
[DB] 12. 뷰(VIEW) (Feat.Oracle) (0) | 2020.11.05 |
[DB] 11. JPA(Java Persistent API) (Feat.Oracle) & Entity (0) | 2020.11.05 |