-
221226. DB 4. 서브쿼리스타터스 백엔드 3기 2022. 12. 26. 18:22
하루입니다.

서브쿼리란?
- 쿼리문 안에 다른 쿼리문이 포함된 구문이다.
- 단일행 / 다중행 / 다중행 열 서브쿼리
- 독립 서브쿼리 / 연관 서브쿼리
- DB엔진은 괄호 안의 서브쿼리를 먼저 시행한다. 그리고 서브쿼리를 포함하는 외부쿼리를 실행하여 서브쿼리와 같은(혹은 조건에 맞는) 것을 조사하여 출력한다. 일반 언어에서 함수 호출을 중첩하는 것과 같다.
서브쿼리 예시
1. 단일행 서브쿼리
- 행이 하나만 return 되기에 = 연산자를 사용해도 된다.

- 단일행 서브쿼리의 결과는 1개의 행을 리턴해야 한다. peter는 50번, 80번 두 개 부서에 존재한다.
- 그렇지 않아서 생기는 오류이다.
- WHERE department_id = 50, 80이 된다.

2. 다중행 서브쿼리
- WHERE department_id in (50, 80) 이 된다.
- 서브쿼리의 결과가 여러개인 것을 다중행 서브쿼리라고 한다.
- IN 연산자를 사용해야 한다. =는 RETURN값이 하나일 때 사용한다.

3. 다중열 서브쿼리
- 결과의 컬럼도 여러개이며, 여러개의 값과 비교하는 것이다.

서브쿼리 연산자 : ANY, ALL
- any: 하나라도 만족하는 값이 있어야 한다. (or)
- all : 조건을 모두 만족해야 한다. (and)

위는 최댓값, 밑은 최소값
연관 서브쿼리
- 이때까지의 서브쿼리들은 서브쿼리만 실행할 수 있었다.
- 하지만 연관 서브쿼리는 서브쿼리만 실행할 수 없다.
- 조인처럼 테이블에 별칭을 붙여서 서브쿼리 내에서 사용하기 때문이다. 서브쿼리만 실행하려 해도 별칭이 필요하기에 실행 불가하다.
- 연관 서브쿼리는 외부필드의 필드값을 참조하며, 단독 실행 불가하다.
- 독립 서브쿼리는 외부쿼리에 값을 제공하는 역할을 한다.
- 흠 그런데 왜 굳이 조인 안 사용하고 이걸 사용하지? 효율이 좋나? 조인을 쿼리로 바꾼 느낌이다.
- 출력 결과가 단순할 때 조인문 대신 간편하게 쓸 수 있다고 한다.
- select에서 e.를 사용하면 연관 서브쿼리, where에서 e.를 사용하면 조인문이 되는 느낌


인라인뷰
- 서브쿼리는 주로 아래의 세 군데에서 사용한다.
- where : 조건에 사용할 값을 찾는다.
- select : 출력할 값을 찾는다.
- from : 출력 대상 테이블을 생성한다.
- 이 중 FROM절의 서브쿼리를 인라인뷰라고 한다.
- 뷰는 테이블의 정보를 가지는 DB 오브젝트이다.
- 서브쿼리에서 잠시 만들어졌다 사라지는 뷰라서 INLINE VIEW라고 한다.
- 인라인뷰를 사용하기 위해서는 더 복잡하고 골치 아픈 문제가 제격이다.
- 가상 테이블을 만들고 그 테이블을 사용하는! 큰 문제를 작은 문제로(복합조건) 만드는 것!
- 사용되고 사라질 거라 이름이 없다. 별칭을 주자.

CASE WHEN ELSE END, IFNULL
- CASE. SWITCH 느낌 !!
- 위는 조건을 하나하나 주었다.
- 밑은 인라인뷰를 사용해서 이름과 임시월급계산을 IMSITABLE에 넣는다.
- IMSISAL에는 임시월급계산값이 있기에, 위의 식 대신 INSISAL을 넣어도 동일하게 동작한다.
- IFNULL은 만약 값이 NULL일 경우에 값을 지정하는 것이다.
- IFNULL(지정 컬럼명, 데이터)


서브쿼리 중첩 (join?)

테이블 조합
- 2개의 물리적인 테이블로 나뉘어잇다가 select시 합쳐서 조회한다.
- 조합 테이블의 컬럼, 갯수, 타입, 순서가 일치해야한다.
- 서브쿼리보다는 멀티쿼리 개념으로 보자.
1. UNION (all)
- 합집합이다.
- UNION은 중복값이 나오지 않는다.

- UNION ALL은 중복값도 포함한다.

2. INTERSECT
교집합이다.

3. MINUS (except)
마리아db에서는 except이다.
차집합이다.


4. MERGE
- 바뀐건 UPDATE하고 지워진건 INSERT한다.
- UPSERT라고도 한다.
'스타터스 백엔드 3기' 카테고리의 다른 글
221228. DB 6. 함수, (트랜잭션) (0) 2022.12.28 221227. DB 5. 조인 (0) 2022.12.27 221226. DB 3. DML, 제약조건, ALTER TABLE (0) 2022.12.26 유데미 스타터스 취업 부트캠프 3기 - 백엔드 5주차 (0) 2022.12.23 221223. DB 2. RDBMS, select (0) 2022.12.23