
■ 서브쿼리
예제)
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과 같은 복수 연산자를 사용해야 한다.
'Study > DataBase' 카테고리의 다른 글
Database기초 7일차 <데이터조작 DML> (0) | 2022.09.22 |
---|---|
Database기초 6일차 <서브쿼리> (1) | 2022.09.21 |
Database기초 5일차 <Group by, Having> (2) | 2022.09.19 |
Database기초 4일차 <예제 및 JOIN> (0) | 2022.09.17 |
DATABASE기초 3일차 (0) | 2022.09.16 |