SQL을 활용한 데이터 분석
JOIN
카테고리 : SQL을 활용한 데이터 분석
JOIN
조인의 필요성
- 특정 부서 번호에 대한 부서이름은 무엇인지는 부서(DEPT) 테이블에 있다. 특정 사원에 대한 부서명을 알아내기 위해서는 부서 테이블에서 정보를 얻어 와야 한다.
- SCOTT인 사원이 소속되어 잇는 부서의 이름이 무엇인지 알아보려고 한다.
- SCOTT이란 사원의 부서명을 알아내는 일 역시 사원 테이블에서 SCOTT이 소속된 부서 번호를 알아낸 후에 부서 테이블에서 해당 부서 번호에 대한 부서명을 얻어와야 한다.
- SQL에서는 두 개 이상의 테이블을 결합해야만 원하는 결과를 얻을 수 있을 때 한 번의 질의로 원하는 겨로가를 얻을 수 있는 조인 기능을 제공한다.
Cross Join
SELECT 부서명, 이름
FROM 부서, 사원
- 각 부서에 대하여 모든 사원을 연결
- 결과 건수 : 부서 * 사원
- Cross Join이란 WHERE 절 없이 SELECT 문의 FROM 절에 사원(EMP) 테이블과 부서(DEPT) 테이블을 콤마로 연결하는 것이다.
- Cross Join의 결과 얻어지는 컬럼의 수는 사원 테이블의 컬럼의 수와 부서의 테이블의 컬럼의 수를 더한것이다. 로우 수는 사원 한명에 대하여 DEFT 테이블의 로우와 결합된다.
- Cross Join의 결과를 보면 사원 테이블에 부서에 대한 상세정보가 결합되긴 했지만, 조인 될 때 아무런 조건을 제시 하지 않았기에 사원 한명에 대해서 DEPT 테이블의 로우와 결한 된 형태이기에 Cross Join을 결과는 아무런 의미를 갖지 못한다.
- 조인 결과가 의미를 갖으려면 조인할 때 조건을 지정해야 한다.
조인의 종류
- 조인 조건에 따라 조인의 종류가 결정되는데 다음은 조인의 종류를 정리한 표이다.
종류 | 설명 |
---|---|
Equi Join | 동일 컬럼을 기준으로 조인한다. |
Non-Equi Join | 동일 컬럼이 없이 다른 조건을 사용하여 조인한다. |
Outer Join | 조인 조건에 만족하지 않은 행도 나타낸다. |
Seif Join | 한 테이블 내에서 조인한다. |
Equi Join
- Equi Join은 가장 많이 사용하는 조인 방법으로서 조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 일치되는 행을 연결하여 결과를 생성하는 조인 방법이다.
Non-Equi Join
- Non-Equi Join은 조인 조건에 특정 범위 내에 있는지를 조사하기 위해서 WHERE 절에 조인 조건을 = 연산자 이외의 비교 연산자를 사용한다.
Self Join
- 조인은 두 개 이상의 서로 다른 테이블을 서로 연결하는 것뿐만 아니라, 하나의 테이블 내에서 조인을 해야만 원하는 자료를 얻는 경우가 생긴다.
- Self Join 은 말 그대로 자기 자신과 조인을 맺는 것을 말한다.
Outer Join
- 조인 조건에 만족하지 못하였더라도 해당 로우를 나타내고 싶을 때에 사용하는 것이 외부 조인(Outer Join)이다.
- 외부 조인은 NULL 값이기에 배제된 행을 결과에 포함시킬 수 있으며 “(+)” 기호를 조인 조건에서 정보가 부족한 컬럼 이름 뒤에 덧붙인다.
Enhanced Oracle Native LEFT OUTER JOIN
- 12c 부터 두 개의 테이블과 Outer 조인이 가능하다.
- 11g 아하 버전에서 테이블 두 개와 Outer 조인을 시도하면 오류가 발생한다.
ANSI Natural Join
- 두 테이블에 각각 조인을 정의한 컬럼의 이름과 타입이 동일하다면 별도로 명시하지 않아도 자동으로 조인에 사용한다.
- 동일한 이름을 갖는 컬럼의 데이터 타입이 다를 때 에러 발생한다.
ANSI Inner Join
- 두 테이블에 각각 조인을 정의한 컬럼의 이름이 동일하다면 USING 절에서 조인할 컬럼을 지정하여 구문을 더 간단하게 표현할 수 있다.
- ON을 이용한 조인 조건 지정하기
- FROM 다음에 INNER JOIN 이란 단어를 사용하여 조인할 테이블 이름을 명시하고 ON 절을 사용하여 조인 조건을 명시하여 작성한다.
- ANSI 조인에서는 조인 정보를 ON 절에 기술하여 조인 조건을 명확하게 지정하고 다른 조건에 대해서는 WHERE 구문에서 지정하면 된다.
ANSI Outer Join
- 새로운 ANSI 구문에서 Outer Join은 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN 세 가지 타입의 조인을 제공한다.
- Outer Join은 이미 설명했듯이 어느 한쪽 테이블에는 해당하는 데이터가 존재하는데 다른 쪽 테이블에는 데이터가 존재하지 않을 경우 그 데이터가 출력되지 않는 문제점을 해결하기 위해 사용하는 조인 기법이다.