[정보처리산업기사] 83강 DML - JOIN

DongHo Im·2022년 2월 1일
0

정보처리산업기사

목록 보기
83/86

1. JOIN의 개념

JOIN(조인)은 2개의 테이블에 대해 연관된 튜플들을 결합하여, 하나의 새로운 릴레이션을 반환한다.

  • 크게 INNER JOIN과 OUTER JOIN으로 구분된다.

  • JOIN은 일반적으로 FROM 절에 기술하지만, 릴레이션이 사용되는 어디에나 사용할 수 있다.

사용 형식과 의미

UNION

  • 구조가 동일한 두 테이블을 통합할 땐 UNION을 사용한다. 중복된 행은 한 번만 출력

UNION ALL

  • 구조가 동일한 두 테이블을 통합한 후 중복된 행도 그대로 출력한다

INTERSECT

  • 두 SELECT 문의 조회 결과 중 공통된 행만 출력한다

EXCEPT

  • 첫 번째 SELECT문의 결과에서 두 번째 SELECT 문의 조회 결과를 제외한 행을 출력한다

JOIN

  • 2개 테이블에 대해 연관된 튜플을 결합하여 하나의 릴레이션을 반환

INNER JOIN

  • 두 릴레이션에서 관련이 있는 튜플만 표시

EQUI JOIN

  • '=' 비교에 의해 같은 값을 가지는 행을 연결하여 결과를 생성하는 방법,
    보통 WHERE 절을 이용해 조인 (WHERE 테이블명1, 속성명=테이블명2, 속성명;)

NON-EQUI JOIN

  • 잘 사용하지 않음

OUTER JOIN

  • JOIN 조건에 만족하지 않는 튜플도 결과로 출력

LEFT OUTER JOIN

  • 좌측 릴레이션이 기준이 되어 좌측 릴레이션 튜플은 모두 표시, 우측은 관련있는 튜플만 표시

RIGHT OUTER JOIN

  • 우측 릴레이션이 기준이 되어 우측 릴레이션 튜플은 모두 표시, 좌측은 관련있는 튜플만 표시

2. INNER JOIN

INNER JOIN은 일반적으로 EQUI JOIN, NON-EQUI JOIN으로 나뉜다.

  • 조건이 없는 inner join을 수행하면 cross join과 동일한 결과를 얻을 수 있다.

EQUI JOIN

  • JOIN 대상 테이블에서 공통 속성을 기준으로 = 비교에 의해 같은 값 가지는 행 연결하여 결과 생성

  • NATURAL JOIN : JOIN조건이 = 일 때 동일한 속성이 두 번 나타는데, 그것을 제거하여 한번만 표기

  • JOIN 속성 : 연결 고리가 되는 공통 속성

WHERE 절 이용

SELECT 테이블명1.속성명, 테이블명2.속성명,.. 
  FROM 테이블명1, 테이블명2 ...
 WHERE 테이블명1.속성명 = 테이블명2.속성명 ;

NATURAL JOIN

SELECT 테이블명1.속성명, 테이블명2.속성명,...
  FROM 테이블명1 NATURAL JOIN 테이블명 2 ;
  • NATURAL JOIN은 조인할 속성을 지정하지 않으므로 두 테이블에 이름과 도메인이 같은 속성이 반드시 존재해야 함

JOIN ~ USING 절 이용

SELECT 테이블명1.속성명, 테이블명2.속성명,...
  FROM 테이블명1 JOIN 테이블명2 USING(속성명) ;

NON – EQUI JOIN

  • JOIN 조건에 = 조건이 아닌 비교연산자 사용하는 JOIN
SELECT 테이블명1.속성명, 테이블명2.속성명, ...
  FROM 테이블명1, 테이블명2, ...
WHERE NON-EQUI JOIN 조건(비교연산) ;

3. OUTER JOIN

OUTER JOIN은 릴레이션에서 JOIN 조건에 만족하지 않는 튜플도 결과로 출력하기 위한 방법

  • INNER JOIN 결과를 구한 후 뒤에 OUTER JOIN 한 결과를 추가함

LEFT OUTER JOIN

우측항 릴레이션의 어떠한 튜플과도 맞지 않는 좌측 항 릴레이션에 있는 튜플들에 우측항 속성 튜플 값을 NULL로 붙임

  • 좌측 릴레이션이 기준이 되어 좌측 릴레이션에 있는 튜플은 모두 표시하고 우측 릴레이션에서는 관련 있는 튜플만 표시
SELECT 테이블명1.속성명, 테이블2.속성명, ...
  FROM 테이블명1 LEFT OUTER JOIN 테이블명2
    ON 테이블명1. 속성명 = 테이블명2. 속성명 ;
SELECT 테이블명1.속성명, 테이블명2.속성명, ...
  FROM 테이블명1, 테이블명2
WHERE 테이블명1. 속성명 = 테이블명2. 속성명(+) ;

RIGHT OUTER JOIN

INNER JOIN의 결과를 구한 후, 좌측항 릴레이션의 어떠한 튜플과도 맞지 않은 우측 항의 릴레이션에 있는 튜플들에 좌측항 속성 튜플 값을 NULL로 붙임

  • 우측 릴레이션이 기준이 되어 우측 릴레이션에 있는 튜플은 모두 표시하고 좌측 릴레이션에서는 연관된 튜플만 표시
SELECT 테이블명1.속성명, 테이블명2.속성명, ...
  FROM 테이블명1 RIGHT OUTER JOIN 테이블명2
    ON 테이블명1.속성명 = 테이블명2.속성명 ;
SELECT 테이블명1.속성명, 테이블명2.속성명, ...
  FROM 테이블명1, 테이블명2
 WHERE 테이블명1.속성명(+) = 테이블명2.속성명

LEFT OUTER JOIN 과 RIGHT OUTER JOIN 은 FROM절 테이블 위치만 서로 바뀌면 같은 결과를 가져옴

FULL OUTER JOIN

LEFT OUTER JOIN과 RIGHT OUTER JOIN을 합쳐 놓은 것이다.

SELECT 테이블명1.속성명, 테이블명2.속성명, ...
  FROM 테이블명1 FULL OUTER JOIN 테이블명2
    ON 테이블명1.속성명 = 테이블명2.속성명 ;

4. SELF JOIN

같은 테이블에서 2개의 속성을 연결하여 EQUI JOIN 하는 것

SELECT 별칭1.속성명, 별칭1.속성명,...
  FROM 테이블명1 AS 별칭1 
  JOIN 테이블명2 AS 별칭2
    ON 별칭1.속성명 = 별칭2.속성명 ;

테이블 1의 속성 하나가 테이블1의 또 다른 속성 하나랑 연결될 때 테이블 하나에 별칭을 2개 달아서 같은 테이블을 두 개로 복사해서 본다고 생각하고 대응시키는거라고 보면된다.

profile
[DATABASE] 비전공자 출신의 개발 도전!

0개의 댓글