Какова связь между операторами SELECT и ORDER BY в SQL?

«Какова связь между операторами SELECT и ORDER BY в SQL?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SELECT и ORDER BY — это два последовательных и логически зависимых предложения в SQL-запросе. SELECT определяет какие данные выбрать, а ORDER BY определяет порядок возврата этих уже выбранных данных.

Порядок выполнения (логический):

  1. FROM / JOIN (определение источника данных)
  2. WHERE (фильтрация строк)
  3. GROUP BY (агрегация)
  4. HAVING (фильтрация групп)
  5. SELECT (выбор и вычисление столбцов)
  6. ORDER BY (сортировка финального результата)
  7. LIMIT / OFFSET (ограничение вывода)

Синтаксис и примеры:

-- Сортировка по имени столбца
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE department_id = 50
ORDER BY salary DESC, last_name ASC; -- Сначала по убыванию зарплаты, затем по фамилии

-- Сортировка по порядковому номеру столбца в SELECT (начиная с 1)
SELECT first_name, last_name, salary
FROM employees
ORDER BY 3 DESC; -- Сортировка по 3-му столбцу (salary)

-- Сортировка по результату выражения
SELECT product_name, (price * stock_quantity) as total_value
FROM products
ORDER BY total_value DESC; -- Можно использовать алиас из SELECT

-- Сортировка с учетом NULL значений
SELECT name, commission_pct
FROM employees
ORDER BY commission_pct NULLS LAST; -- NULL значения в конце

Практические аспекты и производительность:

  • Индексы: Для ускорения сортировки больших наборов данных можно создавать индексы по часто используемым для ORDER BY столбцам.
  • Производительность: Сортировка (ORDER BY) — ресурсоёмкая операция, особенно для больших таблиц без подходящих индексов.
  • Детерминированность: Чтобы гарантировать одинаковый порядок строк при совпадении значений в ключах сортировки, добавляйте в ORDER BY уникальный столбец (например, первичный ключ).