SQL

(SQL) Inner join / Outer join

ballboy ㅣ 2020. 2. 17. 01:03

(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

inner join

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

left outer join

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

right outer join

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

full outer join

'SQL' 카테고리의 다른 글

MySql (CREATE, DROP, INSERT, DELETE, UPDATE)  (0) 2020.02.20
(SQL) 특정 문자 맨 아래 정렬  (0) 2020.02.08