서브 쿼리는 SELECT, INSERT, UPDATE, DELETE와 같은 SQL 문 안에 포함된 쿼리입니다. 주로 복잡한 데이터를 처리하거나 특정 조건을 만족하는 데이터를 조회할 때 사용됩니다.
예를 들어, 아이디가 14번인 직원보다 생일이 빠른 다른 직원들의 아이디, 이름, 생일을 알고 싶다고 가정해 보겠습니다.
SELECT birth_date FROM employee WHERE id = 14;
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);
이렇게 작성하면 서브 쿼리가 메인 쿼리 내에서 한 번에 실행되어 조건에 맞는 데이터를 효율적으로 조회할 수 있습니다.
Inner Query 또는 Nested Query라고도 합니다.Outer Query라고도 합니다.서브 쿼리는 다양한 방식으로 활용할 수 있습니다. 몇 가지 대표적인 예제를 통해 서브 쿼리의 활용 방법을 살펴보겠습니다.
아이디가 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);
아이디가 5번인 직원과 같은 프로젝트에 참여한 직원들의 아이디를 조회하려면 다음과 같이 작성할 수 있습니다:
SELECT DISTINCT employee_id
FROM works_on
WHERE project_id IN (SELECT project_id FROM works_on WHERE employee_id = 5);
부서 리더보다 높은 연봉을 받는 부서원이 있는 부서의 리더 정보를 조회하려면 다음과 같이 작성할 수 있습니다:
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는 서브 쿼리의 결과 중 하나라도 조건을 만족하면 참이 됩니다.
서브 쿼리는 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로 표시합니다.
SQL에서 서브 쿼리는 복잡한 조건을 처리하고 다양한 데이터를 한 번에 조회할 수 있게 해주는 강력한 도구입니다. 이 기능을 활용하면 데이터베이스 쿼리의 효율성과 유연성을 크게 향상시킬 수 있습니다. 서브 쿼리를 통해 개발자는 더욱 정교하고 세밀한 데이터 분석이 가능해지며, 이는 비즈니스 의사 결정에 필요한 중요한 인사이트를 제공하는 데 큰 도움이 됩니다.
서브 쿼리의 다양한 활용 방법을 익히고 실제 프로젝트에 적용함으로써, 데이터베이스 쿼리 작성 능력을 한 단계 높일 수 있습니다. 이는 단순히 기술적 스킬의 향상을 넘어, 데이터를 더욱 효과적으로 다루고 해석할 수 있는 능력을 기르는 것을 의미합니다. 결과적으로 서브 쿼리의 숙달은 데이터베이스 관리와 데이터 분석 분야에서 전문성을 높이는 데 큰 기여를 할 것입니다.
마지막으로, 서브 쿼리를 사용할 때는 성능 최적화에 주의를 기울여야 합니다. 복잡한 서브 쿼리는 때로 쿼리 실행 시간을 늘릴 수 있으므로, 적절한 인덱싱과 쿼리 최적화 기법을 함께 고려하는 것이 중요합니다. 이러한 균형 잡힌 접근 방식을 통해 서브 쿼리의 장점을 최대한 활용하면서도 데이터베이스의 전반적인 성능을 유지할 수 있을 것입니다.
https://www.youtube.com/watch?v=aL0XXc1yGPs&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe