본문 바로가기
oracle/[SQL] SQL

5장. JOIN

by #moonyz 2014. 10. 2.

[관계형 데이터베이스(RDBMS)]

- 모든 정보들이 하나의 테이블에 몰려 있는 것이 아니라 여러곳의 테이블에 정규화 되어 흩어져 있다는 뜻

- 각테이블 끼리 서로 특정한 규칙이나 관계가 있도록 설계

JOIN : 여러 테이블에 흩어져 있는 정보 중에서 사용자가 필요한 정보만 가져와서 

    가상의 테이블 처럼 만들어서 결과를 보여줌.


[JOIN]

- oracle용 JOIN : oracle 제품에서 사용되는 oracle용 JOIN

- 표준(ANSI) JOIN : 모든 제품들에서 공통적으로 사용가능




1. Cartesian Product (카티션 곱)

- JOIN 쿼리 중에서 where절에 기술하는 join조건이 잘못 기술되었거나 아예없을 경우 발생

- ANSI SQL 에서는 'CROSS JOIN' 이라고 함

- JOIN 작업에 참조되는 테이블 행수를 모두 곱한 값의 결과

- 의도적으로 사용할 경우 : 쿼리 성능을 테스트 할 대량의 테스트용 테이블을 생성할 경우







2. EQUI JOIN (등가 JOIN)

- 일반적으로 많이 사용되는 조인

- where 절에 기술되는 JOIN 조건으로 양쪽 테이블에 같은 조건이 존재할 경우의 값만 가져오는 JOIN



ORACLE JOIN 구문

SELECT  a.컬럼명1, b.컬럼명2

   FROM  테이블1 a, 테이블2 b

 WHERE  a.컬럼명=b.컬럼명


ANSI JOIN 구문

SELECT  a.컬럼명1, b.컬럼명2

   FROM  테이블1 a   JOIN  테이블2 b

       ON  a.컬럼명=b.컬럼명






3. NON-EQUI JOIN (비 등가 JOIN)

- 조건이 같은 조건이 아닌 크거나 작거나 하는 경우의 조건을 수행할때 사용 (등가JOIN은 같은조건을 가진 데이터 JOIN)

 

- 예제 : 조인테이블 3개일때 


- 예제 






4. OUTER JOIN

- INNER JOIN : 모든테이블에 데이터가 존재하는 경우에만 결과 값을 출력 (equi join, non-equi join )

- 한쪽 테이블에는 데이터가 있고 한쪽 테이블에 없는 경우에 데이터가 있는 쪽 테이블의 내용을 전부 출력하게 하는 방법

- 아우터 조인은 DB 성능에 아주 나쁜 영향을 줄 수 있음을 주의

- ORACLE JOIN 구문과 ANSI JOIN 구문이 차이가 있음!!


step01. student 테이블에 profno(교수번호)가 없는 학생이 있음 (아직 지도교수가 결정되지 않은 학생)



step02. student 테이블과 professor 테이블을 조인(inner-equi join) 했을 경우 

  총 20명의 학생 중 교수번호가 없는 5명을 제외한 나머지 15명 학생에 대한 결과값만 출력된다.



step03. OUTER 조인을 한다면 데이터가 없는 내용도 전부 출력 가능

- ORACLE OUTER JOIN : 조건절에서 데이터가 없는 쪽에 (+) 표시 추가 

   (학생은 존재하지만 교수가 없는 내용을 출력해야 하기때문에 교수번호쪽에 (+) 기호를 붙임)



- ANSI OUTER JOIN : 데이터가 있는 쪽에 표시 (LEFT OUTER JOIN / RIGHT OUTER JOIN)

   (학생은 존재하고 교수가 없으니 왼쪽 조건에 데이터가 있는 행을 출력하게 하기 위해 LEFT OUTER JOIN 사용)





5. SELF JOIN

- 하나의 테이블에 원하는 데이터가 다 들어있는 경우에 사용

- 하나의 테이블을 메모리상에서 별명을 각각 설정하여 가상으로 2개의 테이블로 만든후 JOIN


EX) dept2 테이블에서 '부서명'과 '상위부서명'을 출력하시오


step1. 하나의 dept2 테이블에 '부서코드'와 '상위부서코드', '부서명'의 값이 다 존재함

          


step 2. 하나의 dept2 테이블에 별명을 각각 a, b로 설정하여 조인함






연습문제



문제 


답 : 




문제 : 


답 : 





'oracle > [SQL] SQL' 카테고리의 다른 글

7장. DML  (0) 2014.10.06
6장. DDL  (0) 2014.10.02
4장. 복수행 함수 (그룹함수)  (0) 2014.10.01
3장. 정규식함수  (0) 2014.09.30
2장. 단일행 함수  (0) 2014.09.29

댓글