본문 바로가기
개발자의 개발개발한 하루

MySQL INNER JOIN과 LEFT OUTER JOIN 하는 방법

by ju니어 2023. 3. 14.
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;

 

 

 

 

 

반응형

댓글