이글은 '선문비트 고급과정'에서 강의받은 내용을 토대로 작성하였으며, 비트 교육센터 자료를 참고하여 올린내용입니다.
문제가 될시 삭제가 될 수 있습니다.
개발환경
작성날짜 : 2011-03-09 |
Advanced Query
(Join)
목차
* Join
* Cartesian Product
* Equijoin
* Non-equijoin
* Outer join
* Self join
Join
- 두개 이상의 table을 연관시키는 것을 Join이라고 하며 Where절 내용을 Join condition이라고 한다.
Ex) select * from s_emp, s_dept where s_dept.id = s_emp.dept_id;
최종적으로 얻고자 하는 data가 여러 개의 table에 흩어져 있는 경우, 또는 최종적으로 얻고자 하는 data를 가져오기 위해 여러 table을 연관시켜야 하는 경우 Join을 사용한다.
대부분의 경우 한 table의 Primary key와 다른 table의 Foreign Key를 사용하여 Join condition을 작성하게 된다.
Join condition이 빠지면 Cartesian product가 발생하므로 유의하여야 함.
Table Join의 Types
* Oracle Term
- Equijoin
- Non-equijoin
- Outer join
- Self join
* ANSI Term
- Cross join
- Natural join, Join Using, Join On
- Right Outer Join, Left Outer Join, Full Outer Join
Table Alias
Column이 어느 table 소속인지를 명확히 하기 위해 아래와 같이 where절을 수정.
SQL> select * from s_dept, s_emp where id = dept_id; (Error !!)
SQL> select * from s_dept, s_emp where s_dept.id = s_emp.dept_id;
복잡한 select 문장을 작성하는 경우, 또는 table 명이 길어서 불편하거나, 또는 동일한 table을 두 번 이상 from절에 사용하는 경우 등에는 table alias를 쓰자.
SQL> select * from s_dept d, s_emp e where d.id = e.dept_id;
Equijoin
Equijoin의 예
Join condition 이외에 WHERE 절에 추가적인 condition을 AND나 OR 연산자를 이용하여 줄 수 있다.
31번 부서의 이름과 그 부서에 근무하는 사원의 이름을 출력하시오.
Non-equijoin
Equal(=)이외의 연산자를 사용하여 join condition을 작성한 경우 non-equijoin이라고 한다.
사원의 이름과 직종, 급여 그리고 급여의 등급을 출력하시오.
Outer Join
Outer join operator는 하나의 SELECT문 안에서 하나의 table에만 사용할 수 있으며 아래와 같은 구조를 같는다.
SELECT table.column, table.column
FROM table1.table2
WHERE table1.column(+) = table2.column;
(+)연산자는 Join 조건의 필요한 곳에 붙이도록 한다. 어느 족에 붙이느냐에 따라 의미가 변하므로 올바른 위치에 붙여야 한다.
(보통.. Foreign Key부분에 쓰이질 않을까??? )
위의 outer join 경우, table1에 matching 되는 row가 없는 table2의 모든 row에 대해서 Oracle은 table1의 select list 값들을 모두 NULL로 return해준다.
두 가지를 비교
Self Join
Self join의 경우 동일한 table 명이 2개 이상 사용되므로 반드시 table alias를 사용한다.
사원의 이름과 매니저의 이름을 출력하시오.
모든 사원의 ID, Last_name, Salary, 매니저의 Last_name, 소속부서의 Name을 출력하시오.
'Programming > Oracle' 카테고리의 다른 글
[Oracle] 명령어 (0) | 2015.05.11 |
---|