SQL) EXISTS로 결과 판별하기

Songss·2024년 12월 16일

DBMS

목록 보기
14/20

SQL의 EXISTS란?
EXISTS는 SQL 서브쿼리의 결과가 존재하는지 여부를 확인하는 데 사용됩니다.

결과가 하나 이상의 행을 반환하면 TRUE,
행이 없으면 FALSE를 반환합니다.
EXISTS는 보통 조건절에서 사용되며, 특정 조건에 해당하는 데이터가 있는지 확인할 때 유용합니다.

물론, WHERE절 외에도 SELECT절에서 사용가능합니다.


문법

SELECT column1, column2
FROM table1
WHERE EXISTS (
    SELECT 1
    FROM table2
    WHERE table1.column = table2.column
);
  1. 주요 특징:
    서브쿼리 : EXISTS 안의 쿼리는 반드시 필요하며, 이를 통해 존재 여부를 판단합니다.
  2. 반환 값: 서브쿼리가 데이터를 반환하면 EXISTS는 TRUE.
    반환된 데이터가 없으면 EXISTS는 FALSE.
  3. SELECT 문에서 반환 값: SELECT 1, SELECT *, SELECT column_name 등 어떤 값이든 서브쿼리에 넣어도 결과는 동일합니다. EXISTS는 반환된 값의 내용이 아니라 존재 여부만 판단합니다.

실제 사용 사례
1. 데이터 존재 여부 확인
다른 테이블에 데이터가 존재하는 경우만 데이터를 조회:

SELECT *
FROM users
WHERE EXISTS (
    SELECT 1
    FROM orders
    WHERE users.id = orders.user_id
);

설명:
users 테이블의 각 행에 대해 orders 테이블에 해당 user_id가 존재하는지 확인.
orders에 해당 사용자가 있으면 그 사용자만 반환.


  1. 데이터가 없는 경우 처리 (NOT EXISTS)
    다른 테이블에 데이터가 없는 경우를 확인:
SELECT *
FROM users
WHERE NOT EXISTS (
    SELECT 1
    FROM orders
    WHERE users.id = orders.user_id
);

설명:
users 테이블에서 orders 테이블에 기록이 없는 사용자만 조회.


EXISTS vs IN
EXISTS:
서브쿼리의 존재 여부만 판단하며, 서브쿼리의 반환 값에 상관없이 빠르게 처리.
IN:
서브쿼리의 결과 값을 비교하며, 반환된 데이터가 많으면 성능이 저하될 수 있음.


EXISTS는 SELECT 문에서도 사용 가능합니다.
일반적으로 WHERE 절에서 조건을 확인하기 위해 많이 사용되지만, SELECT 절에서도 서브쿼리와 함께 사용하여 특정 데이터의 존재 여부를 반환할 수 있습니다.

  1. SELECT 문에서 EXISTS 사용하기
    예제 1: 특정 데이터의 존재 여부를 컬럼으로 반환
    다음은 users 테이블에 있는 각 사용자에 대해 주문이 있는지 여부를 확인하는 예제입니다:
SELECT 
    id,
    name,
    EXISTS (
        SELECT 1
        FROM orders
        WHERE users.id = orders.user_id
    ) AS has_orders
FROM users;

EXISTS 서브쿼리:
사용자의 id가 orders 테이블에 있는지 확인.
결과는 1(TRUE) 또는 0(FALSE)로 반환.

0개의 댓글