DB/Oracle

조인을 써먹어 보자 - Join 이야기

seungdols 2015. 8. 29. 17:17


조인이란? 연관된 테이블을 묶어서 원하는 데이터를 추출하는 기법입니다.



기본적으로 내부조인, 외부조인이 있는데, 내부조인에서 동등조인을 가장 흔히 사용합니다.



세미 조인은 서브 쿼리 내에서 존재하는 데이터만 추출하는 조인입니다.

바로 밑은 EXIST 키워드를 사용했네요,




여기서는 IN 연산자를 사용 했네요 ? ㅎ




--위의 세미조인은 일반 조인과 다른 점은 중복이 제거 된다는 점이 다르다.

아래는 일반조인의 예시입니다.




셀프 조인이란? 말 그대로 자기 자신의 테이블을  가리키는 것을 말합니다.




--안티조인은 서브 쿼리의 없는 메인 쿼리의 데이터만 추출하는 것 세미 조인과 반대 개념이다.


SELECT a.employee_id, a.emp_name, a.department_id, b.department_name
 FROM employees a, departments b
 WHERE a.department_id = b.department_id
   AND a.department_id NOT IN (
                                SELECT department_id
                                 FROM departments
                                 WHERE manager_id IS NULL
                              );
--NOT EXIST로도 가능하다.





--외부조인
--일반조인을 확장한 개념으로 조인 조건에 만족하는 데이터뿐만 아니라 어느 한쪽 테이블의
--조인 조건에 명시된 컬럼에 값이 없거나 (NULL) 해당 로우가 아예 없더라도 추출한다.

- 외부조인시 고려 사항
조인대상 테이블 중 데이터가 없는 테이블 조인 조건에 + 를 붙인다.
외부 조인의 조인 조건이 여러개 일때는 모든 조건에 +를 붙인다.
한번에 한 테이블에만 외부 조인을 할 수 있다.
+연산과 OR은 같이 사용 할 수 없다.
+연산과 IN연산자를 같이 사용 X




SELECT a.department_id, a.department_name, b.job_id, b.department_id
 FROM departments a,
      job_history b
WHERE a.department_id = b.department_id(+);--외부조인



--카티시안 곱

그냥 두 테이블을 곱해버리는 효과이다.

SELECT a.employee_id, a.emp_name, b.department_id, b.department_name
 FROM employees a, departments b;




반응형