1 분 소요

MYSQL> JOIN에 대해서

join으로 DB의 서로 다른 여러개의 table을 결합한다. 여러개의 table이 관계를 맺고 있는건 sql에서 가장 중요한 개념이지 않을까 싶다. sql의 DB는 table을 여러개를 가짐으로서 한눈에 모든 정보를 다 볼 수는 없지만, 대신에 table을 수정하는데 엄청난 장점을 가진다. SQL에서는 join이 너무나도 당연하다. ta아래는 유명한 이미지다. 직관적으로 join에 대해서 개념잡는데 도움이 될거다. 자주 봤지만 너무 많은 사람들이 인용하여 그 출처는 나도 모르겠다.

mysql에서는 left join과 left outer join이 같다고 한다. 나는 다르다고 생각했다.

아래와 같이 HackerRank에서 두 개의 table을 join할 경우 어떤 table을 기준으로 잡느냐에 따라서 결과가 완전히 달라질 수 있는 부분을 주의해야 한다. 내 경우 맨처음 Hacker 테이블을 기준 테이블로 잡았으나 사실은 Challenge table을 기준으로 잡는게 맞겠다. table 간의 관계가 모호할 경우 아래처럼 쿼리를 보내서 관계를 파악하는 것도 중요하겠다.

sql에서는 full outer join을 지원하지 않는다. 하지만 left join과 right join을 union 하여 full outer join을 사용할 수 있다.

select * from A left join B 
union 
select * from A right join B

아래 표들은 내가 직접 excel로 만든 것인데 개인적으로 잘 만든거 같다. 혹시나 개념이 틀린 부분이 있으면 댓글 부탁드린다.

<2 different tables>

다시 말하지만 mysql에서는 left join과 left outer join이 결과가 동일하다. NULL 을 제외한 값을 얻으려고 하면 where clause에 null을 제외하는 방법으로 기존에 말하는 left 혹은 right outer join을 구해야 한다.

댓글남기기