본문 바로가기

Learning/SQL

서브쿼리 - 단일행

<서브쿼리 - 단일행>

 

  • 서브 쿼리 (Sub Query): 하나의 SQL문에 포함되어 있는 또 다른 SQL문으로 메인 쿼리(main query)보다 더 먼저 실행됨

    • 단일행 서브 쿼리: SELECT문에서 오직 하나의 행만 반환하는 쿼리. 단일 행 연산자(=,>,>=,<,<=,<>,!=)

    • 다중행 서브 쿼리: 하나 이상의 행을 반환하는 서브쿼리. 단일행 연산자를 사용하지 못하며, 다중행 연산자(IN, NOT IN, ANY, ALL, EXISTS)만 사용가능

    • 다중열 서브 쿼리: 결과 값이 두 개 이상의 컬럼을 반환하는 쿼리.

 

 

  • 그룹함수를 서브쿼리로 이용

  • employees 테이블에서 가장 높은 급여를 받는 직원 정보를 출력

1
2
3
SELECT *
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);
cs

 

 

 


 

<서브쿼리 예제>

 

  • Abel 직원보다 급여를 더 많이 받는 직원의 employee_id, last_name, salary 출력

 

    • Abel의 급여 확인

1
2
3
SELECT salary
FROM employees
WHERE last_name = 'Abel';
cs

 

 

    • 서브쿼리를 사용

1
2
3
4
5
SELECT employee_id, last_name, salary
FROM employees
WHERE salary > (SELECT salary
                FROM employees
                WHERE last_name = 'Abel');
cs

 

 


 

  • 'Bull'이란 last_name을 가진 사원의 부서에서 Bull보다 높은 급여를 받는 사원들을 출력

1
2
3
4
5
6
7
8
9
SELECT employee_id 직원번호, last_name 이름,
    department_id 부서번호, salary 급여
FROM employees
WHERE department_id = (SELECT department_id
          FROM employees
          WHERE last_name = 'Bull')
          AND salary > (SELECT salary
          FROM employees
          WHERE last_name = 'Bull');
cs

 

 

 


 

  • 'Russell'이란 last_name의 직원번호를 manager_id로 가지는 직원들의 last_name, salary, manager_id를 출력

1
2
3
4
5
SELECT last_name, salary, manager_id
FROM employees
WHERE manager_id = (SELECT employee_id
       FROM employees
       WHERE last_name = 'Russell');
cs

 

 


 

 

  • jobs테이블에 job_title이 'Stock Manager'의 job_id를 가진 직원들의 정보를 employees 테이블에서 찾아서 출력

1
2
3
4
5
SELECT *
FROM employees
WHERE job_id = (SELECT job_id
       FROM jobs
       WHERE job_title='Stock Manager');
cs

 

 

 

'Learning > SQL' 카테고리의 다른 글

서브쿼리 - 다중열  (0) 2020.06.18
서브쿼리 - 다중행  (0) 2020.06.18
조인 (JOIN) - 리뷰 및 예제  (0) 2020.06.18
조인 (JOIN) - 교차조인  (0) 2020.06.18
조인 (JOIN) - 외부조인  (0) 2020.06.18