ПОРЪЧАЙТЕ ПО в MySQLASC и DESC заявка с пример
⚡ Умно обобщение
ПОРЪЧАЙТЕ ПО в MySQL сортира резултатите от заявките във възходяща или низходяща последователност чрез ключовите думи ASC и DESC. Разделите по-долу обясняват синтаксиса, сортирането по една и няколко колони, поставянето на NULL и работещите примери, изпълнени спрямо примерната база данни myflixdb.

Какво е ORDER BY в MySQL?
MySQL ПОДРЕДЕНИ ПО е клауза, използвана със заявката SELECT за сортиране на данни по подреден начин. MySQL Клаузата ORDER BY сортира резултатите от заявката във възходящ или низходящ ред, по една колона или по няколко колони едновременно.
Когато командата SELECT се използва самостоятелно, редовете се връщат в реда, в който системата за съхранение ги е прочела, което не е гарантиран ред. Сортирането е просто пренареждане на тези редове в определена последователност. Може да се извършва както за числови, така и за низови типове данни и за дати.
MySQL ПОРЪЧКА ПО Синтаксис
Преди да разгледаме примерите, е полезно да видим къде се намира клаузата в пълен 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. |
Ключовите думи DESC и ASC в SQL се използват заедно с оператора SELECT и MySQL Клауза ORDER BY.
DESC и ASC синтаксис
Ключовата дума за сортиране на SQL DESC има следния основен синтаксис.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
ТУК
- ИЗБЕРЕТЕ {име на поле(я) | *} ОТ име(на) на таблица е операторът, съдържащ полетата и таблицата(ите), от които да се получи резултатният набор.
- [Условие WHERE] не е задължително, но може да се използва за филтриране на данните според даденото условие.
- ПОРЪЧАЙ ПО име(на) на поле(а) е задължително и посочва полето, върху което се извършва сортирането. MySQL Ключовата дума DESC указва, че сортирането е в низходящ ред.
- [ЛИМИТ N] е по избор, но може да се използва за ограничаване на броя на редовете, върнати от набора от резултати от заявката.
Защо да използваме DESC и ASC в MySQL?
Познаването на синтаксиса е само половината от картината. Причината за съществуването на ORDER BY е, че набор от резултати, който е лесен за генериране от база данни, не винаги е лесен за четене от човек.
Да предположим, че отпечатвате история на плащанията за член на видеотека, за да може рецепцията да отговаря бързо на запитванията. Много по-логично е плащанията да се отпечатват в низходящ хронологичен ред, започвайки с най-новото плащане и връщайки се към най-ранното. DESC в SQL е ключовата дума, която е полезна в такава ситуация, защото списъкът може да бъде сортиран по дата на плащане.
Да предположим, че маркетинговият отдел иска списък с филми по категории, за да могат членовете да видят кои заглавия библиотеката притежава, преди да ги наемат. Сортирането на имената на категориите и заглавията на филмите във възходящ ред позволява на членовете да търсят информация бързо, точно както биха направили в индекс. Ключовата дума ASC служи за тази цел.
Накратко, ORDER BY превръща суровия набор от резултати в отчет. Ключовата дума, която избирате, зависи от въпроса, който читателят задава: какво се случи наскоро призовава за DESC, докато къде мога да намеря този артикул призовава за ASC.
MySQL Пример за подреждане по
Всички следващи примери се изпълняват с примерната база данни myflixdb. Започваме с таблицата с несортирани членове, която се връща в подредбата си по подразбиране.
SELECT * FROM members;
Изпълнение на горния скрипт в MySQL Workbench срещу myflixdb ни дава следните резултати, показани по-долу.
| членски_номер | пълни_имена | пол | дата_на_раждане | физически_адрес | пощенски_адрес | номер_на_контакт | електронна поща |
|---|---|---|---|---|---|---|---|
| 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 | Южен парк | PO 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`;
Изпълнението на горния скрипт дава следните резултати, показани по-долу.
| членски_номер | пълни_имена | пол | дата_на_раждане | физически_адрес | пощенски_адрес | номер_на_контакт | електронна поща |
|---|---|---|---|---|---|---|---|
| 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 | Южен парк | PO Box 4563 | 987786553 | NULL |
Сортиране на една колона по подразбиращ се ред
Да предположим, че искаме списък, който сортира резултата от заявката, използвайки полето за пол. Скриптът по-долу прави това, без да посочва посока.
SELECT * FROM `members` ORDER BY `gender`;
| членски_номер | пълни_имена | пол | дата_на_раждане | физически_адрес | пощенски_адрес | номер_на_контакт | електронна поща |
|---|---|---|---|---|---|---|---|
| 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 | Южен парк | PO 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 винаги оценява клаузите във фиксирана последователност и познаването на тази последователност обяснява защо резултатите изглеждат по начина, по който изглеждат.
- ОТ чете редовете от таблицата.
- КЪДЕ изхвърля редовете, които не отговарят на условието.
- ГРУПИРАЙ ПО свива оцелелите редове в групи и 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 е кратката форма за низходящ

