ЗАМОВИТИ ЗА в MySQL: Запит ASC та DESC з прикладом
⚡ Розумний підсумок
ЗАМОВИТИ ЗА в MySQL сортує набори результатів запиту у зростаючій або спадаючій послідовності за допомогою ключових слів ASC та DESC. У розділах нижче пояснюється синтаксис, сортування за одним та кількома стовпцями, розміщення NULL та робочі приклади, виконані для зразка бази даних myflixdb.

Що таке ORDER BY в MySQL?
MySQL СОРТУВАТИ ЗА – це речення, яке використовується із запитом SELECT для сортування даних упорядкованим чином. MySQL Речення ORDER BY сортує набір результатів запиту за зростанням або спаданням, по одному стовпцю або по кількох стовпцях одночасно.
Коли команда SELECT використовується окремо, рядки повертаються в порядку, в якому їх зчитує механізм сховища, що не гарантовано. Сортування — це просто перевпорядкування цих рядків у заданій послідовності. Його можна виконувати як для числових, рядкових, так і для датних типів даних.
MySQL Синтаксис ORDER BY
Перш ніж розглядати приклади, варто подивитися, де знаходиться речення всередині повного оператора SELECT.
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
ТУТ
- "Оператор SELECT... " – це звичайний запит на вибірку.
- ” | « представляє альтернативи.
- «[ДЕ умова | GROUP BY `назва_поля` HAVING умова]» – це необов’язкова умова, яка використовується для фільтрації набору результатів запиту.
- "СОРТУВАТИ ЗА" виконує сортування набору результатів запиту.
- “[ASC | DESC]" — це ключове слово, яке використовується для сортування результуючого набору за зростанням або спаданням. Зверніть увагу, що ASC є типовим.
Що таке ключові слова DESC і ASC?
ASC та DESC – це два напрямки сортування, які приймає ORDER BY. У таблиці нижче порівнюються вони для типів даних, які ви сортуєте найчастіше.
ASC - це коротка форма висхідного |
MySQL DESC - це скорочена форма для спадання |
|---|---|
| Він використовується для сортування результатів запиту зверху вниз. | Він використовується для сортування результатів запиту знизу вгору. |
| Під час роботи з типами даних дати найраніша дата відображається вгорі списку. | Під час роботи з типами даних дати остання дата відображається у верхній частині списку. |
| Під час роботи з числовими типами даних найнижчі значення відображаються вгорі списку. | Під час роботи з числовими типами даних найвищі значення відображаються у верхній частині набору результатів запиту. |
| Під час роботи з рядковими типами даних набір результатів запиту сортується від тих, що починаються з літери A до літери Z. | Під час роботи з рядковими типами даних набір результатів запиту сортується від тих, що починаються з літери Z, аж до літери A. |
Ключові слова SQL DESC та ASC використовуються разом з оператором SELECT та MySQL ORDER BY пункт.
Синтаксис DESC та ASC
Ключове слово сортування SQL DESC має такий базовий синтаксис.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
ТУТ
- ВИБРАТИ {назви полів | *} FROM tableName(s) — це оператор, що містить поля та таблицю(и), з яких потрібно отримати результуючий набір.
- [Умова WHERE] є необов’язковим, але його можна використовувати для фільтрації даних відповідно до заданої умови.
- ORDER BY назва(и) поля(ів) обов'язковий і вказує назву поля, за яким виконується сортування. MySQL Ключове слово DESC вказує на те, що сортування виконується у порядку спадання.
- [ОБМЕЖЕННЯ N] необов'язковий, але може бути використаний для обмеження кількості рядків, що повертаються з набору результатів запиту.
Навіщо використовувати DESC та ASC у MySQL?
Знання синтаксису – це лише половина справи. Причина існування ORDER BY полягає в тому, що набір результатів, який легко створити базі даних, не завжди легко читати людині.
Припустимо, ви друкуєте історію платежів для користувача відеотеки, щоб персонал рецепції міг швидко відповідати на запити. Набагато логічніше друкувати платежі у спадному хронологічному порядку, починаючи з останнього платежу і продовжуючи до самого раннього. DESC у SQL – це ключове слово, яке стає зручним у такій ситуації, оскільки список можна відсортувати за датою платежу.
Тепер припустимо, що відділ маркетингу хоче отримати список фільмів за категоріями, щоб учасники могли бачити, які фільми є в бібліотеці, перш ніж брати їх напрокат. Сортування назв категорій та фільмів у порядку зростання дозволяє учасникам швидко знаходити інформацію, так само, як вони це роблять в покажчику. Для цього використовується ключове слово ASC.
Коротше кажучи, ORDER BY перетворює необроблений набір результатів на звіт. Ключове слово, яке ви обираєте, залежить від питання, яке ставить читач: що сталося нещодавно вимагає DESC, тоді як де я можу знайти цей предмет закликає до ASC.
MySQL Приклад ORDER BY
Усі наведені нижче приклади виконуються з базою даних myflixdb. Почніть з таблиці несортованих членів, яка повертається в порядку за замовчуванням.
SELECT * FROM members;
Виконання наведеного вище сценарію в MySQL Аналіз Workbench на myflixdb дає нам наступні результати, показані нижче.
| member_number | повні_імена | пол | дата_народження | фізична адреса | поштова_адреса | номер_контакту | |
|---|---|---|---|---|---|---|---|
| 1 | Джанет Джонс | жінка | 21-07-1980 | Ділянка № 4 вул | Приватна сумка | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Джанет Сміт Джонс | жінка | 23-06-1980 | Мелроуз 123 | NULL | NULL | jj@fstreet.com |
| 3 | Роберт Філ | чоловік | 12-07-1989 | 3-я вулиця 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Глорія Вільямс | жінка | 14-02-1984 | 2-а вулиця 23 | NULL | NULL | NULL |
| 5 | Леонард Хофштадтер | чоловік | NULL | Вудрест | NULL | 845738767 | NULL |
| 6 | Шелдон Купер | чоловік | NULL | Вудрест | NULL | 976736763 | NULL |
| 7 | Раджеш Кутраппалі | чоловік | NULL | Вудрест | NULL | 938867763 | NULL |
| 8 | Леслі Вінкл | чоловік | 14-02-1984 | Вудрест | NULL | 987636553 | NULL |
| 9 | Говард Воловиц | чоловік | 24-08-1981 | Південний парк | ПО Box 4563 | 987786553 | NULL |
Сортування за спаданням за допомогою DESC
Припустимо, що відділ маркетингу хоче, щоб дані учасників були розташовані в порядку спадання дати народження. Це допомагає команді своєчасно надсилати привітання з днем народження. Список створюється за допомогою наведеного нижче запиту.
SELECT * FROM members ORDER BY date_of_birth DESC;
Виконання наведеного вище сценарію в MySQL Аналіз Workbench на myflixdb дає нам наступні результати, показані нижче.
Сортування за зростанням за допомогою ASC
Той самий запит у порядку зростання просто змінює ключове слово місцями.
SELECT * FROM members ORDER BY date_of_birth ASC;
Примітка: NULL означає повну відсутність значення, що не те саме, що нуль або порожній рядок. Зверніть увагу на обидва знімки екрана, як згруповані дати NULL: MySQL NULL трактує значення нижче за будь-яке інше, тому рядки NULL відображаються першими під ASC та останніми під DESC.
Як сортувати за кількома стовпцями в MySQL
Сортування за одним стовпцем відповідає на прості запитання. Звіти зазвичай потребують другого рівня впорядкування, і ORDER BY приймає список полів, розділених комами, саме для цієї мети.
Розглянемо наступний SQL-скрипт сортування, який перераховує всі записи членів без будь-яких явних вказівок.
SELECT * FROM `members`;
Виконання наведеного вище сценарію дає такі результати, показані нижче.
| member_number | повні_імена | пол | дата_народження | фізична адреса | поштова_адреса | номер_контакту | |
|---|---|---|---|---|---|---|---|
| 1 | Джанет Джонс | жінка | 21-07-1980 | Ділянка № 4 вул | Приватна сумка | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Джанет Сміт Джонс | жінка | 23-06-1980 | Мелроуз 123 | NULL | NULL | jj@fstreet.com |
| 3 | Роберт Філ | чоловік | 12-07-1989 | 3-я вулиця 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Глорія Вільямс | жінка | 14-02-1984 | 2-а вулиця 23 | NULL | NULL | NULL |
| 5 | Леонард Хофштадтер | чоловік | NULL | Вудрест | NULL | 845738767 | NULL |
| 6 | Шелдон Купер | чоловік | NULL | Вудрест | NULL | 976736763 | NULL |
| 7 | Раджеш Кутраппалі | чоловік | NULL | Вудрест | NULL | 938867763 | NULL |
| 8 | Леслі Вінкл | чоловік | 14-02-1984 | Вудрест | NULL | 987636553 | NULL |
| 9 | Говард Воловиц | чоловік | 24-08-1981 | Південний парк | ПО Box 4563 | 987786553 | NULL |
Сортування одного стовпця за замовчуванням
Припустимо, нам потрібен список, який сортує набір результатів запиту за полем статі. Наведений нижче скрипт робить це без найменування напрямку.
SELECT * FROM `members` ORDER BY `gender`;
| member_number | повні_імена | пол | дата_народження | фізична адреса | поштова_адреса | номер_контакту | |
|---|---|---|---|---|---|---|---|
| 1 | Джанет Джонс | жінка | 21-07-1980 | Ділянка № 4 вул | Приватна сумка | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Джанет Сміт Джонс | жінка | 23-06-1980 | Мелроуз 123 | NULL | NULL | jj@fstreet.com |
| 4 | Глорія Вільямс | жінка | 14-02-1984 | 2-а вулиця 23 | NULL | NULL | NULL |
| 3 | Роберт Філ | чоловік | 12-07-1989 | 3-я вулиця 34 | NULL | 12345 | rm@tstreet.com |
| 5 | Леонард Хофштадтер | чоловік | NULL | Вудрест | NULL | 845738767 | NULL |
| 6 | Шелдон Купер | чоловік | NULL | Вудрест | NULL | 976736763 | NULL |
| 7 | Раджеш Кутраппалі | чоловік | NULL | Вудрест | NULL | 938867763 | NULL |
| 8 | Леслі Вінкл | чоловік | 14-02-1984 | Вудрест | NULL | 987636553 | NULL |
| 9 | Говард Воловиц | чоловік | 24-08-1981 | Південний парк | ПО Box 4563 | 987786553 | NULL |
«Жіночі» члени відображаються першими, а потім «чоловічі» члени. Це пояснюється тим, що коли речення ORDER BY використовується без вказівки ASC або MySQL Ключове слово DESC, MySQL сортує набір результатів запиту за замовчуванням у порядку зростання.
Сортування двох стовпців у протилежних напрямках
Давайте тепер розглянемо приклад, який виконує сортування за допомогою двох стовпцівПерший стовпець — відсортованого in в порядку зростання за замовчуванням, тоді як другий стовпець відсортованого in у порядку зменшення.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
Виконання наведеного вище сценарію в MySQL Аналіз Workbench на myflixdb дає такі результати.
Стовпець статі за замовчуванням було відсортовано у порядку зростання, тоді як стовпець дати народження був відсортований явно у порядку спадання. Кожне ключове слово напрямку застосовується лише до стовпця, за яким воно йде.
Як поєднати ORDER BY з WHERE, LIMIT та GROUP BY
ORDER BY рідко є єдиним реченням у виробничому запиті. MySQL завжди обчислює речення у фіксованій послідовності, і знання цієї послідовності пояснює, чому результати виглядають саме так.
- З зчитує рядки з таблиці.
- ДЕ відкидає рядки, які не відповідають умові.
- GROUP BY згортає рядки, що залишилися, у групи, а HAVING фільтрує ці групи.
- СОРТУВАТИ ЗА послідовності, незалежно від рядків, що залишилися.
- МЕЖА вирізає запитувану кількість рядків із відсортованого списку.
Оскільки ORDER BY виконується після WHERE та GROUP BY, але перед LIMIT, запит на кшталт «п’ять наймолодших членів з Вудкреста» виражається одним оператором.
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
Такий самий порядок застосовується до згрупованих результатів. Агреговані значення, отримані за допомогою сукупність функцій такі як COUNT можна відсортувати, щоб найактивніша категорія піднімалася на початок звіту.
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
Порада: ORDER BY може сортувати за псевдонімом стовпця, за виразом або навіть за позицією стовпця, наприклад, ORDER BY 3. Сортування за позицією є ненадійним, оскільки вставка нового стовпця до списку SELECT непомітно змінює ключ сортування. Натомість назвіть стовпець.
Варто пам'ятати один момент щодо продуктивності. Коли відсортований стовпець містить індекс, MySQL може читати рядки в порядку індексації та взагалі пропускати сортування. Без індексу великі таблиці змушують сортувати файли в пам'яті або на диску, що є звичайною причиною повільного виконання запиту звіту.

ASC - це коротка форма висхідного
MySQL DESC - це скорочена форма для спадання

