SQL для начинающих

Урок 4. Сортировка результатов

В SQL часто кроме фильтрации данных, также часто требуется отсортировать их по одному из столцов.

В первом уроке мы написали SQL-запрос для получения данных о совершенолетних пользователях. Посмотрим на него еще раз:

SELECT last_name, first_name, birthday FROM users WHERE age >= 18
Совершеннолетние пользователи
idlast_namefirst_namebirthday
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 хранит строки, то сортировка происходит в алфавитном порядке:

Сортировка по фамилии
idlast_namefirst_namebirthday
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

Теперь таблица отсортирована сразу по двум поля, сперва по фамилии, а уже затем по имени:

Сортировка по фамилии и имени
idlast_namefirst_namebirthday
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

И получить данные упорядоченные по дате рождения в хронологическом порядке:

Сортировка по дате рождения
idlast_namefirst_namebirthday
6ИвановАлексей1993-08-05
4ИвановаСветлана1993-08-06
1ИвановДмитрий1996-12-11
7ПроцукАлена1997-02-28
3ШевченкоТимур1998-04-27

А если в конструкции ORDER BY после имени столца написать DESC, то данные будут отсортированы в обратном порядке — свежие даты выше:

Сортировка по дате рождения в обратном порядке
idlast_namefirst_namebirthday
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

Тогда данные будут сперва отсортированы в алфавитном порядке по фамилии, а уже внутри каждой фамилии по дате рождения в обратном порядке:

Сортировка по дате рождения в обратном порядке
idlast_namefirst_namebirthday
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 задание
  • Сертификат
  • Поддержка преподавателя
  • Доступ к курсу навсегда
5400 ₽
  • Можно в рассрочку

Регистрация

или
Письмо со ссылкой для доступа отправлено.
Проверьте почту.

Письмо не пришло? Посмотрите в спаме.
Регистрируясь, вы соглашаетесь с условиями предоставления услуг (пользовательское соглашение).