본문 바로가기

IT/DB

데이터베이스 SQL 서브쿼리 EXIST 함수 사용

300x250

 

 

 

SQL에서 EXISTS는 서브쿼리의 결과가 존재하는지를 확인하는 조건절입니다.

 

즉, EXISTS는 서브쿼리가 한 개 이상의 행을 반환하면 참(True)을 반환하고, 행을 반환하지 않으면 거짓(False)을 반환합니다.

 

EXISTS는 주로 데이터 존재 여부를 확인하는 데 사용되며, 서브쿼리 내부에서 실제로 데이터를 반환할 필요는 없습니다.

 

단순히 해당 조건을 만족하는 행이 있는지 여부만을 판단합니다.

 

EXISTS 구문:

SELECT column_list 
FROM table_name 
WHERE EXISTS 
( SELECT 1 FROM another_table WHERE condition );
 
  • EXISTS는 서브쿼리의 결과가 존재하면 참을 반환하여 WHERE 절의 조건을 만족시킵니다.
  • 서브쿼리는 SELECT 뒤에 무엇을 쓰든 상관없습니다. 보통 SELECT 1처럼 단순한 값을 씁니다.

 

사용 예시:

 

1. EXISTS를 사용한 간단한 조회

다음은 Employees 테이블에서 특정 부서(Departments)에 속한 직원만을 조회하는 예시입니다.

SELECT employee_id, name 
FROM Employees e 
WHERE EXISTS 
( SELECT 1 FROM Departments d WHERE d.department_id = e.department_id );

 

  • 이 쿼리는 Employees 테이블에서 Departments 테이블에 부서가 존재하는 직원만을 조회합니다.
  • EXISTS 절 내의 서브쿼리는 부서가 Employees.department_id와 일치하는 부서가 있는지 확인합니다.
  • 서브쿼리가 조건을 만족하는 행을 하나라도 반환하면 해당 직원 정보가 출력됩니다.

 

2. NOT EXISTS 조건

 

NOT EXISTS는 서브쿼리의 결과가 없을 때 참을 반환합니다. 즉, 서브쿼리가 행을 반환하지 않으면 참으로 처리됩니다.

SELECT employee_id, name 
FROM Employees e 
WHERE NOT EXISTS 
( SELECT 1 FROM Departments d WHERE d.department_id = e.department_id );
 
  • 이 쿼리는 Employees 테이블에서 Departments 테이블에 해당 부서가 없는 직원만을 조회합니다.
  • 즉, 부서에 속하지 않은 직원들만 결과에 포함됩니다.

 

3. 서브쿼리에서의 활용

다음은 Products 테이블에서 판매된 적이 없는 상품을 조회하는 예시입니다.

SELECT product_id, product_name 
FROM Products p 
WHERE NOT EXISTS 
( SELECT 1 FROM Orders o WHERE o.product_id = p.product_id );

 

  • Products 테이블에서 Orders 테이블에 해당 상품의 주문 기록이 없는 상품을 조회합니다.
  • NOT EXISTS는 서브쿼리에서 주문 내역이 없을 때 참을 반환하므로, 판매되지 않은 상품을 확인할 수 있습니다.

 

# EXISTS vs IN 차이:

  • EXISTS는 행 존재 여부만을 확인하기 때문에, 서브쿼리의 결과가 많더라도 성능에 크게 영향을 받지 않습니다.
  • 반면, IN은 서브쿼리의 모든 결과를 메모리에 저장하여 비교하므로 데이터 양이 많으면 성능이 저하될 수 있습니다.

요약:

  • EXISTS: 서브쿼리가 한 개 이상의 행을 반환하면 참(True), 그렇지 않으면 거짓(False)을 반환.
  • NOT EXISTS: 서브쿼리가 행을 반환하지 않으면 참(True)을 반환.
  • 주로 데이터의 존재 여부를 확인하는 데 사용.
300x250