08. 여러 테이블을 하나의 테이블처럼 사용하는 조인
08-2. 조인 종류
두 개 이상의 테이블을 하나의 테이블처럼 가로로 늘어뜨려 출력하기 위해 사옹하는 조인은 대상 데이터를 어떻게 연결하느냐에 따라 아래와 같이 구분함.
- 등가 조인
- 비등가 조인
- 자체 조인
- 외부 조인
[등가 조인]
- 테이블을 연결한 후, 출력 행을 각 테이블의 특정 열에 일치한 데이터를 기준으로 선정하는 방식.
- 내부 조인(inner join), 단순 조인(simple join)으로 부르기도 함.
- 일반적으로 가장 많이 사용되는 조인 방식.
여러 테이블의 열 이름이 같을 때 유의점
조인 조건이 되는 각 테이블의 열 이름이 같을 경우, 해당 열 이름을 테이블 구분 없이 명시하면 오류 발생.
따라서 아래와 같이 어느 테이블의 열인지 명시 필요.(실무에서는 겹치지 않는 열 이름이라도 대부분 모두 명시함)
WHERE절에 조건식 추가하여 출력 범위 설정하기
조인 테이블 개수와 조건식 개수의 관계
조건은 반드시 최소 (테이블 개수-1)개 만큼 필요함.
(예를 들어, 테이블이 A, B, C라면 A와 B를 연결해 줄 열 하나, A와 B가 연결된 상태에서 C를 연결해 줄 열 하나가 추가로 더 필요.)
[비등가 조인]
등가 조인 방식 외의 방식.
- 사원 정보와 급여 등급 정보를 함께 출력할 때
SALGRADE 테이블은 각 급여 등급의 기준이 되는 최소 금액 및 최대 금액을 저장하고 있기 때문에,
열의 일치 여부를 기준으로 테이블을 조인하는 등가 조인 방식이 아닌 비등가 조인 방식을 사용함.
*BETWEEN은 같다(=)를 포함.
[자체 조인]
하나의 테이블을 여러 개의 테이블처럼 활용하여 조인하는 방식.
- EMP 테이블의 사원 정보와 해당 사원의 직속 상관의 사원 번호를 나란히 함께 출력하기
* EMP 테이블은 14개의 행이 존재하나, 위 결과의 행 수는 13개임.
KING 데이터의 MGR 열 값이 NULL임에 따라(최고 직급으로 상급자가 없음), EMP 테이블의 MGR 열과 일치한 EMPNO를 가진 행이 존재하지 않아 최종 출력에서 제외됐기 때문.
[외부 조인(outer join)]
외부 조인은 아우터 조인이라고 더 많이 부르며, 면접 질문으로 자주 나오기 때문에 개념과 사용법 꼭 숙지하기
외부 조인(outer join)을 사용하는 이유
위의 자체 조인 결과값을 보면 조인 조건 데이터 중 어느 한쪽이 NULL이면 최종 출력에서 제외되는데, 이를 포함시켜 결과를 출력하고 싶을 때 사용.
외부 조인(outer join)의 종류
왼쪽 외부 조인(Left Outer Join) | 왼쪽 열 모두 출력 | WHERE TABLE1.COL1 = TABLE2.COL1(+) |
오른쪽 외부 조인(Right Outer Join) | 오른쪽 열 모두 출력 | WHERE TABLE1.COL1(+) = TABLE2.COL1 |
*왼쪽 외부 조인(Left Outer Join): 왼쪽 열을 기준으로 오른쪽 열의 데이터 존재 여부에 상관없이 출력
오른쪽 외부 조인(Right Outer Join): 오른쪽 열을 기준으로 왼쪽 열의 데이터 존재 여부에 상관없이 출력
*조인 이름과 (+) 기호 위치가 반대임.
- EMP 테이블의 사원 정보와 해당 사원의 직속 상관의 사원 번호를 나란히 함께 출력하기
1) 왼쪽 외부 조인(Left Outer Join) 사용
*왼쪽 열 모두 출력. 즉, 상급자가 존재하지 않는 사원까지 모두 출력.
2) 오른쪽 외부 조인(Right Outer Join) 사용
*오른쪽 열 모두 출력. 즉, 부하직원이 없는 가장 직책이 낮은 사원까지 모두 출력.
'빅데이터 > Oracle SQL | Do it! 오라클로 배우는 데이터베이스 입문' 카테고리의 다른 글
[오라클로 배우는 데이터베이스 입문 | 08장 여러 테이블을 하나의 테이블처럼 사용하는 조인] 문제 풀이 (p239) (0) | 2023.02.28 |
---|---|
조인 | SQL-99 조인 (NATURAL JOIN / JOIN ~ USING / JOIN ~ ON / OUTER JOIN) (0) | 2023.02.27 |
조인 | 집합 연산자와 조인의 차이점 / 조인 조건이 없을 때의 문제점과 해결 방법 / 테이블 별칭 설정 (0) | 2023.02.25 |
[오라클로 배우는 데이터베이스 입문 | 07장 다중행 함수와 데이터 그룹화] 문제 풀이 (p212) (0) | 2023.02.24 |
그룹화 함수 | LISTAGG 함수 (LISTAGG 함수 사용 방법 / 사용 이유) (0) | 2023.02.23 |