[ JOIN이란? ]
여러개의 table을 합쳐서 새로운 table을 만드는 것.
[ JOIN의 종류 ]
- Inner Join On Condition ▷ ON 과 함께 사용하기
- Natural Join
- Inner Join Using (attrs) ▷ Using과 함께 사용하기
- ( Left or Right or Full ) Outer Join ▷ 반드시 3개중에 하나의 keyword가 필요하다.
[ Inner Join On Condition ]
- On 에 들어가는 조건이 만족되면 2개의 tuple을 합쳐서 새로운 tuple을 만든다.
- Join은 Binary Operator 이다.
[ Natural Join ]
- 같은 attritute을 기준으로 Join한다.
- 따라서 같은 attribute이 하나 이상 존재해야만 한다.
select distinct sID
from Student natural join Apply;
▷ natural join을 사용하게 되면 반환되는 tuple에는 공통된 attribute 가 단 1개만 존재한다.
▷ 따라서 위 query문은 error가 발생하지 않는다.
select distinct sID
from Student,Apply
▷ 일반적인 cross join / inner join을 사용하게 되면 반환되는 같은 attritute을 가지는 column이 존재하기 때문에 명시적으로 어떠한 column을 선택할 것인지 선택해주지 않으면 syntax error가 발생한다.
[ 'Using(attr)'을 이용한 Inner Join ]
- using(attr)은 공통적인 attr을 이용해서 Join을 해달라는 query문이다.
- natural join과 같이 반환되는 tuple에는 공통된 attribute 가 단 1개만 존재한다.
[ Inner Join + Using or On 을 이용한 paring 예제 ]
select s1.sid, s1.sname, s1.gpa, s2.sid, s2.sname, s2.gpa
from student s1, student s2
where s1.gpa = s2.gpa and s1.sid < s2.sid;
▷ cross join + where을 이용한 paring
select s1.sid, s1.sname, s1.gpa, s2.sid, s2.sname, s2.gpa
from student s1 join student s2 using(gpa)
where s1.sid < s2.sid
▷ inner join + using 을 이용한 paring
select s1.sid, s1.sname, s1.gpa, s2.sid, s2.sname, s2.gpa
from student s1 join student s2 using(gpa)
on s1.sid < s2.sid;
▷ inner join + on + using을 이용한 paring은 불가능하다.
- s1.sid < s2.sid 는 A/B B/A 와 같은 중복을 피하기위해 사용되는 보편적인 pairing technique중 하나이다.
- inner join에서 on/using은 동시에 사용 될 수 없다.
[ ( Left or Right or Full ) Outer Join ]
- 반드시 left / right / full 중에서 하나의 키워드와 같이 사용되어야 한다.
- Outer Join이라는 것은 Inner Join된 tuple들과 함께 Inner Join 되지 못한 tuple들도 포함시키겠다는 의미이다.
- " from A join B " 라는 구문 에서 A가 left B 가 right이 된다.
[ Outer Join에서 유의해야 할 사항 ]
" Outer Join is not Associative "
즉, ( A op B ) op C != A op (B op C)
[ 출처 ]
https://www.postgresqltutorial.com/
https://www.youtube.com/playlist?list=PLroEs25KGvwzmvIxYHRhoGTz9w8LeXek0
'CS fundamentals > DB( 데이터 베이스 )' 카테고리의 다른 글
Relational Design Theory [ Overview ] (0) | 2020.10.05 |
---|---|
SQL - NULL 기본 개념 (0) | 2020.10.03 |
SQL - GROUP BY / AGGREGATION 기본 개념 (0) | 2020.10.03 |
Subqueries in WHERE ( PostgreSQL 기준 ) (0) | 2020.10.02 |