웹쟁이의 일상

[SQL] JOIN 사용법 (INNER JOIN, OUTER JOIN) 본문

Database

[SQL] JOIN 사용법 (INNER JOIN, OUTER JOIN)

jellyChoi 2019. 5. 27. 22:06

안녕하세요~ 오늘은 JOIN에 대해서 알아보겠습니다.

 

JOIN은 글자 그대로 두 테이블 혹은 디비를 조인해서 검색하는 방법을 말합니다.

 

A,B테이블이 있다고 가정할 때 A테이블의 컬럼과 B 테이블의 컬럼을 연결하여 하나의 테이블이 되는 것 처럼

 

검색을 할 수 있습니다. 보통 Primary Key 및 Forign Key를 이용하여 조인을 합니다.

 

처음 들으면 약간 이해하기 힘들 수 있지만 집합을 생각해보면 이해하기가 한결 수월해집니다.

 

우리 모두 고등학교 시절 수학의정석 1장만 여러번 공부한 적이 있기 때문에 집합에 대해서는 다들 빠싹할 거라고 예상합니다.

 

일단 조인을 걸어 주기 위한 두 테이블을 생성해보겠습니다.

CREATE TABLE USERTABLE(
    USER_ID INT NOT NULL PRIMARY KEY,
    NAME VARCHAR2(20),
    ID VARCHAR2(20),
    EMAIL VARCHAR2(20)
);
INSERT INTO USERTABLE (USER_ID, NAME, ID, EMAIL) VALUES (1,'웹쟁이', 'WEB', 'WEBJANG@NAVER.COM') ;
INSERT INTO USERTABLE (USER_ID, NAME, ID, EMAIL) VALUES (2,'김철수', 'FEH2O', 'CHUL@SU.COM') ;
INSERT INTO USERTABLE (USER_ID, NAME, ID, EMAIL) VALUES (3,'릴펌', 'LILP', 'LIL@PUMP.COM') ;
INSERT INTO USERTABLE (USER_ID, NAME, ID, EMAIL) VALUES (4,'아리아나 그란데', 'GRANDE', 'ARI@ANA.COM') ;
INSERT INTO USERTABLE (USER_ID, NAME, ID, EMAIL) VALUES (5,'트와이스', 'TWICE', 'TWICE@JYP.NET') ;

 

CREATE TABLE COMPANY(
    COMPANY_ID INT NOT NULL PRIMARY KEY,
    USER_ID INT NOT NULL,
    COMPANY_NAME VARCHAR2(20),
    ADDRESS VARCHAR2(20)
);
INSERT INTO COMPANY (COMPANY_ID, USER_ID, COMPANY_NAME, ADDRESS) VALUES (1, 1, '구글', '미국') ;
INSERT INTO COMPANY (COMPANY_ID, USER_ID, COMPANY_NAME, ADDRESS) VALUES (2, 2, '김랩', '서울') ;
INSERT INTO COMPANY (COMPANY_ID, USER_ID, COMPANY_NAME, ADDRESS) VALUES (3, 3, NULL, '자가') ;
INSERT INTO COMPANY (COMPANY_ID, USER_ID, COMPANY_NAME, ADDRESS) VALUES (4, 4, '네이버', '판교') ;
INSERT INTO COMPANY (COMPANY_ID, USER_ID, COMPANY_NAME, ADDRESS) VALUES (5, 5, 'JYP', '성내동') ;

두 개의 테이블을 생성하고 조인을 하기 위해 데이터도 집어 넣어 보았습니다.

(테이블 속 인물들은 실존 인물들과 무관합니다.)

 

1.INNER JOIN

INNER JOIN은 쉽게 말하면 교집합이라고 할 수 있습니다. 

SELECT 
	A.USER_ID, A.NAME, B.COMPANY_NAME 
FROM 
	USERTABLE A INNER JOIN 
    COMPANY B 
ON 
	A.USER_ID = B.USER_ID;

USERTABLE을 A, COMPANY를 B로 설정해주고 USER_ID가 같은 값을 INNER JOIN 시켜주는 쿼리문입니다.

select  
	A.USER_ID, A.NAME, B.COMPANY_NAME 
FROM 
	USERTABLE A, COMPANY B 
WHERE
	A.USER_ID = B.USER_ID;

똑같은 값이 나오는 살짝 다른 쿼리문입니다.

결과가 위처럼 나옵니다.

 

 

2.OUTER JOIN

 

다음은 아우터 조인에 대해 알아보겠습니다.

 

아우터 조인은 크게 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있습니다.

 

그림으로 그려보자면(그림판으로 그려서 좀 저퀄입니다..) 이렇습니다.

LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN

아주 이해하기 쉬웠을거라 생각합니다.

 

SELECT 
	A.NAME, A.ID, B.COMPANY_NAME, B.ADDRESS 
FROM 
	USERTABLE A(기준 테이블) 
    LEFT OUTER JOIN COMPANY B(조인 테이블) 
ON 
	A.USER_ID = B.USER_ID;

LEFT OUTER JOIN 예시입니다.

결과가 잘 나옵니다.

 

RIGHT OUTER JOIN은 위의 식에서 LEFT만 RIGHT로 바꿔주시면 되겠습니다.

 

SELECT 
	A.NAME, A.ID, B.COMPANY_NAME, B.ADDRESS, A.EMAIL
FROM 
	USERTABLE A FULL OUTER JOIN COMPANY B 
ON 
	A.USER_ID = B.USER_ID;

FULL OUTER JOIN도 똑같습니다.

이렇게 해서 INNER JOIN과 OUTER JOIN에 대해 알아보았습니다.

 

JOIN은 아주 많이 쓰이는 구문이니 잘 알아두시고 나중에 써먹어보시길 바랍니다.

Comments