10:22 - 11:22
JOIN
여러개의 분산된 테이블을 묶어서 하나의 테이블로 만든다.
문제점
1) 컬럼에 중복이 발생하고 있다.
해결방법
1) 중복되는 부분을 별도의 테이블로 분리해서 FK로 참조하도록 한다.
하나의 테이블은 하나의 '주제'만 가져야 한다.
전, 후에 각각 trade off가 존재하는 상황이다.
전: 읽기가 좋지만, 쓰기가 불편하다
후: 쓰기가 좋지만, 읽기가 너무 불편하다.
=> 이를 해결하기 위해 JOIN이 등장했다.
- SQL Joins Visualizer - 벤다이어그램을 선택해서 그 벤다이어그램과 일치하는 SQL문 보기!
- 그림먼저 익혀두고 검색해서 봅시다. :)
OUTER JOIN (LEFT | RIGHT JOIN)
+ 방향만 달라진다.
A에 있는 정보도 가져오되, B에는 없는 정보를 가져오기.
1) 2개 테이블 조인
-- topic테이블이 왼쪽이 오게 된다.
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid;
자기에게 존재하지 않는 행은 NULL값으로 이어준다.
따라서 NULL값이 나온다는것은 왼쪽에는 값이 있지만, 오른쪽테이블에는 그 값과 일치하는 값이 없다라는것을 기억하자.
2) 앞에서 조인한 결과를 다시 조인하자.
SELECT * FROM topic
LEFT JOIN author ON topic.author_id = author.aid
LEFT JOIN profile ON author.profile_id = profile.pid;
=> 앞에서 조인한 결과는 마찬가지로 왼쪽에 오게된다.
+ 필요한 컬럼만을 명시 할 수도 있다
+ where 조건을 줘서 특정한 레코드값을 가져 올 수도 있다.
INNER JOIN
양쪽 다 존재하는 경우에만 출력한다.
성능이 좋다.
마찬가지로, JOIN한 결과를 다시 JOIN 할 수도 있다.
FULL OUTER JOIN
LEFT JOIN과 RIGHT JOIN을 합하면 FULL JOIN이 된다.
일치하는것이 있으면 하나 더 만들되, 중복되는것이 있으면 지워주기 때문에, 결국 모든 컬럼이 다 나오게 된다.
하지만 많은 RDBMS에서 FULL OUTER JOIN을 지원하지 않는다..
-> 하지만.. LEFT JOIN + RIGHT JOIN을 해서 중복된 결과를 지움으로써 동일한 결과를 가져 올 수 있다.
EXCLUSIVE JOIN
+ LEFT조인을 많이 쓴다고 하심..
+ 조합해서 만들어낼수있는 결과라고 하신다.
'Today I learned' 카테고리의 다른 글
[AWS] 20/01/30 AWS 세미나 참석 (0) | 2020.01.30 |
---|---|
[AWS] 생활코딩 AWS 강의 정리 - EC2설정 및 Apache 설치 (0) | 2020.01.27 |
[SQL] 서브쿼리 정리 (0) | 2020.01.23 |
[react] 2 주차 - webpack으로 모듈화 그리고 create React App(2) (0) | 2020.01.18 |
[react] 2 주차 - webpack으로 모듈화 그리고 create React App (0) | 2020.01.18 |
댓글