SQL JOIN - 생활코딩
  
    
  
  
  1. 테이블 쪼개기
쪼개 지지 않은 테이블



- 이 Topic 테이블의 장점은 한눈에 읽기가 쉽다는 점이다.
- 그러나, 노란색으로 표시된 것과 같이 중복이 존재하게 된다.
- 쓰기가 힘들다
테이블 쪼개기


- 위의 Topic 테이블을 쪼개서 3개의 테이블로 만든 경우 이다.
- 이때 장점은 쓰기, 수정하기가 매우 편한다
- 반면에, 테이블 3개를 모두 봐야하는데, 한눈에 들어오지 않는다. - 읽기가 불편하다
위 2가지 경우 모두
Trade off가 존재한다. 따라서, 상황에 따라서 적절하게 활용해야 한다.
2. JOIN 간단 소개
INNER JOIN

LEFT JOIN

RIGHT JOIN

FULL OUTER JOIN

3. LEFT JOIN

- 왼쪽에만 있는 정보를 출력 하는 것
- 특정한 표(A)를 기준으로 정보를 가지고 올 떄,(A에는 있고, B에는 없는 정보를 가져 올 때)
# topic과 author의 left join
SELECT * FROM topic LEFT JOIN author on topic.author_id = author.aid;

- Left Join 했을 때, NULL 이 나온다는 것 왼쪽에 있는 테이블에는 값이 있는데, 그 값에 해당되는 오른쪽 테이블의 행이 없다는 것
# topic과 author의 left join 한 결과에 profile을 left join
SELECT * 
FROM topic 
LEFT JOIN author 
on topic.author_id = author.aid 
LEFT JOIN profile ON author.profile_id = profile.pid;

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;

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
WHERE aid = 1;

4. INNER JOIN

- 양쪽 모두 공통으로 들어있는 행을 보여준다.
- NULL이 존재 하지 않는다.
SELECT * 
FROM topic 
INNER JOIN author 
ON topic.author_id = author.aid
INNER JOIN profile
ON author.profile_id = profile.pid;

5. FULL OUTER JOIN

- 일종의 합집합
(SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid) 
UNION 
(SELECT * FROM topic RIGHT JOIN author ON topic.author_id = author.aid)

- INNER JOIN의 결과 +- A에만 있는 행+- B에만 있는 행을 보여준다.
- FULL OUTER JOIN자체를- DBMS에서 제공하진 않고, 위와 같이- UNION으로 보여 줄 수 있다.
6. EXCLUSIVE LEFT JOIN

- 어느 특정 테이블에 있는 것만 가져올 수 있다.

SELECT * 
FROM topic LEFT JOIN author 
ON topic.author_id = author.aid 
WHERE author.aid is NULL;
