일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 내일배움캠프
- Unity
- Firebase
- 문자열
- 유니티
- Unity2D
- 스택
- QueryDSL
- 해시
- 언리얼엔진
- 스파르타내일배움캠프TIL
- 유클리드호제법
- Photon
- 워크플로
- 알고리즘
- 스파르타내일배움캠프
- Inventory
- BFS
- unityui
- c#
- FSM
- 구현
- 포톤
- 순열
- Unity3d
- C++
- 프로그래머스
- UE4
- UnrealEngine
- 이분탐색
- Today
- Total
개발 낙서장
[TIL] 내일배움캠프 58일차 - SQL Join 본문
오늘의 학습 키워드📚
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 테이블에 없기 때문에 이렇게 출력이 된다.
오늘의 회고💬
최적화 관련해서 어떻게 할 수 있을까 고민만 많이 했던 것 같다.
내일의 계획📜
쿼리 최적화, 동시성 문제 등 좀 더 심화적인 내용을 다뤄야겠다.
'Java > Sparta' 카테고리의 다른 글
[TIL] 내일배움캠프 60일차 - 통합 테스트 (0) | 2024.03.22 |
---|---|
[TIL] 내일배움캠프 59일차 - 낙관적 락 동시성 테스트 (0) | 2024.03.21 |
[TIL] 내일배움캠프 57일차 - 순서 저장 방법 (0) | 2024.03.19 |
[TIL] 내일배움캠프 55일차 - Git Commit 잔디 (0) | 2024.03.15 |
[TIL] 내일배움캠프 54일차 - 설정 파일 분리 (0) | 2024.03.14 |