[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