조인(JOIN)

Lee kyu min·2024년 2월 24일

SQL

목록 보기
7/11

조인(JOIN)

  • 두 개 이상의 테이블을 연결하여 하나의 테이블 처럼 출력
  • FROM절에는 여러 테이블, 혹은 열과 행으로 구성된 데이터 집합 모두 지정 가능
    (뷰, 서브쿼리)
  • 서로 다른 테이블에서도 같은 이름의 열이 존재할 수 있다. 이 때, 어느 테이블의 열인지 구분하는 방법으로 아래와 같이(.)을 표시하여 구분한다
테이블 이름.열이름
  • 테이블 별칭 지정(테이블 이름에서 한칸 띄운 후 지정)
    EX)
SELECT *	//전체 열 데이터 조회
FROM EMP E, DEPT D	// EMP, DEPT 테이블 조회 EMP테이블 별칭을 E, DEPT 테이블 별칭을 D라 지정
WHERE E.DEPTNO = D.DEPTNO;	// EMP테이블 내 DEPTNO열과 DEPT테이블 내 DENPTNO열이 같은 행 조회

1. 등가 조인(equi join)

  • 테이블 연결 후, 출력 행을 각 테이블 특정 열에 일치한 데이터를 기준으로 선정
SELECT EMPNO, ENAME, DEPTNO, DNAME, LOC	//EMPNO, ENAME, DEPTNO, DNAME, LOC열 조회
FROM EMP E, DEPT D	// EMP, DEPT 테이블 조회 EMP테이블 별칭을 E, DEPT 테이블 별칭을 D라 지정
WHERE E.DEPTNO = D.DEPTNO;
// EMP테이블 내 DEPTNO열과 DEPT테이블 내 DENPTNO열이 같은 행 조회
//DEPTNO열은 EMP, DEPT 두 테이블 모두 존재하여 어느 테이블에 속한열인지 반드시 명시

1) JOIN ~ON 키워드

  • 등가 조인 중 가장 범용성 있는 키워드
  • 기존 WHERE존 조건식을 ON 키워드 옆에 작성하여 FROM절에 사용함으로 WHERE에 조건식을 따로 사용 가능할 수 있다.
FROM TABLE1 JOIN TABLE2 ON (조인 조건식)
  • 3테이블 이상 사용시
FROM TABLE1 JOIN TABLE2 ON (조인 조건식)
JOIN TABLE3 ON (조인 조건식)

ex)

SELECT E.EMPNO, E.ENAME, E.DEPTNO, E.SAL, D.DNAME, D.LOC 
//EMP테이블 내 EMPNO, ENAME, DETPNO열, SAL테이블 내 DNAME, LOC열 조회
FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO)
// EMP, DEPT 테이블 조회 EMP테이블 별칭을 E, DEPT 테이블 별칭을 D라 지정,
EMP테이블 내 DEPTNO열과 DEPT테이블 내 DENPTNO열이 같은 행 조회
WHERE SAL <= 3000;	//SAL열이 3000미만인 행만 조회

2. 비등가 조인(non-equi join)

  • 등가 조인 외의 방식(두 테이블 특정열이 일치하지 않아도 조건식을 만족하도록 연결)
    ex)
SELECT *
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;
//S.LOSAL <= E.SAL <= S.HISAL 인경우 두 테이블 연결 

3. 자체 조인(self join)

  • 하나의 테이블을 여러 테이블처럼 활용하여 조인
  • FROM절에 같은 테이블을 여러번 명시하되, 테이블의 별칭만 다르게 지정
    ex)
SELECT E1.EMPNO, E1.ENAME, E1.MGR, E2.EMPNO AS MGR_EMPNO, E2.ENAME AS MGR_ENAME
FROM EMP E1, EMP E2	//EMP 테이블 조회, 별칭은 E1, E2
WHERE E1.MGR = E2.EMPNO;	//EMP테이블 내 MGR열과 EMPNO열 조인

4. 외부 조인(outer join)

  • 두 테이블 조인 조건 데이터 중 어느 한쪽이 NULL이면 출력되지 않지만 이를 강제 출력하는 방식을 외부 조인이라 한다.
  • 조인 기준 열의 NULL을 처리하는 목적으로 자주 사용
    1) LEFT OUTER JOIN
FROM EMP E1 LEFT OUTER JOIN EMP E2 ON (E1.MGR = E2.EMPNO)
//EMP 테이블 내 MGR열 중 NULL이 있어도 강제로 JOIN

2) RIGHT OUTER JOIN

FROM EMP E1 RIGHT OUTER JOIN EMP E2 ON (E1.MGR = E2.EMPNO)
//EMP 테이블 내 EMPNO열 중 NULL이 있어도 강제로 JOIN

3) FULL OUTER JOIN

FROM EMP E1 FULL OUTER JOIN EMP E2 ON (E1.MGR = E2.EMPNO)
//EMP 테이블 내 MGR, EMPNO열 어느 한 쪽 NULL이 있어도 강제로 JOIN

0개의 댓글