MySQL

JOIN

mintuchel 2024. 10. 19. 03:36

보통 일반 JOIN (INNER JOIN) 과 LEFT JOIN 만 사용한다.

일반 JOIN으로 실제 겹치는 놈들만 뽑거나

LEFT JOIN으로 왼쪽 테이블을 기준으로 삼되, 오른쪽 테이블에 짝이 없으면 NULL로 채워서라도 왼쪽 데이터는 다 살린다.

 

RIGHT JOIN은 테이블 순서만 바꾸면 LEFT JOIN과 동일하니 LEFT JOIN으로 퉁치고,

CROSS_JOIN은 카테시안 곱인데 진짜 쓸일이 없다.

 

따라서 INNER JOIN과 LEFT JOIN이 제일 중요하다.

 

  1. INNER JOIN
    1. 양쪽 테이블에 연관된 놈들끼리만 합침
    2. ON 절을 만족하는 칼럼들끼리만 합침
  2. LEFT JOIN
    1. 왼쪽 테이블에 있는 row들은 전부 다 표현한다.
    2. 왼쪽 테이블의 row들 중 오른쪽 테이블과 매칭되지 않는 row들도 모두 표현함!
    3. 오른쪽 테이블과 매칭되지 않는 왼쪽 테이블 Row의 칼럼은 모두 NULL로 표현된다.
    4. LEFT JOIN이 LEFT OUTER JOIN이다!
  3. OUTER JOIN
    1. LEFT JOIN, RIGHT JOIN이다
    2. 왼쪽 테이블 또는 오른쪽 테이블은 무조건 다 표현한다
  4. CROSS JOIN
    1. 카테시안 곱 (Cartesian Product)
    2. 왼쪽 테이블 row 하나 당 오른쪽의 모든 row와 엮어 표현한다.

 


[INNER JOIN]

ON 절에 대한 교집합에 해당하는 Row들만 따로 내놓는다.

SELECT customer_name
FROM borrower
JOIN loan
ON borrower.loan_number = loan.loan_number;

SELECT *
FROM borrower
INNER JOIN loan
ON borrower.loan_number = loan.loan_number;

 

NATURAL JOIN은 자동 INNER JOIN 이라고 생각하면 된다.

공통된 칼럼을 알아서 찾아서 INNER JOIN 시켜준다.

 


[LEFT JOIN]

 

왼쪽 테이블은 모두 다 살린 채 JOIN 해준다.

ON 절에 맞는 오른쪽 테이블에서 매칭된 애들만 표현한다.

 

https://school.programmers.co.kr/learn/courses/30/lessons/299305

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


[CROSS JOIN]

 
카테시안 곱이다.

실제로는 별로 안쓴다.

카테시안 곱을 할 이유도 없고 테이블이 너무 커 하면 테이블이 폭발해버린다.

 


[NATURAL JOIN]
 

공통된 칼럼을 알아서 찾아서 INNER JOIN 시켜줌
INNER JOIN의 한 종류이다
 

SELECT *
FROM borrower
NATURAL JOIN loan;

 


[OUTER JOIN]

굳이 OUTER JOIN을 사용하지 않는다.
LEFT JOIN이 곧 OUTER JOIN이기 때문이다.

 
매칭되는 행이 없어도 결과에 포함시키고, 없는 경우 NULL로 표시해준다.

 

LEFT JOIN = LEFT OUTER JOIN

RIGHT JOIN = RIGHT OUTER JOIN

 

FULL OUTER JOIN은 왼쪽, 오른쪽 Row를 모두 살린다.

그러면서 왼쪽 테이블과 오른쪽 테이블에서 서로 매칭되는 애들만 합쳐준다.

 


[FULL OUTER JOIN vs CROSS JOIN]

 

  • FULL OUTER JOIN (대통합): "야, 우리 식구든 저쪽 식구든 일단 다 모아봐. 근데 같은 놈들끼리는 줄 맞춰서 서고, 짝 없는 놈들은 그냥 혼자 서 있어라." (연결 고리 있음)
  • CROSS JOIN (무대포): "명분이고 뭐고 필요 없다. 그냥 다 엉겨 붙어! 한 명당 상대방 전부랑 한 번씩 다 악수해!" (연결 고리 없음)