[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 |
Leave a comment