OPEN between Secret

SQL 활용(STANDARD JOIN) 본문

DB/SQLD

SQL 활용(STANDARD JOIN)

해가꿈꾸는달 2015. 3. 30. 17:54
반응형

STANDARD JOIN



- WHERE 에서 사용하던 JOIN을 FROM으로 가져온것.



종류


- INNER JOIN

- NATURAL JOIN

- USING 조건절

- ON 조건절

- CROSS JOIN

- OUTER JOIN




FROM 절에 JOIN 조건


- INNER JOIN - CROSS JOIN, INNER JOIN과는 같이 사용할수 없다.

- NATURAL JOIN - INNER JOIN의 하위 개념.

- ON 조건절 - WHERE 절의 JOIN 조건을 FROM 절의 ON 조건절로 분리하여 표시함으로 사용자가 이해하기 쉽게 함.


INNER JOIN



- 내부조인, USING 조건절이나 ON 조건절을 필수적으로 사용해야 한다.



EX)

사원 번호와 사원 이름, 소속부서 코드와 소속부서 이름을 찾아라.






NATURAL JOIN



- 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI(=) 조인을 수행한다.

- NATURAL JOIN을 명시하면 USING 조건절, ON 조건절, WHERE 절에서 JOIN 조건을 정의할 수 없다.

- JOIN에 사용된 칼럼들은 같은 데이터 유형이어야 하며, ALIAS나 테이블 명과 같은 접두사를 붙일 수 없다.

- 모든 일치되는 칼럼들에 대해 JOIN이 이루어 짐.



EX)


사원 번호와 사원 이름, 소속부서 코드와 소속부서 이름을 찾아라.






USING 조건절



- 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN을 할수 있다.

- JOIN에 사용된 칼럼들은 같은 데이터 유형이어야 하며, ALIAS나 테이블 명과 같은 접두사를 붙일 수 없음.


 EX)


DEPTNO, DNAME 2개의 칼럼을 이용해서 DEPT와 DEPT_TEMP 테이블을 조인한다.





ON조건절



- JOIN 서술부(ON 조건절)와 非 JOIN 서술부(WHERE 조건절)를 분리하여 이해가 쉬우며, 칼럼명이 다르더라도   JOIN 조건을 사용할 수 있는 장점이 있다.

- 임의의 JOIN 조건을 지정하거나, 이름이 다른 칼럼명을 JOIN 조건으로 사용하거나, JOIN 칼럼을 

   명시하기 위해서는 ON 조걸절을 사용.ON 조건절에 사용된 괄호는 옵션임.

- ON 조건절과 WHERE 검색 조건은 충돌 없이 사용 가능.

- WHERE 절의 JOIN 조건과 같은 기능을 하면서도, 명시적으로 JOIN의 조건을 구분할 수 있으므로

  가장 많이 사용될 것으로 예상됨.



EX) 


a.


사원 테이블과 부서 테이블의 사원 번호와 사원 이름, 소속부터 코드와 소속부서 이름을 찾아본다.





b.


팀과 스타디움 테이블을 팀ID로 JOIN하여 팀이름, 팀ID, 스타디움 이름을 찾아봄.

STADIUM에는 팀ID 가 HOMETEAM_ID로 되있음.






CROSS JOIN

- 테이블간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합.

- 양쪽 집합의 M*N건의 데이터 조합이 발생한다.

- 정상적인 데이터모델은 CROSS 가 필요한 경우가 많지 않지만, 튜닝이나 리포틀를 작성하기 위해 

   고의적으로 사용하는 경우는 있다.

- 데이터 웨어하우스의 개별 DIMENSION(자원)을 FACT(사실) 칼럼과 JOIN 하기 전에 

  모든 DIMENSION의 CROSS PRODUCT를 먼저 구할 때 유용하게 사용.


EX)


조인 조건 없이 사원과 부서 테이블을 조인해본다.






OUTER JOIN



- JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용가능

- STANDARD JOIN을 사용함으로 OUTER JOIN의 많은 문제점을 해결할수 있고, 

대부분의 관계형 DMBS 간에 호환성을 확보할 수 있으므로 명시적인 OUTER JOIN의 사용을 권장함.

- USING 조건절이나 ON 조건절을 필수적으로 사용.

- LEFT/RIGHT OUTER JOIN의 경우 기준이 되는 테이블이 조인 수행시 무조건 드라이빙 테이블이 됨.

  SQL 성능 저하의 원인이 될 수 있으므로 필요한 경우만 OUTER 조인을 사용.




LEFT OUTER JOIN



   - 조인 수행시 좌측 테이블에 해당하는 데이터를 모드 읽은 후, 우측 테이블에서 JOIN 대상 데이터를 읽어 온다.

   - 우측 테이블의 JOIN 칼럼에서 조인 조건 값이 없는 경우 우측 테이블에서 가져 오는 칼럼들은 NULL 값으로 채움.

   - LEFT JOIN 으로 OUTER를 생략할수 있음.



RIGHT OUTER JOIN



   - 조인 수행시 우측 테이블에 해당하는 데이터를 모든 읽은 후, 좌측 테이블에서 JOIN 대상 데이터를 읽어 온다.

   - 좌측 테이블의 JOIN 칼럼에서 조인 조건 값이 없는 경우 좌측 테이블에서 가져 오는 칼럼들은 NULL 값으로 채움.

   - RIGHT JOIN 으로 OUTER를 생략할수 있음.




FULL OUTER JOIN



    - 조인 수행시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN하여 결과를 생성.

    - 테이블 A, B가 있을때 , RIGHT OUTER JOIN과 LEFT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일.

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

    - FULL JOIN 으로 OUTER를 생략할수 있음.





출처 : The Guide for SQL Professional Sql 전문가 가이드 2013 Edition


반응형

'DB > SQLD' 카테고리의 다른 글

엔터티  (0) 2015.06.02
데이터 모델의 이해  (0) 2015.06.02
SQL 기본 및 활용(JOIN)  (0) 2015.03.30
SQL 기본 및 활용 (집계함수(GROUP BY, HAVING), ORDER BY)  (0) 2015.03.30
SQL 기본 및 활용  (0) 2015.03.09