Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL

SQL EXISTS 연산자 완벽 가이드: 기본 문법부터 실전 예제까지

SQL에서 쿼리를 작성하는 방법은 매우 다양합니다. 그중 WHERE 절에서 활용할 수 있는 강력한 기능 중 하나가 바로 데이터베이스에 특정 조건과 일치하는 행(row)이 존재하는지 확인하는 것입니다. 이때 사용하는 것이 바로 EXISTS 연산자입니다.

SQL EXISTS 기본 문법

EXISTS 연산자의 기본 문법은 다음과 같습니다.

SELECT <Column>
FROM <Table 1 Name>
WHERE EXISTS (SELECT <Column> FROM <Table 2 Name> WHERE <Table 2 Primary Key> = <Table 1 Primary Key> AND <Another Column From Table 2> = <someConstraint>);

SQL의 EXISTS 조건은 괄호 안에 포함된 서브쿼리(subquery)가 참(true)을 반환하는 행에 대해서만, 외부 쿼리에서 선택한 열의 값을 결과로 돌려줍니다. 즉, 서브쿼리의 결과 존재 여부 자체가 필터 역할을 하는 셈입니다.

실전 예제

W3Schools에서 제공하는 예제를 살펴보겠습니다. 아래 쿼리는 공급업체(Suppliers) 테이블에서 공급업체 이름을 조회하며, 내부의 서브쿼리가 EXISTS 조건을 통과할 때 해당 행을 결과에 포함시킵니다.

SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.SupplierID AND Price < 20);

이 쿼리의 의미는 "20 미만의 가격으로 판매되는 제품을 하나라도 보유한 공급업체의 이름만 조회하라"는 것입니다. 이처럼 SQL EXISTS는 일종의 필터처럼 동작하며, 최종적으로 반환되는 데이터는 첫 번째 테이블(외부 쿼리)에서 선택한 열들로 제한됩니다.

EXISTS 활용 시 알아두면 좋은 팁

  • EXISTS는 서브쿼리 결과의 존재 여부만 확인하므로, 서브쿼리의 SELECT 절에 어떤 열을 지정하더라도 성능에는 영향을 주지 않습니다. 관례상 SELECT 1이나 SELECT *를 많이 사용합니다.
  • NOT EXISTS를 사용하면 반대로 조건에 맞는 행이 존재하지 않는 경우를 손쉽게 찾을 수 있습니다.
  • IN 연산자와 결과가 비슷해 보이지만, 대량의 데이터를 다룰 때는 EXISTS가 더 효율적으로 동작하는 경우가 많습니다.

W3Schools의 샌드박스(sandbox) 환경에서 이 EXISTS 연산자와 다양한 SQL 연산자, 쿼리문을 직접 실습해 보세요. 실습을 반복하다 보면 쿼리 작성 실력이 한 단계 향상될 것입니다!