Урок 2.5: Сортировка результатов
По умолчанию строки в таблице базы данных или в наборе результатов запроса не обязательно следуют в каком-либо определенном порядке. Чтобы расположить выходные строки в осмысленной последовательности, мы используем оператор ORDER BY.
Оператор ORDER BY
Оператор ORDER BY добавляется в конец инструкции SELECT для сортировки результирующего набора на основе одного или нескольких столбцов.
Синтаксис
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;
column1, column2, ...: Столбцы, по которым вы хотите выполнить сортировку.ASC: Сортирует данные по возрастанию (от меньшего к большему, от А до Я). Это значение по умолчанию.DESC: Сортирует данные по убыванию (от большего к меньшему, от Я до А).
Сортировка по одному столбцу
Чтобы выполнить сортировку по одному столбцу, просто укажите его имя после ключевого слова ORDER BY.
Пример: Сортировка актеров по фамилии
Этот запрос извлекает всех актеров и сортирует их в алфавитном порядке по фамилии.
SELECT first_name, last_name
FROM actor
ORDER BY last_name;
Если вы хотите отсортировать их в обратном алфавитном порядке:
SELECT first_name, last_name
FROM actor
ORDER BY last_name DESC;
Сортировка по нескольким столбцам
Вы можете сортировать результаты по нескольким столбцам, перечислив их через запятую. База данных сначала выполняет сортировку по первому столбцу, а если в этом столбце есть одинаковые значения, она сортирует эти дубликаты по второму столбцу и так далее.
Пример: Сортировка по фамилии, затем по имени
Это полезно, когда несколько актеров имеют одинаковую фамилию.
SELECT first_name, last_name
FROM actor
ORDER BY last_name, first_name; -- Сначала по last_name, затем по first_name при совпадениях
Сортировка по выражениям
Сортировать можно не только по исходным столбцам, но и по выражениям. SQL сначала вычисляет выражение для каждой строки (например, числовой, текстовый или булев результат), а затем ORDER BY сортирует строки по этим вычисленным значениям как по ключу сортировки.
Пример 1: Сортировка по числовому выражению
Отсортировать фильмы по длительности аренды в неделях (rental_duration / 7):
SELECT title, rental_duration
FROM film
ORDER BY rental_duration / 7 DESC;
Пример 2: Сортировка по текстовому выражению
Отсортировать актеров по полному имени без учета регистра:
SELECT first_name, last_name
FROM actor
ORDER BY LOWER(first_name || ' ' || last_name);
Пример 3: Сортировка по булевому выражению
Показать сначала фильмы с рейтингом 'G':
SELECT title, rating
FROM film
ORDER BY (rating = 'G') DESC, title;
Сортировка по булевым выражениям может отличаться в разных диалектах SQL. Для полностью переносимого поведения используйте CASE:
SELECT title, rating
FROM film
ORDER BY CASE WHEN rating = 'G' THEN 0 ELSE 1 END, title;
Сортировка по псевдонимам столбцов или позициям
В большинстве диалектов SQL вы также можете выполнять сортировку по псевдониму столбца или его порядковому номеру в списке SELECT.
Пример: Сортировка по псевдониму
SELECT first_name || ' ' || last_name AS full_name
FROM actor
ORDER BY full_name;
Пример: Сортировка по позиции
-- Сортировка по второму столбцу (last_name)
SELECT first_name, last_name
FROM actor
ORDER BY 2;
Ключевые выводы этого урока:
- Используйте
ORDER BYдля сортировки строк в результирующем наборе. ASC(по умолчанию) сортирует по возрастанию;DESCсортирует по убыванию.- Вы можете выполнять сортировку по нескольким столбцам для более точного упорядочивания.
- Вы можете сортировать по выражениям, возвращающим числовые, текстовые или булевы результаты.
- Сортировку также можно выполнять с использованием псевдонимов столбцов или их числовых позиций.
В следующем уроке мы изучим агрегатные функции, которые позволяют нам выполнять вычисления над наборами данных.