데이터베이스 SQL 구문 기초04(EQUI JOIN, SELF JOIN)
조인이란?
조인: 테이블을 두 개 이상 사용해서 연산을 처리하는 것.
등호를 사용해서 같은 컬럼값을 가진 부분을 기준으로 두 테이블을 합치는 것이 동등 조인(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;
댓글남기기