4. JOIN 기법
[기타SQL]/oracle SQL 2014. 8. 27. 19:29 |4장 JOIN
* 디스크에 data를 저장하고, 작업은 메모리(RAM)에서 한다. RAM이 많으면 많을수록 속도가 빨라지는 것은 아니다. 하나의 테이블에 칼럼이 너무 많으면, 일부 칼럼만 SELECT해도, 다른 칼럼도 전부 조회하므로 오래걸린다. 그래서 여러테이블에 흩어져 있는 정보 중에서 사용자가 필요한 정보만 가져와 가상의 테이블처럼 만드는 기법인 JOIN을 사용한다.
* Ansi(표준)join이 아무데서나 쓸 수 있으나, oracle에서는 oracle용 Join을 쓰는게 좋다.
* Oracle Join과 ANSI Join의 비교
Oracle Join에서는 테이블이 여러 개있을때 ,(콤마)로 구분하나, ANSI Join에서는 테이블이 여러 개 있을 때 JOIN(또는 INNER JOIN)으로 구분한다. Oracle Join에서의 where절을 ANSI Join에서는 On을 쓴다.
1. 카티션곱 (=cross join)
: 조인 조건절이 잘못 기술되었거나 아예 없을 경우 해당 테이블에 대한 모든 데이터를 가져오는 현상을 말한다. (ANSI에서는 cross join이라고 부름.) → 테이블 행수를 모두 곱한 값의 결과가 출력된다. (현업에서 쿼리를 테스트하기 위해 의도적으로 카티션 곱을 사용하는 경우도 많지만, 의도하지 않은 카티션곱은 정말 위험하므로 주의해야 한다.)
2. EQUI Join (등가 조인)
: 양쪽 테이블에 같은 조건이 존재할 경우의 값만을 가져오는 Join
- 기준이 되는 테이블을 이꼴(=) 왼쪽에 써준다.
→ 여기서 ANSI join의 경우, 쿼리 2번과 3행의 조건으로 join을 먼저 수행한 후, 그 결과값을 가지고 4번과 5번행의 조건으로 다시 join을 수행하는 것이다. join테이블이 늘어날 경우 계속 join~on조건을 추가해주면 된다.
3. Non-Equi Join (비 등가 조인)
: 같은 조건이 아닌, 크거나 작거나 하는 경우의 조건으로 Join을 수행할 때.
→ between보다는 비교연산자를 사용하는 것이 더 성능에 좋으므로, 아래처럼 가급적 비교연산자를 사용하는 것이 좋다.
4. OUTER join (아우터 조인) (속도 완전대박 느림_절대 쓰지 말 것! pdf참조)
: 한쪽 테이블에는 데이터가 있고, 한쪽 테이블에 없는 경우에 데이터가 있는 쪽 테이블의 내용을 전부 출력하게 함.
↔ INNER join (이너 조인) : 모든 테이블에 데이터가 존재하는 경우
→ 데이터가 없는 쪽에 (+)기호를 붙여주면, 데이터가 있는 테이블쪽에 데이터가 나온다!! (oracle)
(ansi에서는 반대로 데이터가 있는 쪽에 아우터조인시킴 ex. LEFT OUTER JOIN : 이꼴 기준으로 왼쪽에!!)
: 교수가 결정되지 않은 학생의 명단이므로, 교수쪽에 (+)기호를 붙여준다.
5. SELF join (셀프 조인)
: 원하는 데이터가 하나의 테이블에 다 들어가 있는 경우 (오라클이 같은 테이블을 복사해서 만들게 함)
예1)
예2)
[ 결과화면 ]
'[기타SQL] > oracle SQL' 카테고리의 다른 글
11. SEQUENCE와 SYNONYM(동의어) _ 실습해보고다시정리 (0) | 2014.09.03 |
---|---|
10. 서브쿼리(Sub Query) (0) | 2014.09.02 |
9. VIEW(뷰) _ 연습문제 다시 풀어볼 것. (0) | 2014.09.02 |
8. INDEX(인덱스) ★★★ (0) | 2014.09.01 |
7. 제약조건 ★★★ (0) | 2014.08.28 |
6. DML (Data Manipulation Language) (0) | 2014.08.28 |
5. DDL문장과 딕셔너리 (0) | 2014.08.27 |
3. SQL 복수행 함수(그룹함수) _연습문제다시해보기 (0) | 2014.08.26 |
2. SQL 단일행 함수 (0) | 2014.08.24 |
1. SELECT 문장을 이용해 원하는 데이터 가져오기 (0) | 2014.08.23 |