서브쿼리란?
하나의 SQL문 안에서 다른 SQL문을 중첩하여 사용하는 쿼리.
SELECT empno, ename, job, sal
FROM emp
WHERE sal >= (SELECT sal FROM emp WHERE ename = 'SCOTT');
//메인 쿼리 : WHERE sal >= (서브쿼리);
//서브쿼리 : SELECT sal FROM emp WHERE ename = 'SCOTT'
[유형]
1. 단일행 서브쿼리 (Single-Row-Subquery)
- 하나의 행을 반환하는 서브쿼리
- =,<,> 등 단일 값 비교 연산자와 함께 사용됨.
--1. 최저 급여를 받는 사원 정보 출력
select empno, ename, sal from emp where sal = (select min(sal) from emp);
+-------+-------+--------+
| empno | ename | sal |
+-------+-------+--------+
| 7369 | SMITH | 800.00 |
+-------+-------+--------+
1 row in set (0.001 sec)
--2. 20번 부서에서 최고 급여를 받는 사원보다 많은 급열르 받는 사원 정보 출력
select empno, ename, sal
from emp
where sal >=(select max(sal) from emp where deptno =20);
+-------+-------+---------+
| empno | ename | sal |
+-------+-------+---------+
| 7788 | SCOTT | 3000.00 |
| 7839 | KING | 5000.00 |
| 7902 | FORD | 3000.00 |
+-------+-------+---------+
3 rows in set (0.002 sec)
2. 복수행 서브쿼리(Multi-Row-SubQuery)
- 여러 행을 반환하는 서브쿼리
- IN,ANY,ALL 등 다중 값 비교 연산자와 사용됨.
--1. 부서별 최고 급열르 받는 사원에 대한 정보를 출력
select empno, ename, deptno, sal
from emp
where (deptno, sal) in (select deptno, max(sal) from emp group by deptno);
//부서별로 최고 급여를 받는 여러 사원이 있을 경우, 모든 사원의 정보를 출력함.
+-------+-------+--------+---------+
| empno | ename | deptno | sal |
+-------+-------+--------+---------+
| 7698 | BLAKE | 30 | 2850.00 |
| 7788 | SCOTT | 20 | 3000.00 |
| 7839 | KING | 10 | 5000.00 |
| 7902 | FORD | 20 | 3000.00 |
+-------+-------+--------+---------+
4 rows in set (0.001 sec)
< 또는 > 연산자와 ANY의 조합
ANY서브쿼리의 하나 이상의 값과 비교하여 조건을 만족하는 경우 TRUE를 반환함.
ANY와 <,> 연산자를 함께 사용하면 서브쿼리 결과 중 최소/최대 값에 기반하여 조건을 설정할 수 있다.
WHERE column < ANY (서브쿼리) : 서브쿼리 결과 중 최대값보다 작은 컬럼 값
WHERE column > ANY (서브쿼리) : 서브쿼리 결과 중 최소값보다 큰 컬럼 값
< 또는 > 연산자와 ALL의 조합
ALL은 서브쿼리의 모든 값과 비교하여 조건을 만족해야 TRUE를 반환함.
ALL과 <, > 연산자를 함께 사용하면 서브쿼리 결과의 최대값 또는 최소값과 비교하여 범위를 좁힐 수 있.
WHERE column < ALL (서브쿼리) : 서브쿼리 결과 중 최소값보다 작은 컬럼 값
WHERE column > ALL (서브쿼리) : 서브쿼리 결과 중 최대값보다 큰 컬럼 값
sal < any (서브쿼리) : 서브쿼리 결과 중 최대값보다 작은 sal 값
sal > any (서브쿼리) : 서브쿼리 결과 중 최소값보다 큰 sal 값
sal < all (서브쿼리) : 서브쿼리 결과 중 최소값보다 작은 sal 값
sal > all (서브쿼리) : 서브쿼리 결과 중 최대값보다 큰 sal 값
'Backend > SQL' 카테고리의 다른 글
| [SQL] 참조키 : 기본키, 외래키 (0) | 2024.10.29 |
|---|---|
| [SQL] DDL(Data Definition Language) (0) | 2024.10.28 |
| [SQL]JOIN (0) | 2024.10.28 |
| [SQL] GROUP BY (집계함수, HAVING) (0) | 2024.10.28 |
| [SQL] MariaDB 연산자/내장함수 (0) | 2024.10.25 |