개발 일기
SQL의 Subquery란?? (feat. 스칼라 서브쿼리 ,인라인뷰 서브쿼리) 본문
안녕하세요.
오늘은 SQL의 서브쿼리(Subquery)에 대해서 공부해보겠습니다.
서브쿼리란?
- SELECT 문(Main)에 포함되어 있는 또 하나의 별도 SELECT문(Subquery)이다.
- 여러 번의 SELECT문을 수행해야 얻을 수 있는 결과를 하나의 중첩된 SELECT 문으로 얻을 수 있다.
A. 서브쿼리 위치에 따른 종류
- SELECT 컬럼절 ☞ 스칼라 서브쿼리
- FROM 절 ☞ 인라인 뷰(서브쿼리)
- WHERE 절 ☞ 스칼라 서브쿼리[Nested 서브쿼리]
- GROUP BY 절 ☞ 스칼라 서브쿼리
- HAVING 절 ☞ 스칼라 서브쿼리
- ORDER BY 절 ☞ 스칼라 서브쿼리
B. 스칼라 서브쿼리(scalar subquery)
- 하나의 SQL문으로 취급되지만 본질적으로 하나의 함수로 간주하면됨
- 함수의 가장 큰 특징은 많은 INPUT 이 있더라도 OUTPUT은 하나만 나온다는것입니다.
- 스칼라 서브쿼리도 일종의 함수이므로 중첩해서 사용가능하나
OUTPUT이 두개 이상이거나,OUTPUT의 데이타타입이 맞지않는 경우에는 에러를 발생시킵니다.
- 대량의 데이타 처리 시 스칼라 쿼리의 남발은 성능저하를 유발 할 수 있으므로
조인으로 대체하는것이 좋습니다.
C. 인라인뷰 서브쿼리(INLINE VIEW SUBQUERY)
- SELECT 문의 FROM 절에 Subquery를 사용, 사용 방법은 VIEW와 유사하며 INLINE VIEW라고 칭함
- INLINE VIEW는 Subquery 형식을 이용한 임시 뷰(SQL문장 내에서만 유효한 Temporary VIEW)
1. 스칼라 서브쿼리 예시
(WHERE절)
(1) SELECT MIN(SAL) FROM EMP; -> 검색 시 emp 테이블에서 min(sal)의 값은 800
(2) (1)의 SELECT 문장을 활용하여 EMP 테이블의 WHERE 조건에 대입하여 일치하는 값 추출
-> SELECT * FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP);
(COLUMN절)
(1) column에 subquery를 주어서 dept 테이블과 emp 테이블 사이의 PK와 FK가 일치하는 항목들을 노출시킴
-->> 위 코드는 Join을 이용하면 더 편하게 사용이 가능하니 상황에 따라 판단해서 사용
2. 인라인뷰 서브쿼리 예시
(FROM절)
(1) emp 테이블의 deptno가 10인 Temporary VIEW(emp10_view) 생성 후 from절 출력
서브쿼리를 활용하여 보다 간단하게 SQL문을 작성하는 법을 공부해보았습니다.
감사합니다.
'SQL' 카테고리의 다른 글
SQL의 DML(Data Manipulation Language)에 대해 알아보자 (0) | 2021.07.15 |
---|---|
SQL의 set 알아보기! (feat. 집합연산자, union, intersect, minus) (0) | 2021.07.14 |
SQL의 핵심! JOIN 알아보기(ORACLE JOIN, ANSI JOIN) (0) | 2021.07.11 |
SELECT문 내용 정리 및 활용해보기 5 (feat. 그룹함수, 그룹핑) (0) | 2021.07.09 |
SELECT문 내용 정리 및 활용해보기 4 (feat. 날짜 함수, DECODE) (0) | 2021.07.08 |