본문 바로가기
스터디/SQL

[정리노트] SQLD 2024년 개정판 - JOIN (조인)

by 견습생L 2024. 8. 21.

 

[정리노트] SQLD 2024년 개정판 - JOIN (조인)


JOIN (조인)

  • 여러 테이블의 데이터를 사용하여 동시 출력하거나 참조 할 경우
  • FROM 절에 조인할 테이블 나열
  • Oracle 표준은 테이블 나열 순서 중요하지 X, ANSI 표준은 OUTER JOIN 시 순서 중요
  • WHERE 절에서 조인 조건을 작성 (Oracle 표준)
  • 동일한 열 이름이 여러 테이블에 존재할 경우 열 이름 앞에 테이블 이름이나 테이블 Alias 붙임 (AS 표기 생략해야함)
  • N개의 테이블을 조인하려면 최소 N-1 개의 조인 조건이 필요
  • Oracle 표준과 ANSI 표준이 서로 다름

종류

  1. 조건의 형태에 따라
    1. EQUI JOIN(등가 JOIN): JOIN 조건이 동등 조건인 경우
    2. NON EQUI JOIN(비등가 JOIN): JOIN 조건이 동등 조건이 아닌 경우
  2. 조인 결과에 따라
    1. INNER JOIN: JOIN 조건에 성립하는 데이터만 출력
    2. OUTER JOIN: JOIN 조건에 성립하지 않는 데이터도 출력하는 경우 (LEFT/RIGHT/FULL OUTER JOIN)
  3. NATURAL JOIN: 조인조건 생략 시 두 테이블에 같은 이름으로 자연 연결되는 조인
  4. CROSS JOIN: 조인조건 생략 시 두 테이블의 발생 가능한 모든 행을 출력하는 조인
  5. SELF JOIN: 하나의 테이블을 두 번 이상 참조하여 연결하는 조인

EQUI JOIN(등가 JOIN)

  • 조인 조건 ‘=’(equal) 비교를 통해 같은 값을 가지는 행을 연결하여 결과를 얻는 조인 방
  • FROM 절에 조인하고자 하는 테이블을 모두 명시
  • FROM 절에 명시하는 테이블은 테이블 별칭 (Alias) 사용 가능
  • WHERE 절에 두 테이블의 공통 컬럼에 대한 조인 조건을 나열

문법 (Oracle 표준)

SELECT 테이블1.컬럼, 테이블2.컬럼
  FROM 테이블1, 테이블2
 WHERE 테이블1.컬럼 = 테이블2.컬럼;

ex) EMP테이블과 DEPT 테이블을 사용하여 각 직원의 이름과 부서명을 함께 출력

SELECT EMP.ENAME, DEPT.DNAME
  FROM EMP,DEPT
 WHERE EMP.DEPTNO = DEPT.DEPTNO;

 

NON-EQUI JOIN (비등가 조인)

  • 테이블을 연결짓는 조인 컬럼에 대한 비교 조건이 ‘<’, BETWEEN A AND B와 같이 ‘=’ 조건이 아닌 연산자를 사용하는 경우의 조인 조건

문법

SELECT 테이블1.컬럼, 테이블2.컬럼
  FROM 테이블1, 테이블2
 WHERE 테이블1.컬럼 비교조건 테이블2.컬럼;

ex) EMP 테이블의 급여를 확인하고 SAL_GRADE에 있는 급여 등급 기준에 따라 직원이름과 급여, 급여 등급 출력

SELECT E.NAME, E.SAL, S.GRADE
  FROM EMP E, SAL_GRADE S
 WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

 

세 테이블 이상의 조인

  • 관계를 잘 파악하여 모든 테이블이 연결되도록 조인 조건 명시
  • N개 테이블의 경우 최소 N-1개의 조인 조건 필요

예제) EMPLOYEES, DEPARTMENTS, LOCATIONS 테이블 조인

SELECT E.EMPLOYESS_ID, E.FIRST_NAME, E.LAST_NAME, 
	   D.DEPARTMENT_NAME, L.CONTRY_ID
  FROM EMPLOYEES E,DEPARTMENTS D, LOCATIONS L
 WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID 
   AND D.LOCATION_ID = L.LOCATION_ID;

→ 만약 필수 조인조건이 하나라도 생략될 경우 카티시안곱 발생 (정상 조인보다 더 많은 수의 행이 리턴)

 

SELF JOIN

  • 한 테이블 내 각 행끼리 관계를 갖는 경우 조인 기법
  • 한 테이블을 참조할 때마다(필요할 때마다) 명시해야 함
  • 테이블명이 중복되므로 반드시 테이블 별칭 사용

ex) EMPLOYEES 테이블에서의 각 직원이름과 매니저 이름을 함께 출

SELECT E1.EMPLOYEE_ID, E1.FIRST_NAME, E1.LAST_NAME, E1.MANAGER_ID,
	   E2.EMPLOYEE_ID, E2.FIRST_NAME, E2.LAST_NAME
  FROM EMPLOYEES E1, EMPLOYEES E2
 WHERE E1.MANAGER_ID = E2.MANAGER_ID
 ORDER BY 1, 4;


응용예제) EMP 테이블에서 상위 관리자(매니저)보다 급여가 많은 직원 출력

  • 테이블 한 번 스캔 시(한 행만 읽었을 경우) 매니저 정보는 없으므로 셀프 조인 필요
  • 원하는 정보를 모두 한 행으로 출력 후 조건 선택 가능
  • 조인조건과 일반조건을 각자의 위치에 전달 (Oracle은 모두 WHERE 절 기술, ANSI 표준은 조인조건은 ON절, 일반조건만 WHERE 절)
SELECT E1.EMPNO, E1.ENAME, E1.SAL,
	   E2.EMPNO, E2.ENAME, E2.SAL
  FROM EMP E1, EMP E2
 WHERE E1.MGR = E2.EMPNO
   AND E1.SAL > E2.SAL;

반응형