헤깔리는 join 문법 정리

나이가 드는건가... 아니면 편하게 썼던 Oracle에 너무 익숙했던 탓인가...


Query를 짜는데... Join 절이 헤깔린다. ㅜ.ㅜ


join 절은 어떻게 사용하느냐에 따라 성능차이가 현격하게 차이나는 조건절 중 하나이다.


용도별로 적절하게 사용하여야 하는지에 대해서 이참에 제대로 된 문법도 되뇌일겸... 정리도 해놓고 


기록도 해놓을겸 포스팅한다.





1. Left Join (A)



SELECT *

 FROM TableA a

  LEFT JOIN TableB b

    ON a.Key = b.Key









2. Left Join (A-B)

      SELECT *

       FROM TableA a

  LEFT JOIN TableB b ON a.Key = b.key

     WHERE b.Key IS NULL










3. Right Join (B-A)

     SELECT *

       FROM TableA a

RIGHT JOIN TableB b ON a.Key = b.Key

      WHERE b.Key IS NULL










4. Right Join (B)

      SELECT *

       FROM TableA a

RIGHT JOIN TableB b ON a.Key = b.Key













5. Inner Join (A^B)

      SELECT *

       FROM TableA a

INNER JOIN TableB b ON a.Key = b.Key



--> SELECT * FROM Table a, Table b Where a.Key = b.Key









6. Full Join (A+B) - (A^B)

    SELECT *

     FROM TableA a

FULL JOIN TableB b On a.Key = b.Key

    WHERE b.Key IS NULL 

          OR a.Key IS NULL


              SELECT *

               FROM TableA a

FULL OUTER JOIN TableB b ON a.Key = b.Key

              WHERE a.Key IS NULL

                   OR b.Key IS NULL







7. Full Join (A+B)

    SELECT *

     FROM TableA a

FULL JOIN TableB b ON a.Key = b.Key



              SELECT *

               FROM TableA a

FULL OUTER JOIN TableB b ON a.Key = b.Key









뭐... DB마다 조금씩 다르기는 하겠지만 표준 문법을 포스팅 한다는 의미에서의 글이다.


MySQL / MariaDB의 경우 Full Outer Join을 지원하지 않는다.


뭐... 무료 DB니까... 그정도는 사용자가 알아서 만들어서 사용하라는 거룩한 계시일까? ㅎㅎㅎ



SELECT * FROM TableA a LEFT JOIN TableB b

UNION

SELECT * FROM TableA a RIGHT JOIN TableB b






기타 DB별 지원하고 미지원하는 것들은 그때그때 프로젝트마다 구분해서 사용하여야 할듯~!!!