728x90

■ 서브쿼리

 

예제)

Abel 이라는 사원이 받는 급여보다 더 많이 받는 사원의 이름과 급여를 출력하시오

select salary
from employees
where last_name = 'Abel'

--> 11000

select last_name, salary
from employees
where salary >11000
/

두 문장을 합치면

select last_name, salary
from employees
where salary > (
select salary
from employees
where last_name = 'Abel')
/

으로 실행된다

 

쿼리안에 쿼리가 들어가는 것 ==> 서브쿼리

 

** 특정값을 모를때 사용한다

** 조인을 대체하기도 한다.

** 꽃중의 꽃으로 현업에서 자주 사용한다.

** group by절을 제외하고 전체 절에서 사용가능하다

** 조건절 where, having 은 값을 대체하기 위해 사용한다.

(조건문의 특정 값을 모를때 서브쿼리를 통해서 찾는다.)

 

* 서브쿼리 먼저 실행되고 메인쿼리가 실행된다!

 

● 서브쿼리 지침

-  서브쿼리는 괄호로 묶는다.

-  비교 조건의 오른쪽에 서브쿼리를 넣는다.

-  서브쿼리의 ORDER BY절에서 안쓰는게 좋다.

-  단일행 서브쿼리에는 단일행 연산자를 사용하고 다중행 서브쿼리에는 다중행 연산자(in)를 사용한다.

 

 

1. 내가 뭘 모르는지 찾자(Abel의 급여)

2. 모르는 걸 서브쿼리를 통해 찾자

3. 모르는 걸 찾기 위해 서브쿼리의 select list절에 어떤 컬럼을 사용할 것인지 결정(select salary -> Abel의 급여)

4. 서브쿼리가 넘겨주는 컬럼의 값을 메인쿼리의 조건문의 어떤 컬럼이 받을 것인지 결정하자.(where salary -> select salary) ->반드시 서브쿼리의 컬럼과 메인쿼리의 조건문의 컬럼은 데이터 타입이 같아야한다. 단, 컬럼의 이름은 달라도 상관없음(그러나 두개의 컬럼의 이름은 같은경우가 대부분임)

5. 서브쿼리의 결과가 하나이면 =, > 과 같은 단일 연산자를, 결과가 복수이면 in과 같은 복수 연산자를 사용해야 한다.

 

 

728x90
복사했습니다!