SQL ORDER BY DESC
В этом разделе мы описали ORDER BY DESC с подробным примером.
Оператор ORDER BY DESC используется для сортировки данных в результирующем наборе в порядке убывания. Оператор ORDER BY DESC используется в операторе SELECT.
Синтаксис —
SELECT столбец1, столбец2, …, столбецN ОТ имя_таблицы [ ГДЕ состояние ] ORDER BY имя_столбца DESC;
- столбец1, столбец2, …, столбецN — указывает имена столбцов из таблицы.
- имя_таблицы — указывает имя таблицы.
- имя_столбца — указывает столбец, используемый для выполнения операции ORDER BY DESC.
Пример —
Давайте рассмотрим приведенные ниже таблицы в качестве примера таблицы (таблиц) для создания 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 | 08.10.2019 | 25000,00 | 2000 |
005 | Сотрудник5 | Аналитик | Сотрудник3 | 11.07.2019 | 20000,00 | 1000 |
006 | Сотрудник6 | Аналитик | Сотрудник3 | 08.10.2019 | 18000.00 | 1000 |
007 | Сотрудник7 | Клерк | Сотрудник3 | 11.07.2019 | 15000,00 | 1000 |
008 | Сотрудник8 | Продавец | Сотрудник4 | 09. 09.2019 | 14000.00 | 2000 |
009 | Сотрудник9 | Продавец | Сотрудник4 | 08.10.2019 | 13000.00 | 2000 |
Сценарий — выборка строк в порядке убывания одного столбца.
Требование — Получить emp_name, manager_id всех сотрудников из таблицы employee_details в порядке убывания manager_id. Запрос был такой —
ВЫБРАТЬ emp_name, manager_id ИЗ employee_details ЗАКАЗАТЬ ПО manager_id DESC;
Выполнив вышеуказанный запрос, мы можем получить результаты, как показано ниже —
emp_name | manager_id |
---|---|
Сотрудник9 | Сотрудник4 |
Сотрудник8 | Сотрудник4 |
Сотрудник7 | Сотрудник3 |
Сотрудник6 | Сотрудник3 |
Сотрудник5 | Сотрудник3 |
Сотрудник4 | Сотрудник2 |
Сотрудник3 | Сотрудник1 |
Сотрудник2 | |
Сотрудник1 |
Сценарий — выборка строк путем сортировки нескольких строк в порядке убывания.
Требование — Получить все сведения о сотрудниках, чей dept_id равен 2000 и в порядке убывания date_of_hire, зарплаты. Запрос был следующим —
SELECT * FROM employee_details ГДЕ dept_id = 2000 ЗАКАЗ ПО зарплате DESC, дате_найма DESC;
Выполнив вышеуказанный запрос, мы можем получить результаты, как показано ниже —
emp_id | emp_name | обозначение | manager_id | date_of_hire | оклад | dept_id |
---|---|---|---|---|---|---|
002 | Сотрудник2 | Директор | 11.07.2019 | 40000,00 | 2000 | |
004 | Сотрудник4 | Менеджер | Сотрудник2 | 08.10.2019 | 25000,00 | 2000 |
008 | Сотрудник8 | Продавец | Сотрудник4 | 09.09.2019 | 14000.00 | 2000 |
009 | Сотрудник9 | Продавец | Сотрудник4 | 08. 10.2019 | 13000.00 | 2000 |
Сценарий — выборка строк в порядке возрастания одного столбца и в порядке убывания другого столбца.
Требование – Получить emp_name, manager_id, назначение всех сотрудников из таблицы employee_details в порядке возрастания manager_id и убывания назначения. Запрос был такой —
ВЫБЕРИТЕ emp_name, manager_id, назначение ИЗ employee_details ORDER BY manager_id, обозначение DESC;
Выполнив вышеуказанный запрос, мы можем получить результаты, как показано ниже —
emp_name | manager_id | обозначение |
---|---|---|
Сотрудник8 | Сотрудник4 | Продавец |
Сотрудник9 | Сотрудник4 | Продавец |
Сотрудник5 | Сотрудник3 | Аналитик |
Сотрудник6 | Сотрудник3 | Аналитик |
Сотрудник7 | Сотрудник3 | Клерк |
Сотрудник4 | Сотрудник2 | Менеджер |
Сотрудник3 | Сотрудник1 | Менеджер |
Сотрудник1 | Директор | |
Сотрудник2 | Директор |
Использование предложений WHERE и ORDER BY в SQL
При выполнении запроса SELECT без каких-либо параметров сортировки сервер SQL возвращает записи в произвольном порядке.
В большинстве случаев SQL-сервер возвращает записи в том же порядке, в котором они добавляются в базу данных. Нет гарантии, что записи будут возвращены в определенном порядке, если вы не используете параметры сортировки в SQL. В дополнение к сортировке вы также используете параметры фильтрации, чтобы возвращать только определенные записи, соответствующие вашим требованиям.Сортировка записей
SQL использует оператор ORDER BY для сортировки записей. Вы можете сортировать записи по возрастанию или убыванию, а также сортировать записи по нескольким столбцам. SQL позволяет сортировать в алфавитном, числовом или хронологическом порядке.
Например, предположим, что вы хотите получить список своих клиентов, и вам нужен список в алфавитном порядке по штатам. Ниже приведен ваш текущий список клиентов.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
321 | Фрэнк | Лоэ | Даллас | ТХ |
455 | Эд | Томпсон | Атланта | Г. А. |
456 | Эд | Томпсон | Атланта | Г.А. |
457 | Джо | Смит | Майами | FL |
458 | Фрэнк | Доу | Даллас | ТХ |
Если у вас тысячи клиентов и вы хотите просмотреть список клиентов в определенном состоянии без исключения других состояний, было бы слишком сложно просмотреть ваши данные без какой-либо возможности сортировки. Вы можете отсортировать данные по состоянию, используя следующую инструкцию SQL.
SELECT * FROM Customer
ORDER BY State
В приведенном выше выражении ваши данные возвращаются и сортируются в алфавитном порядке по штатам. Данные сортируются в порядке возрастания. Восходящий порядок установлен по умолчанию, но вы также можете добавить ключевое слово «ASC» в свое заявление. Следующая инструкция SQL аналогична приведенной выше инструкции.
SELECT * FROM Customer
ORDER BY State ASC
Обратите внимание, что разница заключается в ASC, поскольку он подразумевается, когда вы исключаете его из операторов SQL.
Ваши данные по-прежнему хранятся без сортировки, но оператор SELECT показывает вам следующий набор данных.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
457 | Джо | Смит | Майами | FL |
455 | Эд | Томпсон | Атланта | Г.А. |
456 | Эд | Томпсон | Атланта | Г. А. |
321 | Фрэнк | Лоэ | Даллас | ТХ |
458 | Фрэнк | Доу | Даллас | ТХ |
Вы также можете перечислить данные в порядке убывания. Ключевое слово DESC или DESCENDING перечисляет данные в порядке убывания. Взяв тот же набор данных, который вы использовали для отчета о заказе ASC, давайте поменяем местами клиентов. Следующий код показывает, как вы пишете оператор DESC SQL.
SELECT * FROM Customer
ORDER BY State DESC
SQL позволяет упорядочивать записи на основе нескольких столбцов. Например, вы можете отсортировать записи по состоянию, а затем по фамилии. В результате вы получите список людей, сгруппированных по состоянию клиента, а затем упорядоченных по их фамилиям. Вы разделяете столбцы, добавляя запятую, а затем добавляя другой параметр столбца в операторе ORDER BY.
ВЫБЕРИТЕ * ОТ Заказчика
ORDER BY State DESC, Last_name ASC
Фраза ASC используется в приведенном выше заявлении для ясности. Когда вы читаете заявление, вы знаете, что ваш набор записей упорядочен в порядке убывания, а затем упорядочен в порядке возрастания по фамилии. Ваш набор данных превращается в следующее.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
457 | Джо | Смит | Майами | FL |
455 | Эд | Томпсон | Атланта | Г.А. |
456 | Эд | Томпсон | Атланта | Г. А. |
458 | Фрэнк | Доу | Даллас | ТХ |
321 | Фрэнк | Лоэ | Даллас | ТХ |
Запись уведомления номер 321 и 458 поменялись местами, потому что фамилии были отсортированы по состоянию.
Фильтрация записей и WHERE
Мы использовали предложение WHERE несколько раз, чтобы показать вам, как фильтровать записи при использовании операторов SELECT, UPDATE и DELETE. Вы можете использовать предложение WHERE с оператором ORDER BY или без него. Вы можете фильтровать записи по конечным значениям, значениям сравнения или с помощью операторов sub-SELECT. Предложение WHERE дает вам несколько вариантов фильтрации данных.
Мы использовали несколько примеров со знаком равенства (=). Вы также можете использовать сравнения. Например, вам может понадобиться получить список клиентов с идентификаторами от 300 до 400. Эти значения отображаются в следующей инструкции SQL.
SELECT * FROM Customer
WHERE CustomerId >=200 AND CustomerId <= 300
ORDER BY State
Обратите внимание, что используются фразы >= и <=. Знак равенства включает значения, находящиеся справа от них. Другими словами, в поиск включены 200 и 300. В этом примере таблицы Customer нет ни 200, ни 300, поэтому эти значения не возвращаются. Обратите внимание, что синтаксис также включает в себя «И» в операторе SQL. Ключевое слово AND включает фильтр из следующего оператора SQL, в данном случае это «Клиент <= 300». Когда вы используете ключевое слово AND, вы указываете оператору SQL фильтровать записи с обоими параметрами.
Приведенный выше оператор SELECT возвращает следующий набор данных.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
321 | Фрэнк | Лоэ | Даллас | ТХ |
В нашем примере таблица Customer имеет только одну запись в заданном диапазоне.
В предложении WHERE можно использовать фразу ИЛИ вместо фразы И. В следующем операторе И заменяется на ИЛИ.
SELECT * FROM Customer
WHERE CustomerId >=200 ИЛИ CustomerId <= 300
ORDER BY State
В приведенном выше заявлении говорится: «вернуть всех клиентов с идентификатором больше 200 или идентификатором меньше 300». Приведенный выше оператор SELECT возвращает следующие результаты.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
457 | Джо | Смит | Майами | FL |
455 | Эд | Томпсон | Атланта | Г.А. |
456 | Эд | Томпсон | Атланта | Г. А. |
321 | Фрэнк | Лоэ | Даллас | ТХ |
458 | Фрэнк | Доу | Даллас | ТХ |
Обратите внимание, что все записи были возвращены. Чтобы понять, почему возвращаются все записи, вы должны разбить предложение WHERE на части. Первая часть — «CustomerId >=200». Все ваши записи имеют идентификатор выше 200, поэтому первая часть вашего предложения WHERE возвращает все записи.
Следующей частью является оператор ИЛИ, который является важным отличием от оператора И. Оператор OR говорит сохранить исходный набор данных, но также вернуть клиентов с идентификатором меньше 300. У вас нет клиентов с идентификатором меньше 300, поэтому вторая часть не возвращает записей. Трудная для понимания часть этого оператора SQL заключается в том, почему первый оператор с И возвращает 1 запись, а второй возвращает все записи. Оператор AND говорит, что вторая часть вашего предложения WHERE также должна применяться, поэтому ваши записи должны отвечать true для обоих условий. Второй оператор SQL возвращает записи, которые возвращают истину для или первое условие или второе условие. Логика этих двух утверждений совершенно разная. Поскольку все ваши записи соответствуют первому условию, оператор OR позволяет этим записям проходить и отображаться в результатах.
Оператор IN использовался в предыдущих главах, но вы также можете указать значения, которые хотите вернуть в своем операторе IN. В предыдущих главах использовался запрос sub-SELECT. Вы также можете использовать IN для указания таких значений, как состояние, которое вы хотите вернуть. Следующая инструкция SQL является примером.
SELECT * FROM Customer
WHERE State IN (‘tx,’ ‘fl’)
Фраза IN упрощает чтение кода SQL вместо использования оператора ИЛИ. В приведенном выше заявлении говорится: «получить всех клиентов, состояние которых равно TX ИЛИ FL. В следующей таблице приведены ваши результаты.
идентификатор клиента | Имя | Фамилия | Город | Состояние |
321 | Фрэнк | Лоэ | Даллас | ТХ |
457 | Джо | Смит | Майами | FL |
458 | Фрэнк | Доу | Даллас | ТХ |
Сложность предложения WHERE возрастает по мере того, как вы используете больше условий.
Даты обычно используются в операторах SQL. Пример таблицы не содержит дат, но представьте, что в таблице есть столбец даты с именем «SignupDate». В столбце SignupDate указано, когда клиент зарегистрировался на вашем веб-сайте. Затем вы можете запускать отчеты на основе даты, когда клиент зарегистрировался на вашем сайте. Следующий код является примером.
SELECT * FROM Customer
WHERE SignupDate МЕЖДУ «1/1/2014» И «31/12/2014»
ORDER BY State
Вышеупомянутая инструкция SQL получает записи, которые имеют дату между первым днем года в 2014 и последний день года. Со значениями даты SQL включает даты, перечисленные в параметрах. Приведенное выше утверждение также можно записать следующим образом.
SELECT * FROM Customer
WHERE SignupDate >= ‘1/1/2014’ AND SignupDate <= ‘31/12/2014’
ORDER BY State
Предложение WHERE позволяет использовать оператор LIKE. Вы используете оператор LIKE, когда вам нужен список клиентов на основе части значений. Например, предположим, что у вас есть несколько клиентов в Далласе, но у вас также есть клиенты в городах, название которых начинается с «Да», и вам необходимо их увидеть.