참고한 강의
https://opentutorials.org/module/4118
참고 사이트
https://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은 이런게 있다 정도로..
- 잘사용하지 않음.
- 기능이 따로 있다기 보다 기존에 알고있던 기능으로 조합해서 만들어낼수있는 결과임.
'😺Data Base > 😻 SQLD' 카테고리의 다른 글
[SQL] 제약조건 / VIEW / SEQUENCE / SYNONYM / INDEX (0) | 2022.11.01 |
---|---|
[SQL] SQL 종류 - DDL / Data Type (0) | 2022.10.31 |
[DB] Transaction - 동시성 문제 (0) | 2022.09.20 |
[DB] Transaction - Atomicity 원자성 이해하기 (0) | 2022.09.19 |
[DB] Index (0) | 2022.09.17 |