CS/DB

DB - Join

빈둥벤둥 2021. 2. 11. 21:57

DB - Join

 

Join

  • 2개의 테이블에 대해 연관된 튜플들을 결합해 새로운 릴레이션을 반환한다.

  • Join은 크게 inner & outer Join 으로 구분된다.
  • Join 속성: 연결 고리가 되는 공통 속성을 의미한다.

 

Inner Join

  • Join조건에 만족하는 결과만 조회한다.
  1. Equi Join
    • Join 속성을 기준으로 '=' 비교에 의해 같은 값을 가지는 행을 연결하여 결과를 생성한다.
    • ex) SELECT t1.name FROM t1, t2 WHERE t1.id=t2.id
  2. Non-Equi Join
    • Join 조건에 '=' 조건이 아닌 나머지 비교 연산자(BETWEEN, <, > 등)를 사용하는 Join방법.
    • ex) SELECT t1.name FROM t1, t2 WHERE t1.age > t2.age

 

Outer Join

  • Join 조건에 만족하지 않는 튜플도 결과에 포함한다.
  1. Left Outer Join
    • Join 문의 왼쪽에 있는 테이블의 모든 결과를 가져온 후 오른쪽 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 null로 표시한다.
    • ex) SELECT a.name b.age FROM a left outer join b ON a.id = b.id
  2. Right Outer Join
    • Join 문의 오른쪽에 있는 테이블의 모든 결과를 가져온 후 왼쪽 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 null로 표시한다. 
    • ex) SELECT a.name b.age FROM a right outer join b ON a.id = b.id
  3. Full Outer Join
    • Left Outer Join과 Right Outer Join을 합친 것으로, 양쪽 모두 조건이 일치하지 않는 것까지 모두 결합해 출력한다.
    • ex) SELECT a.name, b.age FROM a full outer join b ON a.id = b.id
  • 각각을 벤다이어그램으로 표현하면 다음과 같다.

Left Outer Join/Right Outer Join/Full Outer Join

 

reference

goodgid.github.io/DB-Inner-Join/

goodgid.github.io/DB-Outer-Join/

github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Database#%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

velog.io/@hygoogi/%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EB%AA%A8%EC%9D%8C#%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

m.blog.naver.com/PostView.nhn?blogId=wideeyed&logNo=221435077767&proxyReferer=https:%2F%2Fwww.google.com%2F