두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것을 의미한다.
조인이 필요한 이유는 정규화에서 출발한다.
정규화란 불필요한 데이터의 정합성을 확보하고 이상현상 발생을 피하기 위해, 테이블을 분할하여 생성하는 것을 말한다.
-- Inner Join 예시
SELECT e.EMPLOYEE_ID, e.FIRST_NAME, e.DEPARTMENT_ID, d.DEPARTMENT_ID, d.DEPARTMENT_NAME
FROM EMPLOYEES e
INNER JOIN DEPARTMENTS d ON e.DEPARTMENT_ID = d.DEPARTMENT_ID
ORDER BY e.EMPLOYEE_ID ;
위 예시는 SQL 개발도구 DBeaver 에 저장되어있는 DEPARTMENTS 테이블에 있는 칼럼중 데이터 하나를 Employee테이블로 끌어 와서 같이 출력 하기 위함이다.
그 밑에 캡쳐본은 EMPLOYEES테이블과 그 줄기 테이블들에 대한 엔티티 관계도 중 일부이다.
앞서 언급했듯이 두개의 테이블에 하나라도 같은 컬럼이 있어야 하며, DEPARTMENT_ID(캡쳐본 내 빨간밑줄)가 두개의 테이블을 이어주는 칼럼이다.
해당 개발도구에 EMPLOYEES 테이블은 'e', DEPARTMENTS 'd' 로 기본지정 되어있는 점을 참고하여, 위 코드를 해석한다면,
EMPLOYEES 테이블을 참고하여, EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID 칼럼들의 데이터를 출력하며, DEPARTMENTS 테이블에 속해있는 DEPARTMENT_ID, DEPARTMENT_NAME 칼럼을 끌어와서 데이터를 같이 출력하라는 의미이다.
조인 조건에 일치하는 데이터 및 일치하지 않은 데이터를 모두 select한다.
조인 조건에 일치하는 데이터가 없다면 NULL로 가져온다.
Outer Join은 Inner Join과는 다른게 주(main) 테이블이 어떤
테이블인지가 중요하다. 그래서 어떤 테이블이 중심이 되느냐에 따라 다시
Left Outer Join, Right Outer Join, Full Outer Join 으로
세 분류 할 수 있다.
Left Outer Join은 왼쪽에 있는 테이블이,
Right Outer Join은 오른쪽에 있는 테이블이
Full Outer Join은 양쪽 테이블 모두가 중심이라는 뜻이다.
3-1. Left Outer Join
왼쪽 테이블이 기준이 된다.
조인 조건에 부합하는 데이터가 조인 당하는 테이블(오른쪽)에 있으면 해당
데이터를, 부재하면 Null select 된다
-- LEFT OUTER JOIN 예시
SELECT e.DEPARTMENT_ID, d.DEPARTMENT_ID
FROM EMPLOYEES e
LEFT OUTER JOIN DEPARTMENTS dON e.DEPARTMENT_ID = d.DEPARTMENT_ID ;
위 Inner Join 에서 언급했던거와 마찬가지로 DEPARTMENTS 테이블에 있는 칼럼중 데이터 하나를 Employee테이블로 끌어 와서 출력하는 형태이다.
EMPLOYEES 테이블을 참고하여, EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID 칼럼들의 데이터를 출력하며, DEPARTMENTS 테이블에 속해있는 DEPARTMENT_ID, DEPARTMENT_NAME 칼럼을 끌어와서 데이터를 같이 출력하라는 의미이다.
LEFT OUTER JOIN 말그대로 왼쪽 기준 e.DEPARTMENT_ID 즉 기준으로 구성되어 출력된다.
-> e.DEPARTMENT_ID 값이 '90' 일때 d.DEPARTMENT_ID 은 '??' 이 나온다.
3-2. Right Outer Join
-- RIGHT OUTER JOIN 예시
SELECT e.DEPARTMENT_ID, d.DEPARTMENT_ID
FROM EMPLOYEES e
RIGHT OUTER JOIN DEPARTMENTS dON e.DEPARTMENT_ID = d.DEPARTMENT_ID ;
계속 언급했던거와 마찬가지로 DEPARTMENTS 테이블에 있는 칼럼중 데이터 하나를 Employee테이블로 끌어 와서 출력하는 형태이다.
EMPLOYEES 테이블을 참고하여, EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID 칼럼들의 데이터를 출력하며, DEPARTMENTS 테이블에 속해있는 DEPARTMENT_ID, DEPARTMENT_NAME 칼럼을 끌어와서 데이터를 같이 출력하라는 의미이다.
RIGHT OUTER JOIN 말그대로 왼쪽 기준 d.DEPARTMENT_ID 즉 기준으로 구성되어 출력된다.
-> d.DEPARTMENT_ID 값이 '90' 일때 e.DEPARTMENT_ID 은 '??' 이 나온다.
3-3.full outer join