개발 낙서장

[TIL] 내일배움캠프 58일차 - SQL Join 본문

Java/Sparta

[TIL] 내일배움캠프 58일차 - SQL Join

권승준 2024. 3. 20. 22:33

 

 

오늘의 학습 키워드📚

Join?

Join이란 '들어가다', '가입하다' 등의 뜻을 갖고 있다. 즉 DB에서 Join이라 함은 다른 테이블에 들어가서 데이터를 가져오는 것을 의미한다.
주로 사용하는 Join의 종류로는 크게 묶으면 두 가지가 있는데 INNER JOIN, OUTER JOIN이 있다.
(물론 CROSS JOIN도 있지만 웬만한 상황에서는 쓰지 않는다고 한다.)

INNER JOIN은 겹치는 부분을 가져오고 OUTER JOIN은 겹치지 않는 부분까지도 가져온다.

TABLE A TABLE B
ID NAME ID NAME
1 자바 1 파이썬
2 파이썬 2 C++
3 C# 3 언리얼
4 유니티 4 자바

오늘의 임시 테이블이다!

INNER JOIN

쉽게 말해 교집합이다. 두 테이블에서 특정 조건에 맞는 값들 중 겹치는 부분을 가져온다.

테이블 A와 B에서 이름이 같은 값들을 가져오려면?

SELECT * FROM A
JOIN B ON A.NAME = B.NAME;

기존에는 WHERE 절을 사용했지만 JOIN에서는 ON 절을 사용한다.

RESULT
A.ID A.NAME B.ID B.NAME
1 자바 4 자바
2 파이썬 1 파이썬

A를 기준으로 JOIN 했기 때문에 A값을 기준으로 출력이 된다.

LEFT OUTER JOIN

INNER JOIN이 교집합이었으니 OUTER JOIN은 합집합이다. 그 중에서 LEFT 즉 왼쪽 부분을 가져온다는 것이다.
A 에서는 전부 추출하고 B에서는 A와 겹치는 부분만 추출하게 된다.

SELECT * FROM A
LEFT OUTER JOIN B ON A.NAME = B.NAME;
RESULT
A.ID A.NAME B.ID B.NAME
1 자바 4 자바
2 파이썬 1 파이썬
3 C# NULL NULL
4 유니티 NULL NULL

자바와 파이썬은 B 테이블에서도 갖고 있지만 C#과 유니티는 없기 때문에 NULL로 출력이 된다.

RIGHT OUTER JOIN

LEFT OUTER JOIN과 반대로 오른쪽 부분을 가져온다.

SELECT * FROM B
RIGHT OUTER JOIN A ON B.NAME = A.NAME;
RESULT
A.ID A.NAME B.ID B.NAME
2 파이썬 1 파이썬
NULL NULL 2 C++
NULL NULL 3 언리얼
1 자바 4 자바

A 테이블에서 파이썬과 자바는 갖고 있어 출력이 되지만 C++과 언리얼은 갖고 있지 않기에 NULL이 출력된다.

RIGHT OUTER JOIN (RIGHT ONLY)

겹치는 부분은 제외하고 가져올 수도 있다.

SELECT * FROM B
RIGHT OUTER JOIN A ON B.NAME = A.NAME
WHERE A.NAME IS NULL;
RESULT
A.ID A.NAME B.ID B.NAME
NULL NULL 2 C++
NULL NULL 3 언리얼

C++과 언리얼은 A 테이블에 없기 때문에 이렇게 출력이 된다.


오늘의 회고💬

최적화 관련해서 어떻게 할 수 있을까 고민만 많이 했던 것 같다.

 

내일의 계획📜

쿼리 최적화, 동시성 문제 등 좀 더 심화적인 내용을 다뤄야겠다.

Comments