테이블 조인을 수행할 조인 단계별로 다른 조인기법 사용

 

1. NL JOIN

프로그래밍에서 사용하는 중첩된 반복문과 유사한 방식으로 조인 수행

결과를 가능한 빨리 화면에 보여주어야 하는 온라인 프로그램에 적당한 조인 기법

반복문 외부에 있는 테이블을 선행테이블 또는 외부테이블이라 하고 반복문 내부에 있는 테이블을 후행테이블 또는 내부테이블이라

FOR 선행 테이블 읽음 → 외부 테이블(Outer Table)

FOR 후행 테이블 읽음 → 내부 테이블(Inner Table)

(선행 테이블과 후행 테이블 조인)

먼저 선행테이블 조건 만족하는 추출하고 후행을 읽으면서 조인 수행, 선행테이블 조건만족하는 모든 행의 수만큼 반복 수행

따라서 만족하는 행수가 많으면 그만큼 후행 테이블 조건 작업 반복 수행

랜덤방식으로 데이터 액세스 하기에 처리 범위가 좁은 것이 유리

작업방식

  1. 선행 테이블에서 주어진 조건을 만족하는 행을 찾음 만족하지 않으면 해당 데이터는 필터링
  2. 선행 테이블의 조인 값을 가지고 후행 테이블에서 조인 수행 선행테이블의 조인값이 후행에 존재하지 않으면 선행 테이블 데이터 필터링됨
  3. 선행 테이블의 조건을 만족하는 모든 행에 대해서 1 작업 반복 수행 인덱스에서 추출한 레코드 식별자를 이용하여 후행 액세스

save image

 

2. Sort Merge JOIN

조인 칼럼을 기준으로 데이터를 정렬하여 조인 수행 NL JOIN 랜덤으로 읽던 것의 단점을 개선함

, 정렬할 데이터가 많아 메모리를 넘어 임시 영역을 사용하는 경우 성능 저하 발생 그래서 대량은 HASH JOIN 사용

비동등 조인 조건에서 작업 가능한 것이 장점(HASH JOIN 동등만 가능)

인덱스를 사용하지 않기때문에 인덱스 미존재시 사용가능

정렬 작업이 미리 수행되있는 조인은 추가 정렬 작업이 이루어지지 않음

save image

작업방식

  1. 선행 테이블에서 주어진 조건을 만족하는 행을 찾음
  2. 선행 테이블에의 조인 키를 기준으로 정렬 작업을 수행 조건을 만족하는 모든 행에 대해 반복 수행
  3. 후행 테이블에서 주어진 조건을 만족하는 행을 찾음
  4. 후행 테이블에의 조인 키를 기준으로 정렬 작업을 수행 조건을 만족하는 모든 행에 대해 반복 수행
  5. 정렬된 결과를 이용하여 조인을 수행, 성공하면 추출버퍼에 넣음

 

3. HASH JOIN

HASH 기법 이용하여 조인 수행

서로 동일한 해쉬 값을 갖는 것들 사이에서 실제 값이 같은지 비교하면서 조인 수행

NL조인의 랜덤 액세스 문제점과 Sort Merge JOIN 정렬작업의 부담을 해결의 위해 등장

인덱스 존재 하지 않아도 사용 가능

동등 조건에서만 사용 가능

결과 수가 적은 테이블을 선행테이블로 선정, 메모리 용량을 넘어서면 임시영역에 저장되기 때문에

그래서 선행 테이블을 Build Input, 후행테이블을 Prove Input으로 불림

save image

 

작업방식

  1. 선행 테이블에서 주어진 조건을 만족하는 행을 찾음
  2. 선행 테이블의 조인 키를 기준으로 해쉬 함수를 적용하여 해쉬 테이블 생성 조인칼럼과 SELECT 절에서 필요로 하는 칼럼도 함께 저장됨

반복수행

  1. 후행 테이블에서 주어진 조건을 만족하는 행을 찾음
  2. 후행 테이블의 조인 키를 기준으로 해쉬 함수를 적용하여 해방 버킷을 찾음 조인 키를 이용해서 실제 조인될 데이터를 찾음
  3. 조인에 성공하면 추출버퍼에 넣음

후행 테이블의 조건을 만족하는 모든 행에 대해서 반복 수행


'자격증 공방 > SQLD' 카테고리의 다른 글

제 29회 SQLD 합격 후기  (4) 2018.08.29
별첨) SQL 정규화 방법  (0) 2018.07.17
제 5-2절 인덱스 기본  (0) 2018.07.17
제 5-1절 옵티마이저와 실행계획  (0) 2018.07.17
제 4-8장 절차형 SQL  (0) 2018.07.11

1. STANSARD SQL 개요

 

새로운 기능을 포함

- STANDARD JOIN 기능 추가 (CROSS, OUTER JOIN 등 새로운 FROM 절 JOIN 기능들)

- SCALAR SUBQUERY, TOP-N QUERY 등의 새로운 SUBQUERY 기능들

- ROLLUP, CUBE, GROUPING SETS 등의 새로운 리포팅 기능

- WINDOW FUNCTION 같은 새로운 개념의 분석 기능들

 

. 일반 집합 연산자

E.F.Codd박사가 처음으로 개발

save image

 

  1. UNION 연산 UNION 기능

수학적 합집합 제공, 공통의 교집합 중복을 없애기 위한 작업

UNION ALL 공통 집합을 중복해서 그대로 보여줌, 정렬작업이 일어나지 않아서 사용 권고함

  1. INTERSECTION 연산 INTERSECT 기능

수학적 교집합

  1. DIFFRENCE 연산 EXCEPT(ORACLE MINUS)기능

수학적 차집합, 첫번째 집합에서 두번째 집합과의 공통집합을 제외한 부분

  1. PRODUCT 연산 CROSS JOIN 기능

곱집합, 생길수있는 모든 데이터 조합으로 집합의 M*N, CARTESIAN PRODUCT로도 불림

 

. 순수 관계 연산자

save image

  1. SELECT 연산 WHRER절로 구현 SELECT연산과 절은 다른 의미
  2. PROJECT 연산 SELECT절로 구현 칼럼 선택기능 수현
  3. (NATURAL) JOIN 연산 다양한 JOIN 기능으로 구현 INNER, OUTER, USING, ON 다양하게 발전
  4. DIVIDE연산 사용되지 않음

 

관계형 데이터 베이스

요구사항분석, 개념적 데이터 모델링 논리적 데이터 모델링 물리적 데이터 모델링

엔티티확정 정규화 과정, M:M 관계 분해하는 절타

특히, 정규화과정은 데이터 정합성과 데이터 저장공간 절약을 위해 엔티티 최대한 분리하는 작업으로 3차정규형이나 보이스코드 정규화까지 진행

정규화 이후 하나의 주제에 관련한 여러 엔티티가 나눠지고 그것들은 연결하기 위해 JOIN 작업이 이루어짐

 

2. FROM JOIN 형태


  • INNER JOIN     
  • NATURAL JOIN  : INNER JOIN 하위개념, 동일한 이름을 갖는 모든 칼럼에 대해 EQUI조인 수행
  • USING 조건절   : 동일한 칼럼명
  • ON 조건절      : WHERE 조인 조건처럼 ON 조건절로 분리하여 표시, 명시적으로 조건 구분할 있고 컬럼명이 다르더라도 사용가능
  • CROSS JOIN
  • OUTER JOIN

 

3. INNER JOIN


내부 JOIN, 동일한 값이 있는 행으로만 반환

USING 조건절, ON 조건절을 사용

예제) SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME

 FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;

 

4. NATURAL JOIN


테이블간 동일한 이름이 갖는 모든 칼럼에 대해 EQUI JOIN 수행

USING/ON/WHERE 조건절에서 정의 불가능, SQL SERVER 사용 불가

동일한 칼럼 데이터가 같은 타입이여야하고 별명이나 접두사를 붙일 없음, 도메인과 칼럼명이 동일해야함

 

5. USING 조건절


FROM 절의 USING 조건절을 이용하면 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 EQUI JOIN 할수 있음,

SQL SERVER 사용 불가

별명과 접두사를 붙일 없음

 

6. ON 조건절

WHERE 조건절과 불리한 JOIN 조건절, 칼럼명이 달라도 사용가능

임의의 JOIN 조건을 지정하거나 이름이 다른 칼럼명을 JOIN하거나 칼럼을 명시하기 위해 사용

별명이나 접두사를 사용하여 SELECT절에 사용되는 칼럼 명확하게 지정 필요

가독성이 떨어지는 단점

 

. WHERE 절과의 혼용

. ON 조건절 + 데이터 검증 조건 추가

: ON 조건절 안에서도 데이터 검색 조건 추가가능 , OUTER JOIN에서 추가 조건 경우는 ON 절에 표기

. ON 조건절 예제

. 다중 테이블 JOIN

 

7. CROSS JOIN

CARTESIAN PRODUCT 또는 CROSS PRODUCT 표현, M*N건으로 조합, 모든 데이터 조합을 말함

WHERE절에 조인조건 추가 가능하지만 INNER JOIN 같은 효과이기 때문에 사용하는 의미가 없음

 

8. OUTER JOIN

동일한 값이 없는 행도 반환할 사용

ORACLE 칼럼 뒤에 (+) 표시

, WHERE 검색조건의 불분확한 단점, IN이나 OR연산자 사용시 에러, (+) 누락 칼럼 존재시 오류 발생, FULL OUTER JOIN 미지원

 

. LEFT OUTER JOIN

왼쪽에 있는 값은 동일한 조인 값이외에도 전부 출력, LEFT JOIN 으로도 생략해서 사용 가능

. RIGHT OUTER JOIN

오른쪽 있는 값은 동일한 조인 값이외에도 전부 출력, RIGHT JOIN 으로 생략해서 사용 가능

. FULL OUTER JOIN

, 오른쪽 데이터를 모두 읽어 결과 생성, LEFT RIGHT 합집합 결과랑 동일

, UNION ALL 아닌 UNION 기능과 같으므로 중복된 데이터는 삭제

FULL JOIN으로 생략해서 사용 가능

 

9. INNER VS. OUTER VS. CROSS JOIN 비교

save image

'자격증 공방 > SQLD' 카테고리의 다른 글

제 4-3절 계층형 질의와 셀프 조인  (0) 2018.07.11
제 4-2절 집합 연산자 (SET OPERATOR)  (0) 2018.07.11
제 3-9절 조인(JOIN)  (0) 2018.07.07
제 3-8절 ORDER BY절  (0) 2018.07.07
제 3-7절 GROUP BY, HAVING 절  (0) 2018.07.07

 

1. JOIN 개요


이상의 테이블 들을 연결 또는 결합하여 데이터를 출력하는

PK, FK 연관되어 있거나 혹은 없어도 논리적 연결로도 가능

여러 테이블과 나열이 되어도 처리할 때는 두개의 집합 간에만 조인이 일어남

원하는 조인 테이블 - 1 이후 집합간의 조인 갯수

 

2. EQUI JOIN


등가조인, 서로 정확하게 일치하는 값을 가진 경우, 관계형 데이터베이스의 장점

대부분 PK, FK 관계로 이루어짐 (모든것은 아님)

 

SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...

FROM 테이블1, 테이블2

WHERE 테이블1.칼럼명1 = 테이블2.칼럼명2; → WHERE 절에 JOIN 조건을 넣는다

 

SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...

FROM 테이블1 INNER JOIN 테이블2

ON 테이블1.칼럼명1 = 테이블2.칼럼명2; → ON 절에 JOIN 조건을 넣는다.

 

SELECT 구문에서 유일한 이름을 가진 컬럼이라면 테이블명을 붙이지않아도 되지만 테이블에 동일한 칼럼명이 있다면 지정해주어야

또한 개발자나 사용자의 가독성이나 유지보수성을 효과, 오류를 방지하고 일관성을 위해 테이블명을 지정해주는 습관 필요

N개의 테이블로부터 필요한 데이터를 조회하기 위한 JOIN조건은 N-1 필요함

테이블 명이 길어 SELECT 구문이 길어짐으로 FROM절의 테이블에도 별명을 사용할 있음

별명 사용시에는 SELECT, WHERE절에서는 별명을 사용해야

 

3. NON EQUI JOIN


비등가조인, 서로 값이 일치하지 않는 경우 >, < , >=, <= , BETWEEN 연산자 사용(모델에 따라 불가능할 있음)

SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...

FROM 테이블1, 테이블2

WHERE 테이블1.칼럼명1 BETWEEN 테이블2.칼럼명1 AND 테이블2.칼럼명2;

 

4. 3 이상 TABEL JOIN


예제)SELECT P.PLAYER_NAME 선수명, P.POSITION 포지션, T.REGION_NAME 연고지, T.TEAM_NAME 팀명, S.STADIUM_NAME 구장명

FROM PLAYER P, TEAM T, STADIUM S

WHERE P.TEAM_ID = T.TEAM_ID AND T.STADIUM_ID = S.STADIUM_ID

ORDER BY 선수명;

 

또는 INNER JOIN을 명시하여 사용할 수도 있다.

SELECT P.PLAYER_NAME 선수명, P.POSITION 포지션, T.REGION_NAME 연고지, T.TEAM_NAME 팀명, S.STADIUM_NAME 구장명

FROM PLAYER P INNER JOIN TEAM T

ON P.TEAM_ID = T.TEAM_ID

INNER JOIN STADIUM S

ON T.STADIUM_ID = S.STADIUM_ID

ORDER BY 선수명;


'자격증 공방 > SQLD' 카테고리의 다른 글

제 4-2절 집합 연산자 (SET OPERATOR)  (0) 2018.07.11
제 4-1절 표준 조인  (0) 2018.07.11
제 3-8절 ORDER BY절  (0) 2018.07.07
제 3-7절 GROUP BY, HAVING 절  (0) 2018.07.07
제 3-6절 함수  (0) 2018.07.07

+ Recent posts