MySQL에서는 하위 쿼리의 행 존재 여부를 기준으로 데이터를 필터링하기 위해 쿼리에 IN과 EXISTS가 모두 사용됩니다. 그러나 이들은 서로 다른 방식으로 작동하며 둘 중 하나를 선택하면 쿼리 성능에 영향을 미칠 수 있습니다. 설명과 실제 사례를 통해 차이점을 살펴보겠습니다.
설명:
IN 절은 열 값이 목록이나 하위 쿼리의 값과 일치하는지 여부에 따라 행을 필터링하는 데 사용됩니다. 내부 쿼리에서 일치하는 값을 확인하고 이를 외부 쿼리와 비교합니다.
성능:
IN 절은 일반적으로 하위 쿼리가 적은 수의 레코드를 반환할 때 효율적입니다. 그러나 하위 쿼리가 큰 데이터 세트를 반환하는 경우 IN이 느려질 수 있습니다.
구문:
SELECT columns FROM table WHERE column IN (subquery);
설명:
EXISTS 절은 하위 쿼리에서 반환된 행이 있는지 확인합니다. 하위 쿼리가 행을 반환하면 EXISTS는 TRUE로 평가되고 외부 쿼리가 진행됩니다. 행의 내용은 중요하지 않고 행의 존재 여부에만 관심이 있습니다.
성능:
EXISTS는 일치 항목을 찾으면 처리를 중지하므로 일반적으로 대규모 데이터 세트의 경우 더 빠릅니다. 이렇게 하면 많은 행을 반환하는 하위 쿼리로 작업할 때 효율적입니다.
구문:
SELECT columns FROM table WHERE EXISTS (subquery);
고객과 주문이라는 두 개의 테이블을 생각해 보겠습니다.
customer_id | customer_name |
---|---|
1 | John Doe |
2 | Jane Smith |
3 | Alice Brown |
order_id | customer_id | order_total |
---|---|---|
1 | 1 | 200 |
2 | 1 | 150 |
3 | 2 | 300 |
We want to find all customers who have placed at least one order.
SELECT customer_name FROM customers WHERE customer_id IN (SELECT customer_id FROM orders);
Explanation:
Result:
| customer_name |
|---------------|
| John Doe |
| Jane Smith |
SELECT customer_name FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);
Explanation:
Result:
| customer_name |
|---------------|
| John Doe |
| Jane Smith |
Return Values:
Efficiency:
Use Case:
Assume we have:
Query with IN:
SELECT customer_name FROM customers WHERE customer_id IN (SELECT customer_id FROM orders);
Query with EXISTS:
SELECT customer_name FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);
위 내용은 SQL의 IN과 EXISTS: 성능 및 사용량 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!