Урок 4. Сортировка в SQL (ORDER BY)
В 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
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.
Посмотреть
Тарифы
55 видео-уроков
Более 7 часов видео
Дополнительные материалы
Схемы, методички, исходные коды
Возможность скачать видео
Смотреть уроки можно даже без интернета
Доступ к курсу навсегда
Можете освежить знания через год или два
271 практическое задание
Практические занятия на тренажере
Поддержка преподавателя
Помощь в решении заданий в течение 24 часов
Сертификат о прохождении курса
Подтверждение ваших навыков
Эталонные решения
Решения преподавателя
55 видео-уроков
Более 7 часов видео
Дополнительные материалы
Схемы, методички, исходные коды
Возможность скачать видео
Смотреть уроки можно даже без интернета
Доступ к курсу навсегда
Условия бесплатного тарифа могут измениться
271 практическое задание
Практические занятия на тренажере
Поддержка преподавателя
Помощь в решении заданий в течение 24 часов
Сертификат о прохождении курса
Подтверждение ваших навыков
Эталонные решения
Решения преподавателя
Без воды
Поддержка
Регистрация
Письмо со ссылкой для доступа отправлено.
Проверьте почту.
Письмо не пришло? Посмотрите в спаме.
Регистрируясь, вы соглашаетесь с условиями предоставления услуг (пользовательское соглашение).
SQL ORDER BY ASC
В этом разделе мы описали ORDER BY ASC с подробным примером.
Оператор ORDER BY ASC используется для сортировки данных из таблицы в наборе результатов в порядке возрастания.
ORDER BY ASC используется в операторе SELECT.
Синтаксис —
SELECT столбец1, столбец2, …, столбецN ОТ имя_таблицы [ ГДЕ состояние ] ORDER BY имя_столбца ASC;
- столбец1, столбец2, …, столбецN — указывает имена столбцов из таблицы.
- имя_таблицы — указывает имя таблицы.
- имя_столбца — Указывает столбец, используемый для выполнения операции ORDER BY ASC.
Пример —
Давайте рассмотрим приведенную ниже таблицу (таблицы) в качестве примера таблицы (таблиц) для создания SQL-запроса для получения желаемых результатов.
employee_details —
emp_id | emp_name | обозначение | manager_id | date_of_hire | зарплата | dept_id |
---|---|---|---|---|---|---|
001 | Сотрудник1 | Директор | 11.07.2019 | 45000,00 | 1000 | |
002 | Сотрудник2 | Директор | 11.07.2019 | 40000,00 | 2000 | |
003 | Сотрудник3 | Менеджер | Сотрудник1 | 11.07.2019 | 27000,00 | 1000 |
004 | Сотрудник4 | Менеджер | Сотрудник2 | 2019-10-08 | 25000,00 | 2000 |
005 | Сотрудник5 | Аналитик | Сотрудник3 | 11.07.2019 | 20000,00 | 1000 |
006 | Сотрудник6 | Аналитик | Сотрудник3 | 2019-10-08 | 18000. 00 | 1000 |
007 | Сотрудник7 | Клерк | Сотрудник3 | 11.07.2019 | 15000,00 | 1000 |
008 | Сотрудник8 | Продавец | Сотрудник4 | 09.09.2019 | 14000.00 | 2000 |
009 | Сотрудник9 | Продавец | Сотрудник4 | 2019-10-08 | 13000.00 | 2000 |
Сценарий — выборка строк в порядке возрастания с использованием столбца.
Требование — Получить emp_name, сведения о назначении всех сотрудников из таблицы сотрудников в порядке возрастания назначения. Запрос был такой —
ВЫБРАТЬ emp_name, обозначение ИЗ employee_details ЗАКАЗАТЬ ПО обозначению ASC;
Выполнив вышеуказанный запрос, мы можем получить результаты, как показано ниже —
emp_name | обозначение |
---|---|
Сотрудник5 | Аналитик |
Сотрудник6 | Аналитик |
Сотрудник7 | Клерк |
Сотрудник1 | Директор |
Сотрудник2 | Директор |
Сотрудник3 | Менеджер |
Сотрудник4 | Менеджер |
Сотрудник8 | Продавец |
Сотрудник9 | Продавец |
Сценарий — выборка строк в порядке возрастания с использованием нескольких столбцов.
Требование — Получить emp_name, назначение, dept_id сведения обо всех сотрудниках из таблицы сотрудников в порядке возрастания назначения и dept_id. Запрос был следующим —
ВЫБЕРИТЕ emp_name, назначение, dept_id FROM employee_details ORDER BY обозначение, dept_id ASC;
Выполнив вышеуказанный запрос, мы можем получить результаты, как показано ниже —
emp_name | обозначение | dept_id |
---|---|---|
Сотрудник5 | Аналитик | 1000 |
Сотрудник6 | Аналитик | 1000 |
Сотрудник7 | Клерк | 1000 |
Сотрудник1 | Директор | 1000 |
Сотрудник2 | Директор | 2000 |
Сотрудник3 | Менеджер | 1000 |
Сотрудник4 | Менеджер | 2000 |
Сотрудник8 | Продавец | 2000 |
Сотрудник9 | Продавец | 2000 |
Сценарий — выборка строк в порядке возрастания одного столбца и в порядке убывания другого столбца.
Требование — Получить emp_name, назначение, оклад, dept_id сведения обо всех сотрудниках из таблицы employee_details в порядке возрастания назначения и убывания зарплаты. Запрос был такой —
ВЫБЕРИТЕ emp_name, должность, оклад, dept_id ИЗ employee_details ПОРЯДОК ПО обозначению ASC, окладу DESC;
Выполнив вышеуказанный запрос, мы можем получить результаты, как показано ниже —
emp_name | обозначение | зарплата | dept_id |
---|---|---|---|
Сотрудник5 | Аналитик | 20000.00 | 1000 |
Сотрудник6 | Аналитик | 18000.00 | 1000 |
Сотрудник7 | Клерк | 15000,00 | 1000 |
Сотрудник1 | Директор | 45000,00 | 1000 |
Сотрудник2 | Директор | 40000,00 | 2000 |
Сотрудник3 | Менеджер | 27000,00 | 1000 |
Сотрудник4 | Менеджер | 25000,00 | 2000 |
Сотрудник8 | Продавец | 14000. 00 | 2000 |
Сотрудник9 | Продавец | 13000.00 | 2000 |
Сценарий — Выборка строк в порядке возрастания столбца по относительному положению.
Требование — Получить данные emp_name, зарплаты, manager_id обо всех сотрудниках из таблицы employee_details в порядке возрастания относительного положения столбца зарплаты в наборе результатов. Запрос был следующим:
ВЫБЕРИТЕ emp_name, зарплату, manager_id ИЗ employee_details ЗАКАЗ ПО 2 ASC;
Выполнив вышеуказанный запрос, мы можем получить результаты, как показано ниже —
emp_name | зарплата | manager_id |
---|---|---|
Сотрудник9 | 13000.00 | Сотрудник4 |
Сотрудник8 | 14000.00 | Сотрудник4 |
Сотрудник7 | 15000,00 | Сотрудник3 |
Сотрудник6 | 18000. 00 | Сотрудник3 |
Сотрудник5 | 20000,00 | Сотрудник3 |
Сотрудник4 | 25000,00 | Сотрудник2 |
Сотрудник3 | 27000,00 | Сотрудник1 |
Сотрудник2 | 40000,00 | |
Сотрудник1 | 45000,00 |
Предложение ORDER BY в SQL
Обзор
Предложение ORDER BY помогает нам сортировать записи столбца в таблице с помощью ключевых слов ASC и DESC в порядке возрастания и убывания соответственно. Мы можем отсортировать один столбец , несколько столбцов , сортировка без использования ключевого слова ASC/DESC , сортировка с использованием обоих ключевых слов ASC/DESC и в соответствии с относительной позицией столбца .
Scope
- В этой статье объясняется, что такое предложение ORDER BY в SQL?
- Он показывает нам, как использовать его несколькими способами для сортировки записей на основе имен столбцов и позиций в зависимости от используемого ключевого слова.
- Это также объясняет работу ключевых слов ASC и DESC.
Введение в предложение ORDER BY в SQL
Предложение ORDER BY в SQL сортирует записи столбца таблицы в базе данных SQL. Это помогает нам отсортировать столбец в как по возрастанию, так и по убыванию . Ключевое слово ASC помогает нам сортировать по возрастанию, а DESC — по убыванию. Если ключевое слово, по которому мы должны сортировать записи в столбце, не указано, оно примет значение по умолчанию . `По умолчанию записи сортируются в порядке возрастания.
Предложение ORDER BY может использоваться только для операторов SELECT.
Синтаксис
Мы используем ключевые слова ASC и DESC для сортировки столбца в порядке возрастания и убывания соответственно.
СИНТАКСИС:
ВЫБРАТЬ список столбцов ИЗ имя_таблицы ГДЕ условия ORDER BY имя_столбца ASC|DESC
Несколько столбцов сортируются одновременно путем разделения их имен оператором запятая (,). Имена двух столбцов должны быть уникальными. Записи сначала сортируются по первому столбцу, а затем отсортированный список по второму столбцу, если две строки ранее имели какое-то значение.
СИНТАКСИС:
ВЫБРАТЬ список-столбцов ИЗ имя_таблицы ГДЕ условия ORDER BY столбец1 ASC|DESC , столбец2 ASC|DESC
Ключевое слово ASC используется для сортировки записей в порядке возрастания. СИНТАКСИС:
ВЫБЕРИТЕ список столбцов ИЗ имя_таблицы ГДЕ условия ORDER BY имя_столбца ASC
Ключевое слово DESC используется для сортировки записей в порядке убывания. СИНТАКСИС:
ВЫБЕРИТЕ список столбцов ИЗ имя_таблицы ГДЕ условия ORDER BY имя_столбца DESC
Если ключевое слово ASC или DESC не указано, предложение ORDER BY сортирует записи в порядке возрастания.
ВЫБЕРИТЕ список столбцов ИЗ имя_таблицы ГДЕ условия ORDER BY имя_столбца
Примеры
Рассмотрим таблицу Сотрудники со следующими записями:
ID | ИМЯ | ВОЗРАСТ | АДРЕС | ЗАРПЛАТА |
---|---|---|---|---|
1 | 0056 Amish | 32 | Ahmedabad | 2000. 00 |
2 | Nisha | 25 | Delhi | 1500.00 |
3 | Suman | 23 | Kota | 2000.00 |
4 | Yashwant | 25 | Mumbai | 6500.00 |
5 | Durgesh | 27 | Bhopal | 8500.00 |
6 | Esha | 22 | MP | 4500.00 |
7 | Khansha | 24 | Indore | 10000.00 |
8 | Amisha | 28 | Kolkata | 1000.00 |
9 | Сарфараз | 24 | Патна | 6000.00 |
Сотрудники SELECT FSCORNAME *
Этот SQL-запрос отсортирует все записи по именам в порядке возрастания.
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Amish | 32 | Ahmedabad | 2000. 00 |
8 | Amisha | 28 | Калькутта | 1000.00 |
5 | Дургеш | 27 | Bhopal | 8500.00 |
6 | Esha | 22 | MP | 4500.00 |
7 | Khansha | 24 | Indore | 10000.00 |
2 | Nisha | 25 | Delhi | 1500.00 |
9 | Sarfaraz | 24 | Patna | 6000.00 |
3 | Suman | 23 | Kota | 2000.00 |
4 | Yashwant | 25 | Mumbai | 6500.00 |
SELECT * FROM Employees ORDER BY NAME ASC, ID DESC;
Этот SQL-запрос собирает все данные о сотрудниках и сортирует их сначала по ИМЕНИ в порядке возрастания, а затем по их идентификатору в порядке убывания.
ID | ИМЯ | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Amish | 32 | Ahmedabad | 2000.00 |
8 | Amisha | 28 | Kolkata | 1000.00 |
5 | Durgesh | 27 | Bhopal | 8500.00 |
6 | Esha | 22 | MP | 4500.00 |
7 | Khansha | 24 | Indore | 10000.00 |
2 | Nisha | 25 | Delhi | 1500.00 |
9 | Sarfaraz | 24 | Patna | 6000.00 |
3 | Suman | 23 | Kota | 2000.00 |
4 | Yashwant | 25 | Mumbai | 6500. 00 |
Примечание. Вы можете получить тот же результат, пропустив ключевое слово ASC в SQL-запросе, поскольку оно является значением по умолчанию в предложении ORDER By.
ВЫБЕРИТЕ * ИЗ Сотрудники ЗАКАЗАТЬ ПО ИМЯ, ID DESC;
ID | NAME | AGE | ADDRESS | SALARY | ||||
---|---|---|---|---|---|---|---|---|
1 | Amish | 32 | Ahmedabad | 2000.00 | ||||
8 | Amisha | 28 | Kolkata | 1000.00 | ||||
5 | Durgesh | 27 | Bhopal | 8500.00 | ||||
6 | Esha | 22 | MP | 4500.00 | ||||
7 | Khansha | 24 | Индор | 10000,00 | ||||
2 | 25 | 7 | 25 | 677777777777777777777777777777777777777777777777777777777777777777777777 | 0056 1500. 00 | |||
9 | Sarfaraz | 24 | Patna | 6000.00 | ||||
3 | Suman | 23 | Kota | 2000.00 | ||||
4 | Yashwant | 25 | Mumbai | 6500.00 |
Если ключевые слова не указаны, записи сортируются в порядке возрастания, принимая значение по умолчанию для предложения ORDER BY. Этот метод не предназначен для сортировки по убыванию.
ВЫБЕРИТЕ * ОТ сотрудников ЗАКАЗАТЬ ПО ИМЕНИ;
ID | NAME | AGE | ADDRESS | SALARY | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Amish | 32 | Ahmedabad | 2000.00 | |||||||||||
8 | Amisha | 28 | Калькутта | 1000.00 | |||||||||||
5 | Дургеш | 27 | Бхопал | 8500. 00 | |||||||||||
6 | Esha | 22 | MP | 4500.00 | |||||||||||
7 | Khansha | 24 | Indore | 10000.00 | |||||||||||
2 | Nisha | 25 | Delhi | 1500.00 | |||||||||||
9 | Sarfaraz | 24 | Patna | 6000.00 | |||||||||||
3 | Suman | 23 | KOTA | 2000,00 | |||||||||||
4 | Yashwant | 25 | Mumbai | 6500,00 | 6500,00 | . сортировка в одном операторе SELECT. ВЫБЕРИТЕ * ИЗ Сотрудники ЗАКАЗАТЬ ПО ИМЕНИ ASC, ID DESC;
В этом примере возвращаются все записи, отсортированные по NAME в порядке возрастания, а затем вторичная сортировка по идентификатору в порядке убывания. Это происходит только тогда, когда есть записи с одинаковыми именами. Он сортируется по идентификатору в порядке убывания. ВЫБЕРИТЕ * ИЗ Сотрудники ЗАКАЗАТЬ ПО ИМЯ DESC; Этот запрос SQL сортирует записи в таблице в порядке убывания их имен.
Номер столбца — это целое число, определяющее относительное положение столбца в таблице. Оно должно быть на 90 599 больше, чем 0 , но не число столбцов, чтобы столбец присутствовал в таблице. Это нарушает читаемость кода и затрудняет его прогнозирование. Последовательность появления столбцов зависит от физического порядка таблицы. Физический порядок часто меняется при добавлении, удалении или обновлении таблицы. Таким образом, запрос с использованием относительного положения дает другой результат при изменении порядка столбцов в таблице. Обращение к предложению ORDER BY по именам столбцов не влияет на результаты, что делает его более подходящим. ВЫБЕРИТЕ * ОТ сотрудников ЗАКАЗАТЬ ПО 3 ASC; В этом примере мы отсортировали таблицу по столбцу номер 3, т. е. в порядке возрастания возраста.
|