SQL 서브 쿼리: 다양한 조건으로 데이터를 조회하는 방법

이성혁·2024년 8월 28일

Database

목록 보기
5/24
post-thumbnail

1. 서브 쿼리란 무엇인가?

서브 쿼리는 SELECT, INSERT, UPDATE, DELETE와 같은 SQL 문 안에 포함된 쿼리입니다. 주로 복잡한 데이터를 처리하거나 특정 조건을 만족하는 데이터를 조회할 때 사용됩니다.

기본 예제: 생일이 빠른 직원 조회

예를 들어, 아이디가 14번인 직원보다 생일이 빠른 다른 직원들의 아이디, 이름, 생일을 알고 싶다고 가정해 보겠습니다.

  1. 먼저, 아이디가 14번인 직원의 생일을 조회하는 쿼리를 작성합니다.
SELECT birth_date FROM employee WHERE id = 14;
  1. 다음으로, 이 생일보다 빠른 다른 직원들의 정보를 조회합니다.
SELECT id, name, birth_date FROM employee WHERE birth_date < '1992-08-04';

위의 두 쿼리를 결합하여 하나의 서브 쿼리로 만들면 다음과 같습니다:

SELECT id, name, birth_date
FROM employee
WHERE birth_date < (SELECT birth_date FROM employee WHERE id = 14);

이렇게 작성하면 서브 쿼리가 메인 쿼리 내에서 한 번에 실행되어 조건에 맞는 데이터를 효율적으로 조회할 수 있습니다.

서브 쿼리의 용어 정리

  • 서브 쿼리(Subquery): 메인 쿼리 안에 포함된 쿼리. Inner Query 또는 Nested Query라고도 합니다.
  • 메인 쿼리(Main Query): 서브 쿼리를 포함하는 쿼리. Outer Query라고도 합니다.

2. 서브 쿼리의 다양한 활용

서브 쿼리는 다양한 방식으로 활용할 수 있습니다. 몇 가지 대표적인 예제를 통해 서브 쿼리의 활용 방법을 살펴보겠습니다.

예제 1: 같은 부서와 성별을 가진 직원 조회

아이디가 1번인 직원과 같은 부서에 속하고 같은 성별을 가진 직원들의 정보를 조회하려면 다음과 같이 쿼리를 작성할 수 있습니다:

SELECT id, name, position
FROM employee
WHERE department_id = (SELECT department_id FROM employee WHERE id = 1)
AND gender = (SELECT gender FROM employee WHERE id = 1);

예제 2: 특정 직원과 같은 프로젝트에 참여한 직원 조회

아이디가 5번인 직원과 같은 프로젝트에 참여한 직원들의 아이디를 조회하려면 다음과 같이 작성할 수 있습니다:

SELECT DISTINCT employee_id
FROM works_on
WHERE project_id IN (SELECT project_id FROM works_on WHERE employee_id = 5);

예제 3: 서브 쿼리를 사용해 부서 리더보다 높은 연봉을 받는 부서원 조회

부서 리더보다 높은 연봉을 받는 부서원이 있는 부서의 리더 정보를 조회하려면 다음과 같이 작성할 수 있습니다:

SELECT e.id, e.name, e.salary
FROM employee e
JOIN department d ON e.id = d.leader_id
WHERE e.salary < ANY (SELECT salary FROM employee WHERE department_id = d.id AND id != d.leader_id);

여기서 ANY는 서브 쿼리의 결과 중 하나라도 조건을 만족하면 참이 됩니다.

3. 서브 쿼리의 위치

서브 쿼리는 WHERE, FROM, SELECT 절 등 다양한 위치에서 사용할 수 있어 매우 유연한 데이터 조회가 가능합니다.

서브 쿼리를 FROM 절에 사용하기

서브 쿼리를 FROM 절에 사용하면 가상의 테이블을 생성하여 그 결과를 다른 쿼리에서 활용할 수 있습니다.

SELECT e.id, e.name, e.position
FROM employee e
JOIN (SELECT employee_id FROM works_on WHERE project_id = 2000) w
ON e.id = w.employee_id;

위 예제에서는 서브 쿼리를 통해 works_on 테이블에서 특정 프로젝트에 참여한 직원 목록을 조회한 후, 이 결과를 메인 쿼리에서 JOIN하여 사용합니다.

서브 쿼리를 SELECT 절에 사용하기

서브 쿼리를 SELECT 절에 사용하여 특정 컬럼에 대한 값을 동적으로 계산할 수 있습니다.

SELECT e.id, e.name, e.salary,
(SELECT MAX(salary) FROM employee WHERE department_id = e.department_id) AS max_salary
FROM employee e;

이 쿼리는 각 직원이 속한 부서의 최고 연봉을 조회하여 max_salary로 표시합니다.

4. 결론

SQL에서 서브 쿼리는 복잡한 조건을 처리하고 다양한 데이터를 한 번에 조회할 수 있게 해주는 강력한 도구입니다. 이 기능을 활용하면 데이터베이스 쿼리의 효율성과 유연성을 크게 향상시킬 수 있습니다. 서브 쿼리를 통해 개발자는 더욱 정교하고 세밀한 데이터 분석이 가능해지며, 이는 비즈니스 의사 결정에 필요한 중요한 인사이트를 제공하는 데 큰 도움이 됩니다.

서브 쿼리의 다양한 활용 방법을 익히고 실제 프로젝트에 적용함으로써, 데이터베이스 쿼리 작성 능력을 한 단계 높일 수 있습니다. 이는 단순히 기술적 스킬의 향상을 넘어, 데이터를 더욱 효과적으로 다루고 해석할 수 있는 능력을 기르는 것을 의미합니다. 결과적으로 서브 쿼리의 숙달은 데이터베이스 관리와 데이터 분석 분야에서 전문성을 높이는 데 큰 기여를 할 것입니다.

마지막으로, 서브 쿼리를 사용할 때는 성능 최적화에 주의를 기울여야 합니다. 복잡한 서브 쿼리는 때로 쿼리 실행 시간을 늘릴 수 있으므로, 적절한 인덱싱과 쿼리 최적화 기법을 함께 고려하는 것이 중요합니다. 이러한 균형 잡힌 접근 방식을 통해 서브 쿼리의 장점을 최대한 활용하면서도 데이터베이스의 전반적인 성능을 유지할 수 있을 것입니다.


출처

https://www.youtube.com/watch?v=aL0XXc1yGPs&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe

profile
항상 배우는 자세로 🪴

0개의 댓글