* 실습 테이블
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 |