• [SQLD] 표준조인

    2025. 2. 23.

    by. hyunji1109

    표준조인
    ANSI 표준으로 작성되는 INNER JOIN, CROSS JOIN, NATURAL JOIN, OUTER JOIN을 말함

     

    INNER JOIN

    • 내부 조인이라고 하며, 조인 조건이 일치하는 행만 추출 (ORACLE 조인 기본)
    • ANSI 표준의 경우 FROM 절에 INNER JOIN 혹은 줄여서 JOIN을 명시
    • ANSI 표준의 경우 USING 이나 ON 조건절을 필수적으로 사용

     

     

    ON절

    • 조인할 양 컬럼의 컬럼명이 서로 다르더라도 사용 가능
    • ON 조건의 괄호는 옵션 (생략가능)
    • 컬럼명이 같을 경우 테이블 이름이나 별칭을 사용하여 명확하게 지정 (테이블 출처 명확히)
    • ON 조건절에서 조인조건 명시, WHERE절에서는 일반조건 명시
    • WHERE절과 ON절을 쓰임에 따라 명확히 구분

     

    문법

     

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


    👉 ORACLE 표준은 FROM 절에 테이블을 컴마로 구분, WHERE 절에 조인 조건 나열
    👉 ORACLE 은 INNER JOIN이 기본 조인 연산이므로 별도의 문법 존재 안함

     

     

    USING 조건절

    • 조인할 컬럼명이 같을 경우 사용
    • Alias 나 테이블 이름 같은 접두사 붙이기 불가
    • 괄호 필수

     

    문법

     

    •  USING 절을 이용한 사원 이름과 부서이름 조회

     

     

    NATURAL JOIN

    • 두 테이블 간의 동일한 이름을 가지는 모든 컬럼들에 대해 EQUI JOIN을 수행
    • USING, ON, WHERE 절에서 조건 정의 불가
    • JOIN에 사용된 컬럼들은 데이터 유형이 동일해야 하며 접두사를 사용불가

     

    문법

     

    • NATURAL 조인을 이용한 사원 이름, 부서명 출력

     

    • NATURAL JOIN시 주의


    👉 NATURAL JOIN 은 동일한 이름의 모든 컬럼을 조인 컬럼으로 사용하므로 조인 컬럼의 값이 모두 같을 때만 결과가 리턴됨
    👉 STUDENT와 PROFESSOR 테이블에는 NAME 컬럼과 PROFNO 컬럼이 컬럼명이 서로 동일함

     

     

    CROSS JOIN

    • 테이블 간 JOIN 조건이 없는 경우 생성 가능한 모든 데이터들의 조합
    • (Cartesian product(카타시안 곱)) 출력
    • 양쪽 테이블 행의 수가 곱한 수의 데이터 조합 발생 (m*n)

     

    문법

     

    •  CROSS 조인


    -> 내용이 길어 일부만 출력했지만, 총 56건이 출력됨
    (EMP 14건, DEPT 4건이므로 14X4=56)

     

     

    OUTER JOIN

    • INNER JOIN과 대비되는 조인방식
    • JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용
    • 두 테이블 중 한쪽에 NULL을 가지면 EQUI JOIN시 출력되지 않음
      • 이를 출력 시 OUTER JOIN 사용
    • 테이블 기준 방향에 따라 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 구분

     

    OUTER JOIN의 종류

    1) LEFT OUTER JOIN

    • FROM 절에 나열된 왼쪽 테이블에 해당하는 데이터를 읽은 후, 우측 테이블에서 JOIN 대상 읽어옴
    • 왼쪽 테이블이 기준이 되어 오른쪽 데이터를 채우는 방식
    • 우측 값에서 같은 값이 없는 경우 NULL 값으로 출력

     

    2) RIGHT OUTER JOIN

    • LEFT OUTER JOIN 의 반대
    • 오른쪽 테이블이 기준이 되어 왼쪽 테이블 데이터를 채우는 방식
    • FROM절에 테이블 순서를 변경하면 LEFT OUTER JOIN으로 수행 가능

     

    3) FULL OUTER JOIN

    • 두 테이블 전체 기준으로 결과를 생성하여 중복 데이터를 삭제 후 리턴
    • LEFT OUTER JOIN 결과와 RIGHT OUTER JOIN 결과의 UNION 연산 리턴과 동일함
    • ORACLE 표준에는 없음

     

    ① LEFT OUTER JOIN 예제

    STUDENT 테이블과 PROFESSOR 테이블을 조인하여 1,4학년 학생들의 이름, 학년, 지도교수이름 출력


    👉 STUDENT, PROFESSOR 테이블을 PROFNO로 연결하면 학생, 지도교수 정보와 함께 출력 가능
    👉 STUDENT 테이블의 PROFNO가 NULL인 경우는 데이터가 생략됨(INNER JOIN 수행)
    👉 지도교수가 없는 학생 정보 출력 시 OUTER JOIN 수행
    👉 이 때, 기준이 되는 데이터 (생략되지 않았으면 하는 쪽)는 STUDENT 테이블!!
    👉 LEFT OUTER JOIN

     

    ORACLE 표준)


    👉 ORACLE 표준은 WHERE 절에 조인 조건을 작성하므로 LEFT OUTER JOIN을 기술하지 X
    👉 WHERE 절에서 기준이 되는 테이블(STUDENT) 반대 테이블 조건 컬럼 뒤에 (+)를 붙임

     

    ANSI 표준)


    👉 ANSI 표준에서는 조인의 종류를 FROM절에 테이블과 테이블 사이 명시
    👉 조인 조건을 바로 뒤에 ON절에 나열
    👉 WHERE 절은 ON 절 밑에 전달 (순서 중요)

     

    ② FULL OUTER JOIN 예제

    위 조인 결과를 FULL OUTER JOIN 수행 (ANSI 표준으로)


    👉 7004,7005번 학생 정보는 LEFT OUTER JOIN 에서도, RIGHT OUTER JOIN에서도도 출력됨
    👉 LEFT OUTER JOIN 결과와 RIGHT OUTER JOIN 결과를 동시 출력 (중복 데이터는 한 번 만)
    👉 ORACLE에서는 지원하지 않는 문법((+) 기호를 양 방향 전달 시 에러 발생)
    👉 성능적으로 좋지 않기 때문에 사용 시 주의 필요

     

    출처: https://youtu.be/ovGGaIGL2Ys?si=wKhpF_VUSY9DcL-u

    'CS > SQL' 카테고리의 다른 글

    [SQLD] 집합 연산자  (0) 2025.02.24
    [SQLD] 서브쿼리  (0) 2025.02.24
    [SQLD] 조인  (0) 2025.02.23
    [SQLD] ORDER BY절  (0) 2025.02.22
    [SQLD] GROUP BY절, HAVING절  (0) 2025.02.22

    댓글