Руководство по SQL. Сортировка данных.
Для сортировки данных, получаемых в результате запроса в языке SQL используется ключевое слово ORDER BY. База данных (далее – БД) сортирует данные по указанному параметру по убыванию, либо по возрастанию, в зависимости от условия указанного в запросе (ASC / DESC – соответственно).
Мы также можем использовать более одной колонки при использовании элемента ORDER BY.
Данный запрос имеет следующий общий вид:
SELECT колонка1, колонка2 . колонкаN FROM имя_таблицы [WHERE условие] [ORDER BY колонка1, колонка2 . колонкаN] [ASC | DESC];
Предположим, что у нас есть таблица developers, которая содержит следующие данные:
+----+-------------------+------------+------------+--------+ | ID | NAME | SPECIALTY | EXPERIENCE | SALARY | +----+-------------------+------------+------------+--------+ | 1 | Eugene Suleimanov | Java | 2 | 2500 | | 2 | Peter Romanenko | Java | 3 | 3500 | | 3 | Andrei Komarov | JavaScript | 3 | 2500 | | 4 | Konstantin Geiko | C# | 2 | 2000 | | 5 | Asya Suleimanova | UI/UX | 2 | 1800 | +----+-------------------+------------+------------+--------+
Допустим, что нам необходимо упорядочить разработчиков по зарплате по возрастанию.
Для этого мы должны использовать следующую команду:
mysql> SELECT * FROM developers ORDER BY SALARY ASC;
После выполнения данного запроса, мы получим следующий результат:
+----+-------------------+------------+------------+--------+ | ID | NAME | SPECIALTY | EXPERIENCE | SALARY | +----+-------------------+------------+------------+--------+ | 5 | Asya Suleimanova | UI/UX | 2 | 1800 | | 4 | Konstantin Geiko | C# | 2 | 2000 | | 1 | Eugene Suleimanov | Java | 2 | 2500 | | 3 | Andrei Komarov | JavaScript | 3 | 2500 | | 2 | Peter Romanenko | Java | 3 | 3500 | +----+-------------------+------------+------------+--------+
Или же мы хотим упорядочить разработчиков по имени по возрастанию.
Для этого нам необходимо выполнить следующий запрос:
mysql> SELECT * FROM developers ORDER BY NAME ASC;
Полученные результат будет иметь следующий вид:
+----+-------------------+------------+------------+--------+ | ID | NAME | SPECIALTY | EXPERIENCE | SALARY | +----+-------------------+------------+------------+--------+ | 3 | Andrei Komarov | JavaScript | 3 | 2500 | | 5 | Asya Suleimanova | UI/UX | 2 | 1800 | | 1 | Eugene Suleimanov | Java | 2 | 2500 | | 4 | Konstantin Geiko | C# | 2 | 2000 | | 2 | Peter Romanenko | Java | 3 | 3500 | +----+-------------------+------------+------------+--------+
Мы также можем задать свой собственный прядок сортировки.
Для этого нам необходимо составить следующий запрос:
mysql> SELECT * FROM developers ORDER BY (CASE SPECIALTY WHEN 'C#' THEN 1 WHEN 'Java' THEN 2 WHEN 'UI/UX' THEN 3 ELSE 10 END) ASC;
После выполнения данного запроса мы получим следующий результат:
+----+-------------------+------------+------------+--------+ | ID | NAME | SPECIALTY | EXPERIENCE | SALARY | +----+-------------------+------------+------------+--------+ | 4 | Konstantin Geiko | C# | 2 | 2000 | | 1 | Eugene Suleimanov | Java | 2 | 2500 | | 2 | Peter Romanenko | Java | 3 | 3500 | | 5 | Asya Suleimanova | UI/UX | 2 | 1800 | | 3 | Andrei Komarov | JavaScript | 3 | 2500 | +----+-------------------+------------+------------+--------+
На этом мы заканчиваем изучение способов сортировки данных, полученных в результате обработки SQL запроса.
В следующей статье мы рассмотрим группировку данных.
SQL-Урок 3. Сортировка данных (ORDER BY)
В будущем нам может понадобиться рассортировать нашу выборку – в алфавитном порядке для текста или по возрастанию/убыванию – для цифровых значений. Для таких целей в SQL имеется специальный оператор ORDER BY.
SQL оператр ORDER BY может производить сортировку как от меньшего к большему, то есть по возрастанию, так и в обратном порядке — от большего к меньшему.
1. Сортировка выбранных данных
Давайте всю нашу таблицу рассортируем по сумме реализации продукции, а именно по столбцу Amount.
Run SQLSELECT * FROM Sumproduct ORDER BY Amount
Try it Yourself
Видим, что запрос рассортировал записи по росту в поле Amount. Обязательно нужно соблюдать последовательность расположения операторов, то есть оператор ORDER BY должен идти в самом конце запроса. В противном случае будет получено сообщение об ошибке.
Также, особенностью оператора ORDER BY является то, что он может сортировать данные по полю, которого мы не выбирали в запросе, то есть достаточно, чтобы оно вообще было в БД.
2. Сортировка по нескольким полям
Теперь посортируем наш пример дополнительно по еще одному полю. Пусть это будет поле City, отображающее место реализации продукции.
Run SQLSELECT * FROM Sumproduct ORDER BY Amount, City
Try it Yourself

Очередность сортировки будет зависеть от порядка расположения полей в запросе. То есть, в нашем случае сначала данные будут рассортированы по колонке Amount, а затем по City.
3. Направление сортировки
Несмотря на то, что по умолчанию оператор ORDER BY сортирует по возрастанию, мы можем также прописать сортировку значений по убыванию. Для этого в конце каждого поля проставляем оператор DESC (являющийся сокращением от слова DESCENDING).
Run SQLSELECT * FROM Sumproduct ORDER BY Amount DESC, City
Try it Yourself

В данном примере, значения в поле Amount были рассортированы по убыванию, а в поле City – по возрастанию. Оператор DESC применяется только для одного столбца, поэтому при необходимости его нужно прописывать после каждого поля, принимающего участие в сортировке.
- Изменение регистра букв в тексте
- Сумма прописью на украинском языке
- Поиск латиницы в кириллице и наоборот
- Транслитерация с украинского на английский
MySQL запрос сортировки по алфавиту сперва буквы, а потом цифры
Как видите по умолчанию база данных возвращает данные которые начинаются с числа, а мне нужно что бы сперва были данные начинающиеся с букв. Помогите или подскажите как до ума довести данный запрос.
"2001: A Space Odyssey" "2001: A Space Odyssey" "2001: A Space Odyssey" "2001: A Space Odyssey" "Breaking Bad" "Butch Cassidy and the Sundance Kid" "Butch Cassidy and the Sundance Kid" "Butch Cassidy and the Sundance Kid" "Butch Cassidy and the Sundance Kid" "Casablanca" "Casablanca" "Casablanca" "Casablanca" "Charade" "Charade" "Charade" "Charade" "Cool Hand Luke" "Cool Hand Luke" "Cool Hand Luke" "Cool Hand Luke" "dfg" "dfgdg" "dfsgreg" "Get Shorty " "Get Shorty " "Get Shorty " "Get Shorty "
Еще рассматриваю вариант отсортировать этот массив данных средствами php, но хочется узнать можно ли решить данную задачу исключительно используя SQL.
Урок 4. Сортировка результатов
В SQL часто кроме фильтрации данных, также часто требуется отсортировать их по одному из столцов.
В первом уроке мы написали SQL-запрос для получения данных о совершенолетних пользователях. Посмотрим на него еще раз:
SELECT last_name, first_name, birthday FROM users WHERE age >= 18
| id | last_name | first_name | birthday |
|---|---|---|---|
| 1 | Иванов | Дмитрий | 1996-12-11 |
| 3 | Шевченко | Тимур | 1998-04-27 |
| 4 | Иванова | Светлана | 1993-08-06 |
| 6 | Иванов | Алексей | 1993-08-05 |
| 7 | Процук | Алена | 1997-02-28 |
Обратите внимание, что сейчас данные никак не упорядочены. Ни по фамилии, ни по имени, ни по дате рождения. Но давайте добавим после конструции WHERE: ORDER BY last_name:.
SELECT last_name, first_name, birthday FROM users WHERE age >= 18 ORDER BY last_name
После выполнение данного SQL запроса мы получим таблицу отсортированную по столбцу last_name (фамилия). Так как last_name хранит строки, то сортировка происходит в алфавитном порядке:
| id | last_name | first_name | birthday |
|---|---|---|---|
| 1 | Иванов | Дмитрий | 1996-12-11 |
| 6 | Иванов | Алексей | 1993-08-05 |
| 4 | Иванова | Светлана | 1993-08-06 |
| 7 | Процук | Алена | 1997-02-28 |
| 3 | Шевченко | Тимур | 1998-04-27 |
Обратите внимание, что данные отсортированы только по фамилии, но не по другим полям. Однако давайте добавим через запятую еще один столбец, например, first_name:
SELECT last_name, first_name, birthday FROM users WHERE age >= 18 ORDER BY last_name, first_name
Теперь таблица отсортирована сразу по двум поля, сперва по фамилии, а уже затем по имени:
| id | last_name | first_name | birthday |
|---|---|---|---|
| 6 | Иванов | Алексей | 1993-08-05 |
| 1 | Иванов | Дмитрий | 1996-12-11 |
| 4 | Иванова | Светлана | 1993-08-06 |
| 7 | Процук | Алена | 1997-02-28 |
| 3 | Шевченко | Тимур | 1998-04-27 |
Разумеется, сортировать можно не только по текстовым полям. Например, можно написать ORDER BY birthday:
SELECT last_name, first_name, birthday FROM users WHERE age >= 18 ORDER BY birthday
И получить данные упорядоченные по дате рождения в хронологическом порядке:
| id | last_name | first_name | birthday |
|---|---|---|---|
| 6 | Иванов | Алексей | 1993-08-05 |
| 4 | Иванова | Светлана | 1993-08-06 |
| 1 | Иванов | Дмитрий | 1996-12-11 |
| 7 | Процук | Алена | 1997-02-28 |
| 3 | Шевченко | Тимур | 1998-04-27 |
А если в конструкции ORDER BY после имени столца написать DESC, то данные будут отсортированы в обратном порядке — свежие даты выше:
| id | last_name | first_name | birthday |
|---|---|---|---|
| 3 | Шевченко | Тимур | 1998-04-27 |
| 7 | Процук | Алена | 1997-02-28 |
| 1 | Иванов | Дмитрий | 1996-12-11 |
| 4 | Иванова | Светлана | 1993-08-06 |
| 6 | Иванов | Алексей | 1993-08-05 |
Более того при сортировке данных по нескольким столцам, мы можем для разных столцов указывать разные направления сортировки. Например ORDER BY last_name, birthday DESC:
SELECT last_name, first_name, birthday FROM users WHERE age >= 18 ORDER BY last_name, birthday DESC
Тогда данные будут сперва отсортированы в алфавитном порядке по фамилии, а уже внутри каждой фамилии по дате рождения в обратном порядке:
| id | last_name | first_name | birthday |
|---|---|---|---|
| 6 | Иванов | Алексей | 1993-08-05 |
| 1 | Иванов | Дмитрий | 1996-12-11 |
| 4 | Иванова | Светлана | 1993-08-06 |
| 7 | Процук | Алена | 1997-02-28 |
| 3 | Шевченко | Тимур | 1998-04-27 |
Следующий урок
Урок 5. Ограничение и смещение
В этом уроке вы научитесь ограничивать итоговые результаты с помощью конструкции LIMIT и делать смещение с помощью OFFSET
Полный курс с практикой
- 57 уроков
- 261 задание
- Сертификат
- Поддержка преподавателя
- Доступ к курсу навсегда
- Можно в рассрочку
