개발자 항해
서브쿼리(subquery) - 2. 다중행 서브쿼리 본문
- 다중행 서브쿼리란?
서브쿼리로부터 메인쿼리로 여러 개의 값(여러 행)이 반환되는 경우
다중행 서브쿼리인 경우 메인쿼리에 다중행비교연산자를 준비해야함
- 다중행 비교 연산자 종류
IN => ( = , OR )
NOT IN => ( <>, AND)
=ANY => ( =, OR ) (==) IN과 동일함
>ANY => ( >, OR ) : 최소값보다 크면 TRUE
>=ANY => ( >=, OR ) : 최소값보다 크거나 같으면 TRUE
<ANY => ( <, OR ) : 최대값보다 작으면 TRUE
<=ANY => ( <=, OR ) : 최대값보다 작거나 같으면 TRUE
<>ANY, !=ANY => ( <>, OR ) : 연산자의 성격이 없어서 사용안함
=ALL => ( =, AND ) : 연산자의 성격이 없어서 사용안함
>ALL => ( >, AND ) : 최대값보다 크면 TRUE
>=ALL => ( >=, AND ) : 최대값보다 크거나 같으면 TRUE
<ALL => ( <, AND ) : 최소값보다 작으면 TRUE
<=ALL => ( <=, AND ) : 최소값보다 작거나 같으면 TRUE
<>ALL, !=ALL => ( <>, AND ) (==) NOT IN과 동일함
1) IN 비교연산자
IN을 사용한 구문이다
어떤 의미인지 살펴보자
먼저 서브쿼리 1번, 2번부터 어떤 값인지 먼저 실행해보았다.
1번 서브쿼리는 employees 중에 employee_id가 174이거나 141인 사원의
manager_id를 구하는 서브쿼리 이다. 이해를 돕기위해 employee_id를 추가하였다.
2번 서브쿼리는 employee_id가 174이거나 141인 사원의 department_id를
구하는 쿼리이다. 이해를 돕기위해 employee_id 추가
종합해보면 위 쿼리의 뜻은
manager_id가 124나 149이고
department_id가 50이거나 80 이고
employee_id가 174나 141이 아닌
employee_id,last_name,manager_id, department_id 를 구하라는 뜻이다.
아래는 결과값
2) ANY 비교연산자
아래는 <ANY 비교연산자를 이용한 쿼리이다.
서브쿼리의 값이 4200~9000 사이 이므로
결과 값은 salary가 서브쿼리 최대값인 9000미만이 값들이 나온다.
3) ALL 비교연산자
ALL을 이용한 구문이다.
서브쿼리를 먼저 보니 salary가 4200~9000사이 값이다.
연산자가 <ALL이므로 메인쿼리에서는 4200보다 작은 값(최소값보다 작은값)을 참조할것이다.
실행하면 결과값은 아래와 같이 나온다.
'DB > MySQL' 카테고리의 다른 글
Group by 절 (+ Having절) (0) | 2022.07.25 |
---|---|
그룹함수 (0) | 2022.07.25 |
서브쿼리(subquery) - 1. 단일행 서브쿼리 (0) | 2022.07.21 |
트랜잭션 ( Transaction ) (0) | 2022.07.20 |
DML ( 데이터조작어 ) - 3. delete (0) | 2022.07.20 |