[SQL] 058. 여러 테이블의 데이터를 조인해서 출력하기

Updated:

초보자를 위한 SQL 200제 교재를 토대로 공부한 내용입니다.

오라클 SQL을 기반으로 합니다.

실습에 사용한 테이블은 정보문화사 홈페이지에서 받을 수 있습니다.


[예시]

WHERE절에 조건으로 각 테이블의 키가 일치하는 경우 테이블 결합이 가능하다.

다음 예시는 EMP 테이블과 DEPT 테이블을 결합한다.

두 테이블은 모두 DEPTNO(부서번호)를 가진다.

EMP 테이블의 ENAME(사원이름)과 DEPTNO 테이블의 LOC(부서위치)를 출력한다.

-- EQUI JOIN
-- WHERE절이 일치하는 경우만
SELECT ENAME, LOC
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;

[결과]

ENAME LOC
KING NEW YORK
BLAKE CHICAGO
CLARK NEW YORK
JONES DALLAS
MARTIN CHICAGO
ALLEN CHICAGO
TURNER CHICAGO
JAMES CHICAGO
WARD CHICAGO
FORD DALLAS
SMITH DALLAS
SCOTT DALLAS
ADAMS DALLAS
MILLER NEW YORK

[예시2]

보통은 다음과 같이 테이블 뒤에 Alias를 추가해 사용한다.

EMP 테이블은 A, DEPTNO 테이블은 B라는 별칭을 주고 EMP 테이블의 JOB(직업) 조건을 추가하였다.

-- Alias, 조건 등 추가
SELECT A.DEPTNO, A.ENAME, A.JOB, B.LOC
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO AND A.JOB = 'MANAGER';

[결과2]

DEPTNO ENAME JOB LOC
10 CLARK MANAGER NEW YORK
20 JONES MANAGER DALLAS
30 BLAKE MANAGER CHICAGO

[예시3]

다음 예시는 EQUI JOIN은 아니지만 추가적으로 알아보도록 한다.

WHERE절을 작성하지 않은 경우 CARTESIAN PRODUCT를 생성한다.

CARTESIAN PRODUCT는 모든 경우의 수를 출력한다.

개인적으로는 여러 레벨의 테이블을 생성할 때 사용한 경험이 있다.

예를 들어 연도 5개, 지역 3개로 15개 레벨의 행을 가지는 테이블을 생성한다면,

5개 연도만 가지는 테이블, 3개 지역만 가지는 테이블 생성 후 CARTESTIAN PRODUCT로 생성한다.

-- CARTESIAN PRODUCT
-- 모든 경우의 수: 테이블1 행의 수 X 테이블2 행의 수 만큼 출력
SELECT ENAME, LOC
FROM EMP, DEPT;

[결과3]

ENAME LOC
KING NEW YORK
BLAKE NEW YORK
CLARK NEW YORK
JONES NEW YORK
MARTIN NEW YORK
ALLEN NEW YORK
TURNER NEW YORK
JAMES NEW YORK
WARD NEW YORK
FORD NEW YORK
SMITH NEW YORK
SCOTT NEW YORK
ADAMS NEW YORK
MILLER NEW YORK
KING DALLAS
BLAKE DALLAS
CLARK DALLAS
JONES DALLAS
MARTIN DALLAS
ALLEN DALLAS
TURNER DALLAS
JAMES DALLAS
WARD DALLAS
FORD DALLAS
SMITH DALLAS
SCOTT DALLAS
ADAMS DALLAS
MILLER DALLAS
KING CHICAGO
BLAKE CHICAGO
CLARK CHICAGO
JONES CHICAGO
MARTIN CHICAGO
ALLEN CHICAGO
TURNER CHICAGO
JAMES CHICAGO
WARD CHICAGO
FORD CHICAGO
SMITH CHICAGO
SCOTT CHICAGO
ADAMS CHICAGO
MILLER CHICAGO
KING BOSTON
BLAKE BOSTON
CLARK BOSTON
JONES BOSTON
MARTIN BOSTON
ALLEN BOSTON
TURNER BOSTON
JAMES BOSTON
WARD BOSTON
FORD BOSTON
SMITH BOSTON
SCOTT BOSTON
ADAMS BOSTON
MILLER BOSTON

Tags:

Categories:

Updated:

Leave a comment