* 실습 테이블
| topic | |||
| tid | title | description | author_id |
| 1 | HTML | HTML is … | 1 |
| 2 | CSS | CSS is … | 2 |
| 3 | Database | Database is .. | 1 |
| 4 | Oracle | Oracle is … | NULL |
| author | |||
| aid | name | city | profile_id |
| 1 | egoing | seoul | 1 |
| 2 | leezche | jeju | 2 |
| 3 | blackdew | namhae | 3 |
| profile | ||
| pid | title | description |
| 1 | developer | developer is … |
| 2 | designer | designer is … |
| 3 | DBA | DBA is .. |
FULL OUTER JOIN
왼쪽과 오른쪽에 있는 모든 행을 가져오는 것. => 합집합
거의 지원하지 않는다.
author_id = aid에 맞게 모든 행을 가져온다. 그리고 중복되는 행을 지운다.
SELECT * FROM topic FULL OUTER JOIN author ON topic.author_id = author.id
지원하지 않는다면 아래와 같이 사용할 수도 있다.
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id) UNION (SELECT * FROM topic RIGHT JOIN author ON topic.author_id = author.id
1. 왼쪽 행에 맞춰 모두 가져온다.
| tid | title | description | author_id | aid | name | city | profile_id |
| 1 | HTML | HTML is … | 1 | 1 | egoing | seoul | 1 |
| 2 | CSS | CSS is … | 2 | 2 | leezche | jeju | 2 |
| 3 | Database | Database is .. | 1 | 1 | egoing | seoul | 1 |
| 4 | Oracle | Oracle is … | NULL | NULL | NULL | NULL | NULL |
2. 오른쪽 행에 맞춰 모두 가져온다.
| tid | title | description | author_id | aid | name | city | profile_id |
| 1 | HTML | HTML is … | 1 | 1 | egoing | seoul | 1 |
| 2 | CSS | CSS is … | 2 | 2 | leezche | jeju | 2 |
| 3 | Database | Database is .. | 1 | 1 | egoing | seoul | 1 |
| 4 | Oracle | Oracle is … | NULL | NULL | NULL | NULL | NULL |
| 1 | HTML | HTML is … | 1 | 1 | egoing | seoul | 1 |
| 3 | Database | Database is .. | 1 | 1 | egoing | seoul | 1 |
| 2 | CSS | CSS is … | 2 | 2 | leezche | jeju | 2 |
| NULL | NULL | NULL | NULL | 3 | blackdew | namhae | 3 |
3. 중복 행을 제거한다.
| tid | title | description | author_id | aid | name | city | profile_id |
| 1 | HTML | HTML is … | 1 | 1 | egoing | seoul | 1 |
| 2 | CSS | CSS is … | 2 | 2 | leezche | jeju | 2 |
| 3 | Database | Database is .. | 1 | 1 | egoing | seoul | 1 |
| 4 | Oracle | Oracle is … | NULL | NULL | NULL | NULL | NULL |
| NULL | NULL | NULL | NULL | 3 | blackdew | namhae | 3 |
EXCLUSIVE LEFT JOIN
A 또는 B 테이블에만 존재하는 것을 찾아내는 것. 거의 사용하지 않는다.
* A 테이블에만 존재하는 Oracle을 가져오고 싶을 때
LEFT JOIN으로 값을 가져온 다음에, WHERE절을 사용한다.
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid WHERE author.aid is NULL
| tid | title | description | author_id | aid | name | city | profile_id |
| 4 | Oracle | Oracle is … | NULL | NULL | NULL | NULL | NULL |
'CS > Database' 카테고리의 다른 글
| [RDBMS] SQL JOIN(3) - INNER JOIN (0) | 2019.05.27 |
|---|---|
| [RDBMS] SQL JOIN(2) - LEFT OUTER JOIN (0) | 2019.05.27 |
| [RDBMS] SQL JOIN(1) - JOIN (0) | 2019.05.27 |