(SQL) Inner join / Outer join
join(결합구문)
- join(조인, 결합구문)은 한 데이터 베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것이다.
- join은 테이블로서 저장되거나, 그 자체로 이용 할 수 있는 결과 셋을 만들어 낸다.
- join은 2개의 테이블에서 각각의 공통값을 이용합으로써 필드를 조합하는 수단이 된다.
inner join 과 outer join
- inner join을 A테이블과 B테이블에 수행하는 것은 A와 B의 교집합을 말합니다.
- outer join을 A테이블과 B테이블에 수행하는 것은 A와 B의 합집합을 말합니다.
예시 테이블
A Table | B Table | ||
---|---|---|---|
KEY_VALUE | DATA_VALUE | KEY_VALUE | DATA_VALUE |
1 | a | 3 | w |
2 | b | 4 | x |
3 | c | 5 | y |
4 | d | 6 | z |
더보기
CREATE TABLE A(
KEY_VALUE INT,
DATA_VALUE VARCHAR(2)
)
INSERT INTO A
VALUES(1,'a'), (2,'b'), (3,'c'), (4,'d')
CREATE TABLE B(
KEY_VALUE INT,
DATA_VALUE VARCHAR(2)
)
INSERT INTO B
VALUES(3,'w'), (4,'x'), (5,'y'), (6,'z')
inner join (이너조인)
- inner join을 수행하면 두 집합에 모두 남아 있는 데이터만 출력
SELECT A.KEY_VALUE AS A_KEY,
B.KEY_VALUE AS B_KEY,
A.DATA_VALUE AS A_DATA,
B.DATA_VALUE AS B_DATA
FROM A
INNER JOIN B
ON A.KEY_VALUE = B.KEY_VALUE
- RESULT
A_KEY | B_KEY | A_DATA | B_DATA |
---|---|---|---|
3 | 3 | c | w |
4 | 4 | d | x |
left outer join (레프트 아웃터 조인)
- left outer join을 수행하면 A의 모든 열 더하기에 B에 있는 데이터 출력
SELECT A.KEY_VALUE AS A_KEY,
B.KEY_VALUE AS B_KEY,
A.DATA_VALUE AS A_DATA,
B.DATA_VALUE AS B_DATA
FROM A
LEFT OUTER JOIN B
ON A.KEY_VALUE = B.KEY_VALUE
- RESULT
A_KEY | B_KEY | A_DATA | B_DATA |
---|---|---|---|
1 | NULL | a | NULL |
2 | NULL | b | NULL |
3 | 3 | c | w |
4 | 4 | d | x |
right outer join (라이트 아웃터 조인)
- right outer joni을 하면 B의 모든 열 더하기에 A에 있는 데이터 출력
SELECT A.KEY_VALUE AS A_KEY,
B.KEY_VALUE AS B_KEY,
A.DATA_VALUE AS A_DATA,
B.DATA_VALUE AS B_DATA
FROM A
LEFT OUTER JOIN B
ON A.KEY_VALUE = B.KEY_VALUE
- RESULT
A_KEY | B_KEY | A_DATA | B_DATA |
---|---|---|---|
3 | 3 | c | w |
4 | 4 | d | x |
NULL | 5 | NULL | y |
NULL | 6 | NULL | z |
full outer join (풀 아웃터 조인)
- full outer join을 하면 A와 B의 모든 데이터 출력
- full outer join은 mysql(mariaDB)에서는 지원을 하지 않는다.
mysql(mariaDB)에서는 left outer join과 right outer join을 union하여 full outer join을 사용 할 수 있다.
-- MSSQL
SELECT A.KEY_VALUE AS A_KEY,
B.KEY_VALUE AS B_KEY,
A.DATA_VALUE AS A_DATA,
B.DATA_VALUE AS B_DATA
FROM A
FULL OUTER JOIN B
ON A.KEY_VALUE = B.KEY_VALUE
-- MYSQL(MARIADB)
SELECT A.KEY_VALUE AS A_KEY,
B.KEY_VALUE AS B_KEY,
A.DATA_VALUE AS A_DATA,
B.DATA_VALUE AS B_DATA
FROM A
LEFT OUTER JOIN B
ON A.KEY_VALUE = B.KEY_VALUE
UNION
SELECT A.KEY_VALUE AS A_KEY,
B.KEY_VALUE AS B_KEY,
A.DATA_VALUE AS A_DATA,
B.DATA_VALUE AS B_DATA
FROM A
RIGHT OUTER JOIN B
ON A.KEY_VALUE = B.KEY_VALUE
- RESULT
A_KEY | B_KEY | A_DATA | B_DATA |
---|---|---|---|
1 | NULL | a | NULL |
2 | NULL | b | NULL |
3 | 3 | c | w |
4 | 4 | d | x |
NULL | 5 | NULL | y |
NULL | 6 | NULL | z |
'SQL' 카테고리의 다른 글
MySql (CREATE, DROP, INSERT, DELETE, UPDATE) (0) | 2020.02.20 |
---|---|
(SQL) 특정 문자 맨 아래 정렬 (0) | 2020.02.08 |