Join
하나의 테이블뿐이 아니라, 여러개의 테이블에서 정보를 가져와서 결과를 만들어 주는 기법을 Join 이라 합니다. 관계형 데이터베이스 (RDBMS) 의 가장 핵심 기술중 하나.
카티션 곱 (Cartesian Product)
두개의 테이블을 JOIN 하게 되면,
각 테이블의 레코드들의 모든 조합이 출력된다.
WHERE 나 ON 등으로 JOIN 조건이 주어지지 않으면
모든 카티션곱이 출력된다.

Join 의 종류

Equi Join (등가 Join)
-- 일반적으로 많이 쓰이는 Join 이며, 양쪽 테이블 Join 한 카티션곱에서 ‘같은조건’이 존재할 경우만 값을 가져오는 것
Non-Equi Join (비등가 Join)
Equi Join은 서로 같은 조건 (=)을 가진 데이터를 Join 해서 가져오는 방법.
그러나 ‘크거나 작거나 하는 경우의 조건도 있을수 있습니다’ 그러한 조건으로 join 을 수행하는 것을 Non-Equi Join 이라 합니다.
OUTER Join (아우터 조인)
앞서본 equi join, non-equi join 은 Join 에 참여하는 모든 테이블에 데이터가 존재하는 경우에만 결과 값을 출력. 이런 Join 을 INNER Join (이너 조인) 이라 함
OUTER Join 이란 한쪽 테이블에 데이터가 있고 한쪽테이블에 없는 경우 데이터가 있는 쪽 테이블의 내용을 전부 출력
필연적으로 OUTER Join 은 DB 성능에 나쁜 영향 줌.
SELF Join
만약 원하는 데이터가 하나의 테이블에 다 들어 있다면?
이럴때 사용하는 것이 SELF Join
Sub Query 란?
“t_emp 테이블에서 scott 보다 급여를 많이 받는 사람은 누구인가요?”
일단 ‘scott 의 급여’ 를 알아야 ‘scott 보다 많이 받는 사람의 급여’를 조회할수 있다
즉! 2번의 쿼리를 작성해야 하는데, 서버에 2차례 쿼리 I/O 를 발생시키는 것은 성능 저하로 이어집니다. 그래서 한번에 여러개의 쿼리를 처리 할수 있는 방법으로 Sub Query 가 제공됩니다.
Sub Query 주의사항
1. SubQuery 는 연산자 오른쪽에 위치해야 하며 반드시 괄호로 묶어야 한다
2. 특별한 경우를 제외하고는 SubQuery절에는 Order By 가 올수 없습니다
3. 단일행SubQuery , 다중행SubQuery 에 따라 연산자를 잘 선택해야 한다
Sub Query 종류
- 단일행 Sub Query
- 다중행 Sub Query
- 다중칼럼 Sub Query
- 상호연관 Sub Query
단일행 서브쿼리
-- SubQuery 결과가 한개 1행만 나오는 것.
-- 단일행 Sub Query 의 WHERE 에서 사용되는 연산자
-- = , <> , !=, >, >= , <, <=
다중행 Sub Query
Sub Query 결과가 2건(row) 이상 출력되는 것을 말합니다.
다중행 Sub Query 와 함께 사용하는 연산자
| IN | 같은 값을 찾음 |
| >ANY, >=ANY | 최소값을 반환함 |
| <ANY, <=ANY | 최대값을 반환함 |
| <ALL, <=ALL | 최소값을 반환함 |
| >ALL, >=ALL | 최대값을 반환함 |
| EXIST | Sub Query 값이 있을 경우 반환 |
다중칼럼 Sub Query
Sub Query 결과가 여러 칼럼인 경우. 주로 Primary Key 를 여러 칼럼을 합쳐서 만들었을 경우 한꺼번에 비교하기 위해서 자주 사용.
상호연관 Sub Query
Main Query 값을 Sub Query 에 주고 Sub Query를 수행한 후 그 결과를 다시 Main Query 로 반환해서 수행하는 쿼리.
참고: Sub Query 위치별 이름
Sub Query 는 오는 위치에 따라서 그 이름이 다릅니다
SELECT ( Sub Query ) ← 1행만 반환할 경우, Scala Sub Query (스칼라 서브쿼리)
FROM ( Sub Query ) ← Inline View (인라인 뷰)
WHERE ( Sub Query ) ← Sub Query 라고 부릅니다
'Language > MYSQL' 카테고리의 다른 글
| [MYSQL 02] DML, SELECT문 (0) | 2022.02.23 |
|---|---|
| [SQL 01] Database 개념, MySql DDL 기초 (0) | 2022.02.17 |