Инструкция ORDER BY
Для сортировки данных в SQL используется инструкция ORDER BY команды SELECT.
SELECT список_полей FROM имя_таблицы ORDER BY поле1 [ASC | DESC] [, поле2 [ASC | DESC],];
- поле1, поле 2 итд. – это поля по которым требуется осуществить сортировку. В инструкции ORDER BY должно быть указано как минимум одно поле для сортировки.
- Параметр ASC показывает, что сортировка должна быть в прямом порядке. Этот параметр принят по умолчанию, поэтому если нужна прямая сортировка, то его можно вообще не указывать.
- Параметр DESC нужно указывать, если требуется сортировка в обратном порядке.
Путь имеется таблица booking, содержащая данные о заказах неких клиентов. Нужно упорядочить таблицу по фамилиям заказчиков. Оба следующих запроса решают эту задачу:
SELECT * FROM booking ORDER BY fio;
SELECT * FROM booking ORDER BY fio ASC;
Результат:
Если сортировку по фамилии нужно выполнить в обратном порядке, то потребуется следующий запрос:
SELECT * FROM booking ORDER BY fio DESC;
Результат:
Поле в сортировке может быть задано не только именем, но и порядковым номером, начиная с единицы.
Запросы
SELECT * FROM booking ORDER BY fio;
и
SELECT * FROM booking ORDER BY 1;
Возвращают один и тот же результат.
В приведенных примерах для записей, содержащих одну и ту же фамилию, сортировка по дате заказа устанавливалась в случайном порядке. Чтобы записи для одной фамилии упорядочивались по дате заказа, потребуется указывать два поля в сортривке. При чем, дата заказа должна быть на второй позиции. При сортировке по нескольким полям одни поля можно сортировать по возрастанию, другие – по убыванию.
Если требуется, чтобы даты заказов, относящиеся к одному заказчику, выстроились по возрастанию, то нужно выполнить следующий запрос:
SELECT * FROM booking ORDER BY fio, booking_date;
Результат:
Если даты заказа для одного заказчика должны выстроиться по убыванию, то запрос будет таким:
SELECT * FROM booking ORDER BY fio ASC,booking_date DESC;
Результат:
Представления кодировки
В командах CREATE DATABASE, CREATE TABLE присутствует инструкция CHARACTER SET. Она задает кодировку – таблицу соответствия символов и битовых кодов. При работе с базой данных важно знать, какая кодировка используется в данной таблице, чтобы сортировка и индексация проводились корректно. Но кроме кодировки порядок символов задается представлениями.
Представление кодировки (COLLATE) – набор правил для сравнения символов в массиве данных.
Одной кодировке соответствует несколько представлений. Например, у кодировки cp1251 есть представление cp1251_general_ci, которое упорядочивает без учета регистра, и представление cp1251_bin, которое упорядочивает с учетом регистра.
В качестве примера рассмотрим часто возникающую проблему с украинским алфавитом. В представлении кодировки utf8, которое называется utf8_bin, символы русского языка упорядочиваются верно, а вот для украинского языка вверху алфавита оказываются буквы I и Є и только после них следует буква А.
Конечно же это не правильно. Поэтому для упорядочивания по украинскому алфавиту нужно указывать представление кодировки:
SELECT список_полей FROM имя_таблицы ORDER BY поле1 [ASC | DESC] [, поле2 [ASC | DESC],] COLLATE имя_представления_кодировки;
В приведенном примере нужно выполнить запрос:
SELECT * FROM booking ORDER BY fio COLLATE utf8_unicode_ci;
Результат:
Для того чтобы получить список представлений по некоторой кодировке нужно выполнить запрос:
SHOW COLLATION LIKE 'шаблон';
Шаблоном в данном случае, как правило, является название кодировки с символом % после него.
Например, чтобы узнать все представления для кодировки utf8 нужно выполнить запрос:
SHOW COLLATION LIKE 'utf8%';