안녕하세요! 백엔드 개발자 여러분. 오늘은 데이터베이스 쿼리에서 매우 유용하게 쓰이는 서브쿼리(Subquery)에 대해 자세히 알아보는 시간을 갖도록 하겠습니다. 복잡한 데이터 조회를 간결하고 효율적으로 처리하는 데 서브쿼리가 얼마나 큰 도움을 주는지 함께 살펴보면서, 실력 향상에 도움이 되는 내용을 다뤄보겠습니다.
서브쿼리란 무엇일까요?
간단히 말해, 서브쿼리는 다른 SQL 쿼리 안에 중첩되어 실행되는 쿼리입니다. 마치 함수처럼, 큰 쿼리 안에서 특정 작업을 수행하고 그 결과를 이용하여 최종 결과를 도출하는 역할을 합니다. SELECT, INSERT, UPDATE, DELETE 등 다양한 SQL 문에서 서브쿼리를 활용할 수 있으며, 특정 값을 조회하거나 조건을 세련되게 설정하는 데 매우 효과적입니다. 덕분에 복잡한 조건을 여러 개의 쿼리로 나누어 처리하는 것보다 훨씬 효율적이고 가독성 좋은 코드를 작성할 수 있게 됩니다.
서브쿼리의 종류: 단일행 서브쿼리 vs. 다중행 서브쿼리
서브쿼리는 반환하는 결과의 개수에 따라 크게 두 가지로 나눌 수 있습니다.
-
단일행 서브쿼리(Single Row Subquery): 이름에서 알 수 있듯이, 단 하나의 값만을 반환하는 서브쿼리입니다.
=,>,<,>=,<=와 같은 비교 연산자와 함께 사용하여 조건을 설정할 수 있습니다. 예를 들어, "평균 급여보다 높은 급여를 받는 직원"을 조회하는 쿼리에서 평균 급여를 계산하는 부분이 단일행 서브쿼리가 될 수 있습니다.AVG(salary)함수의 결과는 단일 값이므로,salary > (SELECT AVG(salary) FROM employees)와 같이 사용하면 됩니다. -
다중행 서브쿼리(Multi-row Subquery): 여러 개의 값을 반환하는 서브쿼리입니다. 이 경우에는
IN,ANY,ALL등의 연산자를 사용하여 서브쿼리의 결과와 비교해야 합니다.IN연산자는 서브쿼리의 결과 집합 중 하나라도 일치하는 경우 참으로 평가하고,ANY와ALL은 각각 서브쿼리 결과 중 하나 이상, 또는 모든 값과 비교하는 조건을 제공합니다. 다중행 서브쿼리는 복잡한 조건을 표현하는 데 강력한 도구가 됩니다. 예를 들어, 특정 부서에 속한 모든 직원의 목록을 가져오는 경우에 해당 부서의 직원 ID들을 조회하는 서브쿼리가 다중행 서브쿼리가 됩니다.
결론: 서브쿼리의 활용과 주의사항
서브쿼리는 데이터베이스 쿼리를 작성할 때 매우 유용한 도구입니다. 하지만, 서브쿼리를 과도하게 사용하면 쿼리 성능이 저하될 수 있으므로, 최적화된 쿼리를 작성하기 위한 노력이 필요합니다. 서브쿼리 대신 JOIN 문을 사용하는 것이 더 효율적인 경우도 많으므로, 상황에 맞는 최적의 방법을 선택하는 것이 중요합니다. 이 글을 통해 서브쿼리에 대한 기본적인 이해를 쌓고, 여러분의 백엔드 개발 역량 향상에 도움이 되기를 바랍니다. 다음 시간에는 서브쿼리 최적화에 대한 내용으로 다시 찾아뵙겠습니다!