조인이란?

 

조인: 테이블을 두 개 이상 사용해서 연산을 처리하는 것.

등호를 사용해서 같은 컬럼값을 가진 부분을 기준으로 두 테이블을 합치는 것이 동등 조인(EQUI JOIN)이고, 사용하는 테이블의 이름이 같은 경우 SELF JOIN에 해당한다.

 

조인의 목적: 여러 데이터에서 컬럼 출력하기

SELECT A.컬럼1, B.컬럼1

FROM TABLE_1 A, TABLE_2 B

WHERE A.컬럼N = B.컬럼M

CARTESIAN PRODUCT

연결 지을 수 있는 모든 경우의 수

N개의 행을 가진 테이블과 M개의 행을 가진 테이블을 CARTESIAN 곱을 하면 N*M 개의 행이 생긴다.


EQUI JOIN

: 등호 사용하는 조인

SELECT ENAME, JOB FROM EMP, DEPT

WHERE EMP.DEPTNO = DEPT.DEPTNO;

 

테이블명에 ALIAS 사용 가능

SELECT ENAME, JOB FROM EMP E, DEPT D

WHERE E.DEPTNO = D.DEPTNO;

 

조인 사용 시 조회할 컬럼에 테이블명을 기입 안했을 때

SELECT EMPNO, ENAME, LOC, DEPTNO

FROM EMP, DEPT

WHERE EMP.DEPTNO = DEPT.DEPTNO;

-> COLUMN AMBIGUOSLY DEFINED 발생, DEPTNO는 EMP와 DEPT에 둘 다 있어서 오류 발생

수정한 쿼리

SELECT EMPNO, ENAME, LOC, DEPT.DEPTNO

FROM EMP, DEPT

WHERE EMP.DEPTNO = DEPT.DEPTNO;

위의 쿼리처럼 어떤 테이블의 컬럼을 가져왔는지 명시를 해야 한다.

나중에 관리하기에도 좋다.

JOIN을 위해선 최소 테이블 개수 N - 1 만큼의 연결이 필요하다.

속도를 고려하기 위해선 WHERE 조건 절에서 조인을 먼저 할 것을 고려해야 한다.

 

테이블명이 긴 경우에는 아래와 같이 테이블명에 ALIAS 사용이 가능하다.

SELECT E.EMPNO, E.ENAME, D.LOC, D.DEPTNO

FROM EMP E, DEPT D

WHERE E.DEPTNO = D.DEPTNO

AND E.DEPTNO = D.DEPTNO

AND E.DEPTNO IN (10,20)

AND D.LOC = 'DALLAS';

SELF JOIN

FROM절에 놓이는 테이블명이 같은 경우.

같은 테이블에서 다른 컬럼명에서 같은 값을 찾아 연결할 때 사용. EX. 사수 찾기

SELECT E1.ENAME AS EMPLY, E2.ENAME AS MGR

FROM EMP E1, EMP E2

WHERE E1.MGR = E2.EMPNO;

E2가 매니저에 해당하는 테이블이므로 이름 출력시 E2.ENAME이라 해도 성립한다.

댓글 시스템의 대댓글이 SELF JOIN의 예시

 

QUIZ. 사원, 대리, 과장의 정보를 출력하시오

나는 사원은 EMPLY, 대리는 MANAGER, 과장은 SUPVIS라고 임의로 정해서 명시했다.

SELECT E1.ENAME AS EMPLY, E2.ENAME AS MANAGER, E3.ENAME AS SUPVIS

FROM EMP E1, EMP E2, EMP E3

WHERE E1.MGR = E2.EMPNO AND E2.MGR = E3.EMPNO;

 

댓글남기기