공부/데이터베이스

[오라클로 배우는 데이터베이스 입문] 08. 여러 테이블을 하나의 테이블처럼 사용하는 조인

losey_J 2022. 3. 28. 17:04

1. 조인

- 집합 연산자와 조인의 차이점

○ 집합연산자를 사용한 결과는 두 개 이상의 SELECT문의 결과 값을 세로로 연결한 것

조인을 사용한 결과는 두 개 이상의 테이블 데이터를 가로로 연결한 것

- 여러 테이블을 사용할 때의 FROM절

SELECT 열1, 열2, ... , 열N
FROM EMP
WHERE 조건식
GROUP BY 그룹식
HAVING 그룹조건식
ORDER BY 정렬식
SELECT
FROM 테이블1, 테이블2, ..., 테이블N
※ FROM절에는 열과 행으로 구성된 데이터 집합이라면 모두 지정 가능(뷰, 서브쿼리 등)

사원 정보와 부서 정보 한 번에 조회하기 - EMP테이블의 14개 행 하나하나에 DEPT테이블에 저장된 4개 행이 가로로 조합되어 출력됨

- 조인 조건이 없을 때의 문제점

특정 열이 어느 테이블에 속한 열인지 구별하는 방식
테이블 이름.열 이름
특정 열 값이 같은 데이터 출력하는 조건식
테이블 이름.열 이름=테이블2 이름. 열2 이름

WHERE절에 특정 열값이 같은 데이터를 출력하도록 조건 입력

- 테이블의 별칭 설정: 명시한 테이블 이름에서 한 칸 띄운 후 지정

FROM 테이블 이름1 별칭1, 테이블 이름2 별칭2. . . 

2. 조인 종류

- 등가 조인: 테이블을 연결한 후 출력 행을 각 테이블의 특정 열에 일치한 데이터를 기준으로선정하는 방식으로 내부조인(inner join) 또는 단순 조인(simple join)으로 부르기도 함

※ 여러 테이블의 열 이름이 같을 때 유의점: 테이블 구분 없이 명시하면 오류가 생길 수 있음

열 이름에 각각의 테이블 이름을 함께 명시할 때
WHERE절에 조건식 추가하여 출력 범위 설정하기

※ 조인 테이블 개수와 조건식 개수의 관계: WHERE절의 조건식을 사용해 테이블을 조인할 때 반드시 각 테이블을 정확히 연결하는 조건식이 최소한 전체 테이블 수보다 하나 적은 수만큼은 있어야 함

 

- 비등가 조인(non-equal join): 등가 조인 외의 조인 방식

위 두 테이블이 존재할 때, 사원정보에 각 사원의 급여 등급을 함께 출력하고 싶다면?
E.SAL이 S.LOSAL과 S.HISAL 범위안에 오도록 조건 설정

- 자체 조인: 하나의 테이블을 여러 개의 테이블처럼 활용하여 조인하는 방식으로 FROM절에 같은 테이블을 여러 번 명시하되 별칭만 다르게 지정하는 방식으로 사용

MGR이 NULL값인 KING은 출력에서 제외됨

- 외부 조인(outer join): 두 테이블 간 조인 수행에서 조인 기준 열의 어느 한 쪽이 NULL이어도 강제로 출력하는 방식

WHERE절에서 조인 기준 열 중 한쪽에 (+)기호를 붙여 줌
왼쪽 외부 조인(Left Outer Join) WHERE TABLE1.COL1=TABLE2.COL1(+)
오른쪽 외부 조인(Right Outer Join) WHERE TABLE1.COL1(+)=TABLE2.COL1

3. SQL-99 표준 문법으로 배우는 조인(SQL-99조인은 기존 조인 방식과 문법이 다소 차이가 남)

- NATURAL JOIN: 조인 대상이 되는 두 테이블에 이름과 자료형이 같은 열을 찾은 후 그 열을 기준으로 등가 조인을 해주는 방식

- JOIN~USING: USING 키워드에 조인 기준으로 사용할 열을 명시하여 사용

FROM TABLE1 JOIN TABLE2 USING(조인에 사용할 기준 열)

-JOIN~ON: 기존 WHERE절에 있는 조건식을 ON키워드 옆에 작성, 조인 기준 조건식은 ON에 명시하고 그밖의 출력행 제한 조건식은 WHERE절에 작성

FROM TABLE1 JOIN TABLE2 ON(조인 조건식)

기존 JOIN방식과 큰 차이 없음

- OUTER JOIN: SQL-99방식의 조인과 마찬가지로 WHERE절이 아닌 FROM절에 외부 조인을 선언

왼쪽 외부 조인(Left Outer Join) 기존 WHERE TABLE1.COL1=TABLE2.COL(+)
SQL-99 FROM TABLE1 LEFT OUTER JOIN TABLE2 ON(조인 조건식)
오른쪽 외부 조인(Right Outer Join) 기존 WHERE TABLE1.COL1(+)=TABLE2.COL1
SQL-99 FROM TABLE1 RIGHT OUTER JOIN TABLE2 ON(조인 조건식)
전체 외부 조인(Full Outer Join) 기존 없음(UNION 집합 연산자 활용)
SQL-99 FROM TABLE1 FULL OUTER JOIN TABLE2 ON(조인 조건식)

SQL-99로 작성한 왼쪽 외부 조인
SQL-99로 작성한 오른쪽 외부 조인
SQL-99로 작성한 전체 외부 조인

 

- SQL-99조인 방식에서 세 개 이상의 테이블을 조인할 때

FROM TABLE1 JOIN TABLE2 ON(조건식) JOIN TABLE3 ON(조건식)
FROM절에 두 개 테이블을 키워드로 조인한 바로 옆에 SQL-99방식의 조인 내용을 추가로 작성하면 됨