[SQLD] JOIN

내용
JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
ANSI JOIN
진행일시
2021/07/31
이메일
조사자

1. [ 조인 ( JOIN ) ]

두개 이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만들어 내는 것이다. 한개 이상의 테이블에서 데이터를 조회하기 위해 사용한다.
두 테이블을 묶어서 추출된 결과를 새로운 테이블을 만들어 집어 넣어 보여주는 형식이다. 새로운 테이블은 데이터베이스 딕셔너리에 저장된다.

1-1 [ 조인은 왜 필요할까 ? ]

두개의 테이블이 서로 릴레이션 관계를 맺고 있을때, 반드시 두개의 테이블을 조합해서만 원하는 정보를 얻을 수 있는 상황이 발생했다 치자.
이때, 두 테이블 모두 각각 검색해서 정보를 도출해야한다. 조회를 2번이나 해야한다는 뜻이다.
하지만 JOIN을 사용하면 2번 조회를 거칠 필요없이 한번만 검색을 해도 된다.
두 테이블을 한번에 묶어 보여주기 때문이다.
JOIN은 두개 이상의 테이블을 결합해야만 원하는 결과를 얻을 수 있을때 한번의 검색으로 원하는 결과를 얻을 수 있도록 제공한다.
JOIN의 종류로는 내부조인, 외부조인, 상호조인, 셀프조인, 안시 조인, 동등 조인, 세미 조인, 카타시안 조인이 있다.

2 . [ 내부 조인 ( INNER JOIN) ]

내부 조인은 조인 중에서 가장 많이 사용되는 조인이다. 일반적으로 JOIN이라고 말하면 내부조인이다.

3. 동등 조인 [ Equal JOIN ]

가장 기본이 되며 일반적인 조인 방법이다.
동등 조인은 WHERE절에서 등호('=') 연산자를 사용해 2개 이상의 테이블이나 뷰를 연결한 조인이다.
즉 등호 연산자를 사용한 WHERE절 조건에 만족하는 데이터를 추출하는 조인이다.
이때, WHERE절에 기술한 조건을 조인 조건이라고 한다. 조인 조건은 컬럼 단위로 기술한다.
예시
사원 정보를 출력할 때 각 사원들이 소속된 부서의 상세 정보를 출력하기 위해서 두개의 테이블을 조인할 것이다
SELECT * FROM EMP.DEPT WHERE EMP.DEPT_NO = DEPT.DEPT_NO;
SQL
복사

4. 셀프 조인 ( SELF JOIN )

셀프 조인은 서로 다른 두 테이블이 아닌 동일한 한 테이블을 사용해 조인하는 방법이다.
SELF JOIN이란 말 그대로 자기 자신과 조인을 맺는 것이다.
테이블 한개에서 2가지 이상의 컬럼을 조회할 때, 테이블의 어떤 것들을 조회할 것인지 이름을 지정해줘야 한다.
예시
KING의 사원번호와 매니저번호(MGR)가 같은 사람 모두의 이름과 직업을 출력하라.
SELECT E1.ENAME , E1.JOB FROM EMP E1, EMP E2 WHERE E1.MGR = E2.EMPNO AND E2.ENAME='KING';
SQL
복사
SELECT문에서 같은 테이블 이름을 2개로 나눠서 별칭을 붙여줘서 칼럼들을 구분해줬다.

5. [ 외부 조인 ( OUTER JOIN )

일반 조인을 확장한 개념이다.
조인 조건에 만족하는 데이터 뿐만 아니라, 어느 한 쪽 테이블에 조인 조건에 명시된 컬럼에 값이 없거나(NULL) 해당 로우가 아예 없더라도 데이터를 모두 출력한다.
사원 테이블에 직업이 PRESIDENT인 KING만 매니저번호(MGR)가 빠져있다(NULL). KING은 회사의 사장이므로 MGR 컬럼 값이 NULL이다. KING은 MGR 값이 NULL이 므로 위의 SELF JOIN에서 조건을 만족하지 않아 출력에서 제외되었다.
조인 조건에 만족하지 못했더라도 해당 행을 출력하고 싶을때 사용하는 것이 외부 조인이다.
외부조인은 NULL 값이여서 제외된 행을 결과에 포함시킬 수 있으며 "+" 기호를 조인 조건에서 정보가 부족한 컬럼 이름 뒤에 덧붙인다.
사원 번호(EMPNO)가 NULL인 사원은 없으므로 manager.empno 뒤에 "+" 기호를 덧붙인다.
SELECT employee.ename, manager.ename FROM emp employee, emp manager WHERE employee.mgr = manager.empno(+);
SQL
복사
SQL 결과문
SELF JOIN에선 나오지 않았던 NULL 값이 뜨게 된다.

6 . [ 안시 조인 (ANSI JOIN) ]

안시 조인은 ANSI SQL 문법을 사용한 조인을 말하며, 위에 설명한 모든 조인을 ANSI SQL을 사용해서 변환이 가능하다.
기존 문법과 안시 조인의 차이점은 조인 조건이 WHERE절이 아닌 FROM절에 들어간다는 점이다.
ANSI INNER JOIN(안시 내부 조인)
ANSI 문법
SELECT A.컬럼1 , A.컬럼2 , B.컬럼1 , B.컬럼2... FROM 테이블 A INNER JOIN 테이블 B ON (A.컬럼1 = B.컬럼1) WHERE ... ;
SQL
복사
기존 문법
SELECT A.컬럼1 , A.컬럼2 , B.컬럼1 , B.컬럼2... FROM 테이블 A, 테이블 B WHERE A.컬럼1 = B.컬럼1;
SQL
복사

7. [ LEFT OUTER JOIN ]

LEFT를 붙이면 왼쪽테이블과 오른쪽테이블의 같은것은 전부 출력하고, 다른것은 왼쪽만 출력한다.
DEPT01 테이블의 20번 부서와 조인할 부서번호가 DEPT02에는 없지만, 20번 부서도 출력되도록 하기 위해서 DEPT01 테이블이 왼쪽에 존재하기에 LEFT OUTER JOIN을 사용하자.
SELECT * FROM DEPT01 LEFT OUTER JOIN DEPT02 ON DEPT01.DEPTNO = DEPT02.DEPTNO;
SQL
복사

8. [ RIGHT OUTER JOIN]

RIGHT를 붙이면 왼쪽테이블과 오른쪽테이블의 같은것은 전부 출력하고, 다른것은 오른쪽만 출력한다.
DEPT02 테이블에만 없는 30번 부서까지 출력되도록 하기 위해서 RIGHT OUTER JOIN을 사용하자.
SELECT * FROM DEPT01 RIGHT OUTER JOIN DEPT02 USING(DEPTNO);
SQL
복사

9. [ FULL OUTER JOIN ]

FULL OUTER JOIN은 LEFT OUTER JOIN, RIGHT OUTER JOIN 을 합한 형태라고 볼 수 있다.
개발자 사이에선 잘 쓰지 않는 조인 방법이다.
SELECT * FROM DEPT01 FULL OUTER JOIN DEPT02 USING(DEPTNO);
SQL
복사