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
);
TRUE.FALSE.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에 해당 사용자가 있으면 그 사용자만 반환.
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 절에서도 서브쿼리와 함께 사용하여 특정 데이터의 존재 여부를 반환할 수 있습니다.
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)로 반환.