조인
두 개 이상의 테이블을 연결하여 데이터를 조회하는 것
- 등가 조인: 테이블간에 동일한 조건을 이용하여 처리, = 연산자 사용
- 비등가 조인: 테이블간에 동일하지 않은 조건을 이용하여 처리, between, <, > 등의 연산자를 이용하여 처리
- 아웃 조인: 조인 조건을 만족하지 않는 경우에도 결과를 봐야 하는 경우 사용
- 셀프 조인: 자기자신의 정보를 이용하여 조인 처리
카테시안 프로덕트(Cartesian Product)
조인 조건을 생략하거나, 잘 못 설정하여 테이블 간의 모든 데이터가 연결되는 것
SET 연산자
조인을 사용하지 않고 두 개 이상의 테이블의 연관된 데이터를 조회해 오는 방법
- UNION: 테이블 간의 합집합, 중복데이터 제거, 자동으로 정렬 작업 처리
- UNION ALL: 테이블 간의 합집합
- INTERSECT: 테이블간의 중복 결과만 반환, 교집합
- MINUS: 앞 테이블의 결과에서 뒷 테이블의 결과를 뺀 결과, 차집합
SQL
-- emp 테이블 정보 SQL> select * 2 from emp; DEPT DNAME ---------- -------------------- 30 KING 40 WARD 50 KKK -- dept 테이블 정보 SQL> select * 2 from dept; DEPT DNAME ---------- -------------------- 10 RESEARCH 30 SALES 50 KKK -- 내츄럴 조인 SQL> select dept, dname 2 from emp e natural join dept d 3 ; DEPT DNAME ---------- -------------------- 50 KKK -- using 문을 이용한 조인 SQL> select * 2 from emp e join dept d using (dept) 3 ; DEPT DNAME DNAME ---------- -------------------- -------------------- 30 KING SALES 50 KKK KKK -- using 문을 이용한 조인 SQL> select * 2 from emp e join dept d using (dname) 3 ; DNAME DEPT DEPT -------------------- ---------- ---------- KKK 50 50 -- on 문을 이용한 조인 SQL> select * 2 from emp e join dept d on e.dept = d.dept 3 ; DEPT DNAME DEPT DNAME ---------- -------------------- ---------- -------------------- 30 KING 30 SALES 50 KKK 50 KKK -- 아무런 조건을 주지 않은 조인 SQL> select * 2 from emp, dept 3 ; DEPT DNAME DEPT DNAME ---------- -------------------- ---------- -------------------- 30 KING 10 RESEARCH 30 KING 30 SALES 30 KING 50 KKK 40 WARD 10 RESEARCH 40 WARD 30 SALES 40 WARD 50 KKK 50 KKK 10 RESEARCH 50 KKK 30 SALES 50 KKK 50 KKK 9 rows selected. -- 크로스 조인 SQL> select * 2 from emp cross join dept 3 ; DEPT DNAME DEPT DNAME ---------- -------------------- ---------- -------------------- 30 KING 10 RESEARCH 30 KING 30 SALES 30 KING 50 KKK 40 WARD 10 RESEARCH 40 WARD 30 SALES 40 WARD 50 KKK 50 KKK 10 RESEARCH 50 KKK 30 SALES 50 KKK 50 KKK 9 rows selected. -- full 아우터 조인 SQL> select d.dept, e.dept 2 from dept d full outer join emp e 3 on d.dept = e.dept 4 ; DEPT DEPT ---------- ---------- 30 30 40 50 50 10 -- left 아우터 조인 SQL> select d.dept, e.dept 2 from dept d left outer join emp e 3 on d.dept = e.dept 4 ; DEPT DEPT ---------- ---------- 10 30 30 50 50 -- right 아우터 조인 SQL> select d.dept, e.dept 2 from dept d right outer join emp e 3 on d.dept = e.dept 4 ; DEPT DEPT ---------- ---------- 30 30 40 50 50 -- union 을 이용 SQL> select * 2 from emp 3 union 4 select * 5 from dept 6 ; DEPT DNAME ---------- -------------------- 10 RESEARCH 30 KING 30 SALES 40 WARD 50 KKK -- union all 을 이용 SQL> select * 2 from emp 3 union all 4 select * 5 from dept 6 ; DEPT DNAME ---------- -------------------- 30 KING 40 WARD 50 KKK 10 RESEARCH 30 SALES 50 KKK 6 rows selected. -- 교집합 SQL> select * 2 from emp 3 intersect 4 select * 5 from dept 6 ; DEPT DNAME ---------- -------------------- 50 KKK -- 차집합 SQL> select * 2 from emp 3 minus 4 select * 5 from dept 6 ; DEPT DNAME ---------- -------------------- 30 KING 40 WARD
반응형
'데이타베이스' 카테고리의 다른 글
[ORACLE] Index Scan 종류 (0) | 2015.08.04 |
---|---|
[ORACLE] 인덱스 (0) | 2015.08.04 |
DBMS의 공집합과 집합함수 (0) | 2015.07.27 |
[MySQL] Error Code: 1215. Cannot add foreign key constraint (0) | 2015.07.24 |
[MySQL] ERROR 1045 (28000): 에러 (0) | 2015.07.22 |