728x90
반응형
JOIN을 하다 보면 헷갈릴 때가 많아서 적어본다.
INNER JOIN의 경우 그냥 A.ID = B.ID와 같은데,
정확하게 쓰거나 OUTER JOIN을 여러개 쓸 경우, INNER JOIN을 명시해서 쓰기도 한다.
LEFT OUTER JOIN
LEFT OUTER JOIN의 경우 A테이블을 기준으로 왼쪽에 JOIN조건에 따라 B테이블을 붙인다고 생각하면 된다
SELECT A.*
FROM TABLE A LEFT OUTER TABLE B JOIN ON A.ID = B.ID
WHERE ~~
여기서 JOIN ON 에 즉 조인 조건에 들어갈 건 A와 B PK 조인 또는 unique한 index 조인이나
B테이블이 필요로한 조건을 적어주면 된다.
WHERE절에는 A테이블에 대한 조건을 적어주면 된다.
왜냐햐면 UNIQUE한 값에 따라 조인을 했을 때 두 테이블을 하나로 합친거고,
이 때 WHERE절을 타서 필요한 조건에 따라 특정 ROW를 출력하도록 하기 때문이다.
예를 들면 A, B테이블이 있고 A테이블 기준 B테이블을 LEFT OUTER JOIN한다면
조인 키로 ID를 걸 수 있다.
그리고 B테이블에서 EMAIL이 NULL이 아닌 경우를 뽑고 싶다면
JOIN ON 에 PK인 ID넣고 AND처리 해서 B.EMAIL IS NOT NULL로 추기해서
NULL이 아닌 경우를 제외하고 뽑아낼 수 있다.
3개 테이블 INNER JOIN
INNER JOIN과 LEFT OUTER JOIN을 여러개 쓰는 경우가 있는데,
헷갈릴 경우가 많아서 정리한다.
아래 경우는 3개의 테이블을 INNER JOIN하고 1개 테이블을 LEFT OUTER JOIN 한 것이다.
SELECT (A.id, '') AS id, IFNULL(B.nm, ' ') AS nm, IFNULL(C.phone, ''), IFNULL(D.address, '') AS ad
FROM TABLE1 A
INNER JOIN TABLE2 B ON A.id = B.id
INNER JOIN TABLE3 C ON C.id = A.id
LEFT OUTER JOIN TABLE D ON D.ID = A.ID
WHERE B.age IS NOT NULL;
반응형
'개발자의 개발개발한 하루' 카테고리의 다른 글
VSCode MySQL Extension 설치 및 Query 실행하는 방법 (0) | 2023.03.07 |
---|---|
linux 파일 수정 시간 초시간 상세하게 보는 방법 (1) | 2023.02.21 |
linux text file busy solved (0) | 2022.12.20 |
셀레니움 에러 해결 ElementClickInterceptedException: Message: element click intercepted (0) | 2022.06.20 |
Linux - CronTab cron 설치 명령어 (0) | 2021.07.27 |
댓글