JOIN(CROSS, INNER, OUTER, NATURAL)

CHM·2022년 3월 15일
0

PostgreSQL

목록 보기
9/20

1. JOIN(조인)의 정의 및 사용 목적

  • 여러 테이블의 데이터를 사용할 경우 ㅆ느느 기법
  • 서로 다른 두 테이블의 데이터 결합
  • 다른 테이블의 데이터 참조

2. 조인의 종류

1. CROSS JOIN

  • 모든 경우의 수, 총 N*M개의 행 리턴
  • N 개의 행을 가진 테이블1과 M개를 가진 테이블2의 카티션 프로덕트 발생
  • 조인 조건을 생략하거나 부적합할 경우 발생
SELECT * FROM TABLE1 CROSS JOIN TABLE2

2. INNER JOIN

  • 두 테이블을 연결할 조인 조건에 만족하는 데이터만 출력
  • INNER JOIN <-> OUTER JOIN
  • EQUI JOIN, NON EQUI JOIN으로 구분

EQUI JOIN

  • 가장 흔한 형태의 조인 형식
  • 사용 예시
SELECT NAME, DNAME
FROM emp2 JOIN dept
ON emp2.DEPTNO = dept.DEPTNO;

NON EQUI JOIN

  • 조인의 연산이 '='이 아닌 경우
  • 대소비교, BETWEEN 연산자 등을 사용하는 경우
  • 사용 예시
SELECT G.GNAME AS 고객이름, G.POINT, P.PNAME AS 상품명
FROM GOGAK G JOIN PRODUCT P
ON G.POINT >= P.P_START
ORDER BY 1; 

** ORDER BY 1 : 첫번째 열인 고객번호를 통해 정렬하겠다.

3. OUTER JOIN

  • 조인 조건이 성립하지 않은 경우도 출력
  • 기준이 되는 테이블에 따라 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 구분
    • LEFT OUTER JOIN : 왼쪽 테이블 기준 조인
    • RIGHT OUTER JOIN : 오른쪽 테이블 기준 조인
    • FULL OUTER JOIN : 양쪽 테이블 기준 조인
  • LEFT OUTER JOIN 사용 예시(학생 정보를 생략 없이 출력하기 원할 때)
SELECT S.NAME, S.GRADE, P.NAME
FROM STUDENT S LEFT OUTER JOIN PROFESSOR P
ON S.PROFNO = P.PROFNO
WHERE S.DEPTNO1 = 101;

  • FULL OUTER JOIN 사용 예시(학생과 제2전공명을 출력하고, 제2전공이 없는 학생도 출력하도록)
SELECT S.NAME, D.DNAME
FROM STUDENT S FULL OUTER JOIN DEPARTMENT D
ON S.DEPTNO2 = D.DEPTNO;

4. NATURAL JOIN

  • 조인 조건의 전달 없이 가능한 JOIN
  • 두 테이블에 서로 같은 컬럼명이 있는 경우 사용
  • EQUI JOIN과 비슷. BUT 조인 조건 생략 시 자동으로 양 테이블의 동일한 컬럼명으로 EQUI JOIN을 수행해준다.
  • 사용 예시(둘이 동일한 결과)
    • EQUI JOIN
      SELECT E.NAME, D.DNAME
      FROM EMP2 E JOIN DEPT D
      ON E.DEPTNO = D.DEPTNO
      WHERE E.DEPTNO = 10;
    • NATURAL JOIN
      SELECT E.NAME, D.DNAME
      FROM EMP2 E NATURAL JOIN DEPT D
      WHERE E.DEPTNO = 10;

5. SELF JOIN

  • 조인할 테이블이 자기 자신인 경우
  • 한 번의 테이블 스캔으로 표현 불가능한 정보를 표현할 경우
  • 테이블 명이 동일하므로 반드시 테이블 별칭 필요
  • 사용 예시
SELECT E1.EMPNO, E1.NAME, E2.NAME AS 매니저이름
FROM EMP2 E1 JOIN EMP2 E2
ON E1.MGRNO = E2.EMPNO;

  • 전체 사원 정보를 출력하기 위해서는 LEFT JOIN을 사용하면 된다.

0개의 댓글

관련 채용 정보