오늘은 서브쿼리를 정리해보려고 합니다 :)

서브쿼리란 말 그대로 쿼리문 안에 또 다른 쿼리문을 넣는 것을 의미합니다.

다양한 절의 서브쿼리가 존재하지만, 저는 FROM절 서브쿼리와 WHERE절 서브쿼리를 다뤄보도록 하겠습니다.

 

[Index]

1. FROM절 서브쿼리

   1) FROM절 서브쿼리란?

   2) FROM절 서브쿼리 예시 (HackerRank - Top Earners)

2. WHERE절 서브쿼리

   1) WHERE절 서브쿼리란?

   2) WHERE절 서브쿼리 예시

3. 기타 서브쿼리 사용

 

 

 


 

 

 

1. FROM절 서브쿼리

 

1) FROM절 서브쿼리란?

   FROM절에 테이블명이 아닌 '쿼리문'을 작성하는 것을 의미한다.

   이때, FROM절에 작성되는 쿼리는 서브쿼리에 해당하고, 서브쿼리를 포함하는 쿼리는 본쿼리에 해당한다.

   인라인 뷰(Inline View) 라고도 한다. 

 

2) FROM절 서브쿼리 예시 (HackerRank - Top Earners)

<code>

SELECT *
FROM(SELECT employee_id
     	  , name
          , months
          , salary
          , months * salary AS earnings
     FROM employee) t
WHERE t.earnings >= 100000

HackerRank Top Earners의 employee 테이블을 이용하였습니다.

FROM절에 months * salary 를 계산한 earnings 컬럼을 추가하는 서브쿼리로

earnings가 100000 이상인 값들을 출력하는 SQL문을 작성하였습니다.

 

<result>

서브쿼리로 생성한 earnings 컬럼이 추가된 t 테이블에서

t 테이블의 earnings의 값이 100000 이상인 행들만 출력되었습니다.

이때, 컬럼명은 순서대로 employee_id, name, months, salary, earnings

 

 

 

 

2. WHERE절 서브쿼리

 

1) WHERE절 서브쿼리란?

   WHERE절에 '쿼리문'을 작성하여 조건을 주게 된다.

   이때, WHERE절에 작성되는 쿼리는 서브쿼리에 해당하고, 서브쿼리를 포함하는 쿼리는 본쿼리에 해당한다.

   중첩 서브쿼리(Nested Subquery) 라고도 한다.

 

2) WHERE절 서브쿼리 예시 (HackerRank - Top Earners)

<code>

SELECT *
FROM employee
WHERE salary = (SELECT MAX(salary) FROM employee)

HackerRank Top Earners 의 employee 테이블을 이용하였습니다.

employee 테이블에서 salary의 최댓값을 출력하는 쿼리문을 WHERE절의 조건문으로 주어

salary가 최댓값을 가지는 행을 출력하는 SQL문을 작성하였습니다.

 

<result>

서브쿼리문 SELECT MAX(salary) FROM employee 에서 salary의 최댓값인 5247이 출력되었고,

본쿼리의 WHERE절에 의해서 salary가 서브쿼리의 출력값인 5247에 해당하는 행들만 출력되었습니다.

이때, 컬럼명은 순서대로 employee_id, name, months, salary

 

 

 

 

3. 기타 서브쿼리 사용

 

FROM절, WHERE절 이외에도 서브쿼리를 사용할 수 있는 곳들

  • SELECT
  • FROM
  • WHERE
  • HAVING
  • ORDER BY
  • INSERT문의 VALUES
  • UPDATE문의 SET

 

 

 

 


 

본 게시글은 인프런의 '[백문이불여일타] 데이터 분석을 위한 고급 SQL' 강의를 듣고 저의 생각을 바탕으로 강의 내용을 재구성하여 작성한 것입니다. 😀

 

 

'📖 STUDY > SQL' 카테고리의 다른 글

[EP.00] SQL 공부 다시 시작하기  (2) 2023.10.11
[SQL] 윈도우 함수  (0) 2022.04.07
[SQL] INSERT, UPDATE, DELETE  (0) 2022.03.26
[SQL] UNION, UNION ALL  (0) 2022.03.15
[SQL] DATE_ADD, DATE_SUB  (0) 2022.03.15

+ Recent posts