Backend/SQL

[SQL]서브쿼리(Subquery)

해로몬 2024. 10. 28. 12:10

서브쿼리란?

하나의 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