😺Data Base/😻 SQLD

[SQL] JOIN

디카페인라떼 2022. 9. 20. 20:16

참고한 강의

https://opentutorials.org/module/4118

 

SQL Join

수업소개 관계형 데이터베이스에서 테이블과 테이블의 관계를 이용해서 새로운 테이블을 만들어내는 태크닉인 join을 알려드리는 수업입니다.  이 수업은 아래와 같은 내용을 다루고 있습니다.

opentutorials.org

참고 사이트

 https://sql-joins.leopard.in.ua/

 

SQL Joins Visualizer

Please select how do you want to do SQL JOIN between two table Copy SQL

sql-joins.leopard.in.ua


 

JOIN이란
  • 테이블과 테이블의 관계를 이용해서 새로운 테이블을 만들어내는 태크닉인 join
  • 관계형데이터베이스의 꽃
  • 테이블을 분리하는 법 (모델링)
  • 분리 된 테이블을 합성해서 하나의 테이블로 만드는 법 (join)
  • join의 종류와 사용법
    • inner join
    • left outer join, right outer join
    • full outer join

중복발생
  • 안좋은 징후.. (개선해야함)
  • 데이터 용량을 많이 씀
  • 중복된 데이터 수정시 다 수정해야 함
  • 동명이인이라는 이유로 데이터가 수정되면 안됨
  • 🧨중복을 제거해야함

 

 

 

표 쪼개기
사용하기 좋은 부품으로 만드는 것 

  • 표 쪼개기 (사용하기 좋은 부품으로 만드는 것)
    👉 표를 분산하는 것을 통해서 중복을 줄일 수 있음

 

Table 생성 시의 지침

🚩모든 표는 하나의 주제만 가져야 한다!

 

즉, 합쳤을 때 중복이 발생되면 누군가를 쪼갤 타이밍!

 

하지만 합쳐있다고 무조건 나쁜 것만은 아님.

 

  • 합쳐져있을 때 :  보기 좋음 (읽기는 좋으나 쓰기는 안좋음)
  • 분산되어 있을 때 : 수정하기 좋음 / 보기 안좋음 (쓰기는 좋으나 읽기는 안좋음)
    => Trade Off 가 존재하는 상황 둘다 장단점이 있음.
    => 장점만 가진 환상을 만들어내는것...?!
    => RDB의 JOIN이다..!

  • 생성한다 : 쪼개고 다른 방법으로 다시 붙이는 과정
    => 하나의 큰 표를 쪼개서 부품이 될 표를 만들고
    이번에는 어떻게 그 부품을 조인을 사용해서 할까? 
    = 쪼개진 테이블을 join을 사용해서 마치 쪼개기 전의 모습으로 만드는 것!

 

Left Join = Left Outer Join 
느슨/관대한 모델 

  • 기준이 되는 표를 왼쪽에 두고, 이 표를 기준으로 오른쪽의 표를 합성해서 하나의 표를 만드는 방법
  • 왼쪽에 있는 부분 + 겹쳐진 부분 

 

 

<예제>

 

<실습>

  • SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid
  • 토픽을 기준으로 겹치는 부분을 Table 옆에 계속 붙일 수 있음.
  • 🚩null 로 가져오는 걸 감수하면서 하는 것 : left join!!
    • null 이 나온다는 게 중요!!
    • left table에는 값이 있지만 right에는 값이 없구나?! 를 알아야 함

 

  • Left Join 한번더 해서 붙일 수 있음
  • SELECT tid, topic.title, author_id, name, profile.title AS job_title FROM topic LEFT JOIN author ON topic.author_id = author.aid LEFT JOIN profile ON author.profile_id = profile.pid;
    • 필요한 정보만 출력
    • AS : ...으로 부르겠다! (별명)

 

🚩 NULL이 나올 수 있다! (한 쪽에만 존재하는 데이터는 null로 표현 가능!)

       =  느슨한 모델 / 관대한 모델

🚩 right outer join 기준이 오른쪽이 바뀔뿐 동작은 같음.

 

 

<mysql 결과>

  • NULL이 들어간걸 확인 가능함.

 

 

Inner Join
엄격한 모델 (NULL 비허용)

  • INNER JOIN은 왼쪽과 오른쪽 표 모두에서 존재하는 행를 모아서 하나의 행을 만드는 방법
  • 🚩그냥 join이라고 하면 보통 inner join을 뜻함
    • 🚨null이 존재하지 않음!!
    • DB에서의 null은 false임
    • 일반적으로 성능이 더 좋음

 

<실습>

  • SELECT*FROM topic INNER JOIN author ON topic.author_id = author.aid
  • 🚨NULL값이 있는 행은 모두 삭제

 

  • SELECT*FROM topic INNER JOIN author ON topic.author_id = author.aid INNER JOIN profile ON profile.pid = author.profile_id
  • 🚨NULL값이 있는 행은 모두 삭제

 

 

 

Full Outer Join : 이런 게 있다 정도로만 알아도 됨..

  • 왼쪽과 오른쪽에 있는 행 모두를 합성해서 하나의 표를 만드는 방법인 FULL JOIN
    • 합집합 같은 개념

  • 많은 db에서 지원하지 않으나 left outer join 과 right outer join 을 한 뒤에 중복을 제거하면 그게 full join 임

 

exclusive join : 이런 게 있다 정도로만 알아도 됨..
  • 한쪽 표에만 있는 정보로 새로운 표를 만드는 방법
    • 배제하는 것, 한쪽에만 있는 정보로 표를 만드는 것

  • NULL값이 있는 행만 찾으면 됨

 

 

 

🚩full outer join, exclusive join은 이런게 있다 정도로.. 

  • 잘사용하지 않음.
  • 기능이 따로 있다기 보다 기존에 알고있던 기능으로 조합해서 만들어낼수있는 결과임.