[오라클로 배우는 데이터베이스 입문] 08. 여러 테이블을 하나의 테이블처럼 사용하는 조인
1. 조인
- 집합 연산자와 조인의 차이점
○ 집합연산자를 사용한 결과는 두 개 이상의 SELECT문의 결과 값을 세로로 연결한 것
○ 조인을 사용한 결과는 두 개 이상의 테이블 데이터를 가로로 연결한 것
- 여러 테이블을 사용할 때의 FROM절
SELECT 열1, 열2, ... , 열N FROM EMP WHERE 조건식 GROUP BY 그룹식 HAVING 그룹조건식 ORDER BY 정렬식 |
SELECT FROM 테이블1, 테이블2, ..., 테이블N ※ FROM절에는 열과 행으로 구성된 데이터 집합이라면 모두 지정 가능(뷰, 서브쿼리 등) |
- 조인 조건이 없을 때의 문제점
특정 열이 어느 테이블에 속한 열인지 구별하는 방식 테이블 이름.열 이름 특정 열 값이 같은 데이터 출력하는 조건식 테이블 이름.열 이름=테이블2 이름. 열2 이름 |
- 테이블의 별칭 설정: 명시한 테이블 이름에서 한 칸 띄운 후 지정
FROM 테이블 이름1 별칭1, 테이블 이름2 별칭2. . . |
2. 조인 종류
- 등가 조인: 테이블을 연결한 후 출력 행을 각 테이블의 특정 열에 일치한 데이터를 기준으로선정하는 방식으로 내부조인(inner join) 또는 단순 조인(simple join)으로 부르기도 함
※ 여러 테이블의 열 이름이 같을 때 유의점: 테이블 구분 없이 명시하면 오류가 생길 수 있음
※ 조인 테이블 개수와 조건식 개수의 관계: WHERE절의 조건식을 사용해 테이블을 조인할 때 반드시 각 테이블을 정확히 연결하는 조건식이 최소한 전체 테이블 수보다 하나 적은 수만큼은 있어야 함
- 비등가 조인(non-equal join): 등가 조인 외의 조인 방식
- 자체 조인: 하나의 테이블을 여러 개의 테이블처럼 활용하여 조인하는 방식으로 FROM절에 같은 테이블을 여러 번 명시하되 별칭만 다르게 지정하는 방식으로 사용
- 외부 조인(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(조인 조건식) |
- 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조인 방식에서 세 개 이상의 테이블을 조인할 때
FROM TABLE1 JOIN TABLE2 ON(조건식) JOIN TABLE3 ON(조건식) FROM절에 두 개 테이블을 키워드로 조인한 바로 옆에 SQL-99방식의 조인 내용을 추가로 작성하면 됨 |