본문 바로가기

CS fundamentals/DB( 데이터 베이스 )

SQL - JOIN 기본 개념

[ 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이 된다.

joins in postgreSQL

[ 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