본문 바로가기

sqld

2-8) 표준 조인

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

 

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

 

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

 

** 문법

 

 

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

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

 

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

 

** 문법

 

 

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

 

 

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

 

  • 이름이 동일한 컬럼이 여러 개일 때, 모든 컬럼이 일치하는 것들만 조회됨

 

** 문법

 

 

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

 

예2) NATURAL JOIN 시 주의점

  • NATURAL JOIN은 동일한 이름의 모든 컬럼을 조인 컬럼으로 사용 → 조인 컬럼의 값이 모두 같을 때만 결과가 리턴됨
  • STUDENT와 PROFESSOR 테이블의 NAME 컬럼과 PROFNO 컬럼 컬럼명이 서로 동일
    • STUDENT NAME과 PROFESSOR NAME이 같고, STUDENT의 PROFNO과 PROFESSOR의 PROFNO가 같은 경우 존재하지 않아 아무 것도 조회되지 않음

 

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

 

 

** 문법

 

 

예) CROSS 조인

  • 일부만 표시, 실제로는 EMP 14건, DEPT 4건 → 총 56건 출력됨

 

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

 

OUTER JOIN 종류
  1. LEFT OUTER JOIN
    1. FROM 절에 나열된 왼쪽 테이블에 해당하는 데이터를 읽은 후, 우측 테이블에서 JOIN 대상 읽어옴
    2. 왼쪽 테이블이 기준이 되어 오른쪽 테이블 데이터를 채우는 방식
    3. 우측 값에서 같은 값이 없는 경우 NULL 값으로 출력
  2. RIGHT OUTER JOIN
    1. LEFT OUTER JOIN의 반대
    2. 오른쪽 테이블 기준으로 왼쪽 테이블 데이터를 채우는 방식
    3. FROM 절에 테이블 순서를 변경하면 LEFT OUTER JOIN으로 수행 가능
  3. FULL OUTER JOIN
    1. 두 테이블 전체 기준으로 결과를 생성하여 중복 데이터는 삭제 후 리턴
    2. LEFT OUTER JOIN 결과와 RIGHT OUTER JOIN 결과의 UNION 연산 결과와 동일
    3. ORACLE 표준에는 없음 LEFT JOIN UNION RIGHT JOIN으로 수행해야 함

 

예1) LEFT OUTER JOIN - STUDENT 테이블과 PROFESSOR 테이블 조인하여 1, 4학년 학생들의 이름, 학년, 지도교수이름 출력

  • 지도교수가 없는 학생 정보 출력 시 OUTER JOIN 수행
  • 기준이 되는 데이터 (생략되지 않았으면 하는 쪽)은 STUDENT 테이블이므로 LEFT OUTER JOIN 수행

 

ORACLE 표준)

  • ORACLE 표준에서는 WHERE 절에 조인 조건을 작성하므로 LEFT OUTER JOIN을 기술하지 않고 , 로 연결
  • WHERE 절에서 기준이 되는 테이블 반대 테이블 조건 컬럼 뒤에 (+)를 붙임

 

ANSI 표준)

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

 

예2) FULL OUTER JOIN - ANSI 표준

  • LEFT OUTER JOIN에서도, RIGHT OUTER JOIN에서도 출력되는 정보 가장 먼저 출력, 다음 LEFT OUTER JOIN 결과, RIGHT OUTER JOIN 결과
  • 중복 데이터는 한 번만 출력
  • (+) 기호를 양방향 전달 시 에러 발생
  • 성능적으로 좋지 않기 때문에 사용 시 주의 필요!

 

ORACLE 문법)

  • LEFT OUTER JOIN과 RIGHT OUTER JOIN 수행하여 UNION → 중복 결과 제거됨

 

 

 

'sqld' 카테고리의 다른 글

2-10) 집합 연산자  (0) 2024.08.21
2-9) 서브쿼리  (0) 2024.08.21
2-7) 조인  (0) 2024.08.21
2-6) ORDER BY 절  (0) 2024.08.21
2-5) GROUP BY 절과 HAVING 절  (0) 2024.08.21