서브쿼리는 하나의 쿼리 내에서 다른 쿼리를 포함하는 방식으로 서브쿼리는 일반적으로 괄호()로 묶어 사용한다. SELECT, FROM, WHERE 및 HAVING 절과 같은 다양한 부분에서 사용될 수 있다.
단일 행 서브쿼리
단일 행 서브쿼리는 오직 하나의 행과 하나의 열을 반환하는 서브쿼리이다. 주 쿼리의 조건문(WHERE)에서 단일 행 서브쿼리와 비교 연산자(=, >, >=, <, <=, <>)를 통해 비교를 할 수 있다.
# 'SCOTT'의 급여보다 더 많은 급여를 받는 사원명
SELECT ename FROM emp
WHERE sal > (SELECT sal FROM emp WHERE ename='SCOTT'); #KING
다중 행 서브쿼리
서브쿼리에서 반환되는 결과가 하나 이상의 행을 반환하는 서브쿼리이다. 다중 행 연산자와 함께 사용한다. 다중 행 서브쿼리의 경우에는 모든 반환 행을 스캔해야 하므로 성능이 저하가 된다. 다중 행 서브쿼리보다는 단일 행 서브쿼리로 변경하면 성능을 개선할 수 있다.
종류 | 의미 |
IN | 메인 쿼리의 비교 조건이 서브 쿼리의 결과 중 하나라도 일치하면 참 |
ANY, SOME | 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상 일치하면 참 |
ALL | 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참 |
EXIST | 메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참 |
# 3000이상 받는 사원이 소속한 부서와 동일한 부서에서 근무하는 사원들의 이름, 부서번호
SELECT ename, deptno
FROM emp
WHERE deptno IN (SELECT DISTINCT deptno FROM emp WHERE sal >= 3000);
# 서브쿼리를 보면 하나 이상의 결과를 반환한다.
SELECT DISTINCT deptno FROM emp WHERE sal >= 3000
#'MILLER'보다 나중에 입사한 모든 사원 정보 출력
# ANY는 반환값 중에 하나라도 조건을 만족하면 참으로 간주
SELECT * FROM emp
WHERE hiredate > ANY (SELECT hiredate FROM emp WHERE ename='MILLER');
# 부서번호 20의 모든 사원보다 sal(급여)가 높은 사원 정보 출력
SELECT * FROM emp
WHERE sal > ALL (SELECT sal FROM emp WHERE deptno = 20);
'Database > MariaDB' 카테고리의 다른 글
MariaDB : JSON 데이터 사용하기 (0) | 2024.10.17 |
---|---|
MariaDB : DCL (Data Control Language)과 TCL(Transaction Control Language)에 데해서 (0) | 2024.10.17 |
MariaDB : DML(Data Manipulation Language)에 대해서 (1) | 2024.10.16 |
MariaDB : DDL(Data Definition Language)에 대해서 (0) | 2024.10.16 |
MariaDB: JOIN절에 대해서 (0) | 2024.10.15 |
MariaDB : 그룹함수, GROUP BY, HAVING절에 대해서 (0) | 2024.10.14 |
MariaDB : SQL 주요함수에 대해서 (0) | 2024.10.14 |
MariaDB : ORDER BY절에 대해서 (0) | 2024.10.14 |