블로그 이미지
Kanais
Researcher & Developer 퍼즐을 완성하려면 퍼즐 조각들을 하나 둘씩 맞춰나가야 한다. 인생의 퍼즐 조각들을 하나 둘씩 맞춰나가다 보면 인생이란 퍼즐도 완성되는 날이 오려나...?

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

05-05 12:30

Recent Post

Recent Comment

Recent Trackback

Archive

2015. 5. 11. 10:53 Programming/Oracle

이글은 '선문비트 고급과정'에서 강의받은 내용을 토대로 작성하였으며, 비트 교육센터 자료를 참고하여 올린내용입니다. 

문제가 될시 삭제가 될 수 있습니다.


개발환경

작성날짜    : 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
posted by Kanais