SQL (3/14)
💻Логика построения запросов и оптимальный порядок операций: как SQL обрабатывает запросы (3/14)
Когда мы пишем SQL-запрос, мы видим его в определённом порядке. Начинаем с SELECT, затем FROM, WHERE и так далее. Но на самом деле база данных обрабатывает запрос не так, как он написан, а в логическом порядке, который важен для понимания, отладки и оптимизации.
Типичный SQL-запрос состоит из обязательных операторов SELECT и FROM, а также опциональных, таких как WHERE, GROUP BY, HAVING и ORDER BY. Все они относятся к категории Data Query Language (DQL). Важно знать, что порядок выполнения начинается с FROM и заканчивается LIMIT или SELECT, что противоположно порядку записи.
Рассмотрим простой пример с таблицей сотрудников employees из IT-отдела: у нас есть пять человек, разбитых на три группы, с указанием зарплаты.
| id | name | group_id | salary | |----|--------|----------|---------| | 1 | Alice | 101 | 170000 | | 2 | Boris | 102 | 150000 | | 3 | Mike | 101 | 180000 | | 4 | Dana | 103 | 160000 | | 5 | Elena | 101 | 190000 | Задача: найти общую сумму зарплат по каждой группе, включить только те, где сумма превышает 250 000, и отсортировать результат по сумме по убыванию.
Запрос будет таким: SELECT group_id, SUM(salary) AS total_salary FROM employees GROUP BY group_id HAVING SUM(salary) > 250000 ORDER BY total_salary DESC;
Пошагово SQL обработает запрос так:
1. FROM: Определяет таблицу employees как источник данных; все строки таблицы берутся для дальнейшей обработки (если нет WHERE). 2. WHERE: В запросе фильтрации строк нет, поэтому берутся все. Если бы было условие, например, WHERE salary > 100000, отсеивались бы строки ниже этого порога. 3. GROUP BY: Строки группируются по столбцу group_id. В итоге получаем группы: - 101: [170000, 180000, 190000] - 102: [150000] - 103: [160000] 4. HAVING: Фильтрует группы по сумме зарплат, оставляя только те, у которых сумма больше 250000. В нашем случае это только группа 101 со суммой 540000. 5. SELECT: Выбирает столбцы group_id и вычисляет сумму зарплаты (total_salary) уже по отфильтрованным данным. 6. ORDER BY: Сортирует результат по total_salary в порядке убывания. В данном случае только одна группа, поэтому сортировка очевидна.
Пример
Рассмотрим таблицу products с колонками:
🎯product_id 🎯category 🎯price
| id | product | category | price | |----|---------|-------------|---------| | 1 | Laptop | Electronics | 100000 | | 2 | Phone | Electronics | 7000 | | 3 | Chair | Furniture | 1500 | | 4 | Desk | Furniture | 3000 | Ваша задача:
1. Посчитать общую стоимость товаров для каждой категории. 2. Исключить категории с суммой менее 5000. 3. Отсортировать по сумме стоимости товаров в порядке возрастания.
Запрос будет таким:
SELECT category, SUM(price) AS total_price FROM products GROUP BY category HAVING SUM(price) >= 5000 ORDER BY total_price ASC;
Понимание логики выполнения SQL-запросов - это мощный инструмент для отладки и написания эффективного кода. Следите за порядком операций, чтобы запросы работали быстро и корректно.
Так же у нас есть ламповый чатик, где собралась уже 1 тысяча аналитиков! 🎉
Запомните, даже самый спокойный медведь умеет рычать, когда надо. Берегите голову, берегите данные — и пусть в вашем дне будет немного тишины, ясности и добрых переменных.
· 26.08.2025
Спасибо, что делитесь опытом! А где ваш чатик, как в него попасть?
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 26.08.2025
https://t.me/chichisquare Вот чатик)
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён