데이터베이스에서 데이터를 조회할 때, SQL 쿼리의 여러 절들이 결합되어 원하는 결과를 얻을 수 있습니다.
MySQL 쿼리 절의 실행 순서를 이해하면 더 효율적이고 정확한 쿼리를 작성할 수 있습니다🤗
MySQL 쿼리 절 순서
MySQL 쿼리는 다음 순서로 실행됩니다.
- FROM
데이터를 가져올 테이블을 지정합니다. - JOIN
여러 테이블을 결합합니다. - WHERE
특정 조건을 만족하는 행만 선택합니다. - GROUP BY
선택된 행을 그룹화합니다. - HAVING
그룹화된 데이터에 대한 조건을 지정합니다. - SELECT
데이터를 선택합니다. - ORDER BY
결과를 정렬합니다. - 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 쿼리 절의 순서를 이해하면 더 효율적인 쿼리를 작성할 수 있습니다.
각 절이 어떤 순서로 실행되는지, 그리고 그 절들이 어떻게 데이터를 필터링하고 그룹화하는지 이해하는 것이 중요합니다.
이번 글에서는 예제 쿼리를 통해 각 절의 역할과 실행 순서를 설명했습니다.
이를 참고하여 보다 효과적인 데이터 조회 쿼리를 작성해 보세요.
'DataBase > MySQL' 카테고리의 다른 글
[MySQL] 트리거(Trigger) 활용하기 (2) | 2024.10.09 |
---|---|
[MySQL] 인덱스 동작 원리 및 최적화 (0) | 2024.08.04 |
[MySQL] binlog(바이너리 로그)란? (0) | 2024.07.16 |
[MySQL] 문자열 결합하기: CONCAT, GROUP_CONCAT (0) | 2024.07.08 |
[MySQL] UPSERT(UPDATE + INSERT) (0) | 2024.06.28 |