왜 알아야 할까요?
관계형 데이터베이스에서는 데이터 정합성과 저장 공간의 절약을 위해 엔터티를 최대한 분리하는 작업을 수행하고 이러한 작업을 정규화라 부른다. 이런 정규화를 거치면 엔터들이 여러개의 테이블로 쪼개진다. 이렇게 흩어진 데이터를 연결하여 원하는 데이터를 가져오는 작업이 바로 JOIN이다.
따라서 흩어져 있는 테이블들의 정보를 조합해서 원하는 데이터를 올바르게 조회하기 위해서는 JOIN을 반드시 이해해야 한다.
그래서 JOIN 이 뭔가요?
ANSI/ISO 표준으로 정의된 FROM 절의 JOIN의 형태는 다음과 같다.
각각의 개념들에 대해서 알아보자
JOIN 조건에서 동일한 값이 있는 행만 반환한다.
USING/ON 을 반드시 사용해야 한다.
두 테이블간의 동일한 이름을 갖는 모든 칼럼들에 대해서 EQUI JOIN을 수행한다.
NATURAL JOIN을 사용할 경우 USING, ON등을 사용할 수 없다.
🛑 INNER JOIN vs NATURAL JOIN 🛑
NATURAL JOIN은 JOIN에 사용된 같은 이름의 칼럼을 하나로 처리하지만 INNER JOIN의 경우는 2개의 칼럼으로 표시된다.
USING 조건절을 이용한 EQUI JOIN에서도 NATURAL JOIN과 같이 JOIN 컬럼에 대해서는 ALIAS나 테이블 이름과 같은 접두사를 붙일 수 없다.
FROM TABLE_A JOIN TABLE_B
USING(EXP1, EXP2)
와 같이 사용했다면
SELECT TABLE_A.EXP1, TABLE_A.EXP
와 같이 사용하는 것이 불가능 하다!
임의의 조건을 지정
이름이 다른 칼럼명을 JOIN 조건으로 사용
JOIN 칼럼명을 명시
다음과 같은 3가지 경우에 사용한다. ALIAS나 테이블명과 같은 접두사를 사용하여 SELECT에 사용되는 칼럼을 논리적으로 명확하게 지정해야한다.
테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말한다.
JOIN 조건에서 동일한 값이 없는 행도 반환할때 사용할 수 있다.
USING, ON 조건절을 필수적으로 수행해야 한다.
FROM TABLE_LEFT LEFT OUTER JOIN TABLE_RIGHT
좌측 테이블(TABLE_A)에 해당하는 데이터를 먼저 읽는다.
우측 테이블(TABLE_B)에서 JOIN 대상 데이터를 읽어 온다.
A와 B를 비교해서 B의 JOIN 칼럼에서 같은 값이 있을 때 해당 데이터를 가져온더.
B의 JOIN 칼럼에서 얻은 같은 값이 없는 경우에는 B테이블에서 가져오는 칼럼들을 NULL 값으로 채운다.
쉽게 말해서 TABLE_LEFT의 데이터는 일단 다 보여주되 B와 매칭 되는 컬럼들은 매칭해서 보여주고 그렇지 않은 컬럼들은 NULL로 채워서 보여달라는 의미.
FROM TABLE_LEFT RIGHT OUTER JOIN TABLE_RIGHT
FROM TABLE_RIGHT LEFT OUTER JOIN TABLE_LEFT
➡️ 둘의 결과는 같다.
LFET OUTER JOIN 과 RIGHT OUTER JOIN을 모두 수행
단, 중복된 데이터는 없다.