Понимание логического порядка обработки предложений SQL помогает писать более эффективные запросы и избежать частых ошибок, таких как обращение к алиасам слишком рано.
Движок базы данных обрабатывает предложения в такой последовательности:
FROM — определяет исходные таблицыON — применяет условия объединенияJOIN — объединяет таблицы на основе условия ONWHERE — фильтрует отдельные строки до группировкиGROUP BY — группирует строки по указанным столбцамHAVING — фильтрует группы после агрегацииSELECT — вычисляет выражения и выбирает выходные столбцыORDER BY — сортирует итоговый набор результатовLIMIT / OFFSET — ограничивает количество возвращаемых строкSELECT, нельзя использовать в WHERE или HAVING, потому что SELECT обрабатывается после этих предложенийWHERE vs HAVING — используй WHERE для фильтрации исходных строк, это лучше для производительности; используй HAVING только для фильтрации агрегированных результатовLIMIT выполняется в последнюю очередь, поэтому сортировка и группировка полностью завершаются до отсечения строкSELECT department, COUNT(*) AS total -- 7-й
FROM employees -- 1-й
WHERE salary > 50000 -- 4-й
GROUP BY department -- 5-й
HAVING COUNT(*) > 5 -- 6-й
ORDER BY total DESC -- 8-й
LIMIT 10; -- 9-й
Это порядок логический, а не обязательно физический порядок выполнения — оптимизатор запросов может переупорядочить операции внутри для повышения производительности. Однако понимание логического порядка гарантирует, что ты пишешь правильный, предсказуемый SQL.
Псевдонимы столбцов, созданные в предложении SELECT, можно использовать в предложении WHERE, потому что WHERE вычисляется после выбора столбцов.
Новый — ещё не проверен сообществом
Вы