개발자 항해

서브쿼리(subquery) - 2. 다중행 서브쿼리 본문

DB/MySQL

서브쿼리(subquery) - 2. 다중행 서브쿼리

리치Y 2022. 7. 22. 11:52
  • 다중행 서브쿼리란?

 서브쿼리로부터 메인쿼리로 여러 개의 값(여러 행)이 반환되는 경우

다중행 서브쿼리인 경우 메인쿼리에 다중행비교연산자를 준비해야함

 

- 다중행 비교 연산자 종류

 

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