DataBase/MySQL

[MySQL] 쿼리 절 순서

누구세연 2024. 8. 4. 16:17

데이터베이스에서 데이터를 조회할 때, SQL 쿼리의 여러 절들이 결합되어 원하는 결과를 얻을 수 있습니다.

MySQL 쿼리 절의 실행 순서를 이해하면 더 효율적이고 정확한 쿼리를 작성할 수 있습니다🤗

 

MySQL 쿼리 절 순서

MySQL 쿼리는 다음 순서로 실행됩니다.

  1. FROM
    데이터를 가져올 테이블을 지정합니다.
  2. JOIN
    여러 테이블을 결합합니다.
  3. WHERE
    특정 조건을 만족하는 행만 선택합니다.
  4. GROUP BY
    선택된 행을 그룹화합니다.
  5. HAVING
    그룹화된 데이터에 대한 조건을 지정합니다.
  6. SELECT
    데이터를 선택합니다.
  7. ORDER BY
    결과를 정렬합니다.
  8. LIMIT
    반환할 행의 수를 제한합니다.

예제 쿼리를 통하여 각 절이 어떻게 함께 작동하는지 살펴보겠습니다.

SELECT 
    customers.customer_id, 
    customers.name, 
    COUNT(orders.order_id) AS total_orders 
FROM 
    customers 
JOIN 
    orders ON customers.customer_id = orders.customer_id 
WHERE 
    customers.status = 'active' 
GROUP BY 
    customers.customer_id, customers.name 
HAVING 
    COUNT(orders.order_id) > 5 
ORDER BY 
    total_orders DESC 
LIMIT 10;

이 쿼리는 "활성상태"(active)인 고객 중에서 주문이 5개 이상인 고객을 찾아내고, 그 고객들을 주문 수에 따라 내림차순으로 정렬하여 상위 10명의 고객을 반환합니다.

 

쿼리 절 설명

1. FROM: customers 테이블에서 데이터를 가져옵니다.

FROM customers

2. JOIN: orders 테이블과 customers 테이블을 customer_id를 기준으로 결합합니다.

JOIN orders ON customers.customer_id = orders.customer_id

3. WHERE: customers 테이블에서 status가 'active'인 행만 선택합니다.

WHERE customers.status = 'active'

4. GROUP BY: customer_id와 name을 기준으로 데이터를 그룹화합니다.

GROUP BY customers.customer_id, customers.name

5. HAVING: 각 고객의 주문 수(total_orders)가 5개 이상인 그룹만 선택합니다.

HAVING COUNT(orders.order_id) > 5

6. SELECT: customer_id, name, 그리고 각 고객의 주문 수(total_orders)를 선택합니다.

SELECT customers.customer_id, customers.name, COUNT(orders.order_id) AS total_orders

7. ORDER BY: total_orders를 기준으로 내림차순으로 정렬합니다.

ORDER BY total_orders DESC

8. LIMIT: 상위 10개의 행만 반환합니다.

LIMIT 10

 

 

💡 MySQL 쿼리 절의 순서를 이해하면 더 효율적인 쿼리를 작성할 수 있습니다.
각 절이 어떤 순서로 실행되는지, 그리고 그 절들이 어떻게 데이터를 필터링하고 그룹화하는지 이해하는 것이 중요합니다.
이번 글에서는 예제 쿼리를 통해 각 절의 역할과 실행 순서를 설명했습니다.
이를 참고하여 보다 효과적인 데이터 조회 쿼리를 작성해 보세요.