ПОРЪЧАЙТЕ ПО в MySQLASC и DESC заявка с пример

⚡ Умно обобщение

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

  • 🔠 Поведение по подразбиране: ORDER BY сортира във възходящ ред, когато не е посочено нито ASC, нито DESC, така че ASC е незадължителен в повечето оператори.
  • ⬆️ Ключова дума ASC: ASC подрежда числата от най-ниско към най-високо, низовете от A до Z и датите от най-ранната към най-късната.
  • ⬇️ Ключова дума DESC: DESC обръща тази последователност, което е подходящо за истории на плащания от последните до първите и за намаляващи списъци с дати на раждане.
  • 🧮 Сортиране по няколко колони: Редът на колоните е важен. ORDER BY пол, date_of_birth DESC сортира пола първо във възходящ ред, а след това датите в низходящ ред във всяка група.
  • ???? Комбинация от клаузи: WHERE филтрира редовете, GROUP BY ги агрегира, ORDER BY подрежда резултата в последователност, а LIMIT го отрязва.
  • Фактор на производителност: Индексът върху сортираната колона позволява MySQL за да се избегне операция за сортиране на файлове върху големи таблици.

ПОРЪЧАЙТЕ ПО в MySQL

Какво е 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 приема. Таблицата по-долу ги сравнява между типовете данни, които ще сортирате най-често.

Ключови думи DESC и ASCASC е кратката форма за възходящ Ключови думи DESC и ASCMySQL 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 ни дава следните резултати, показани по-долу.

MySQL резултат от заявката ORDER BY DESC

Сортиране във възходящ ред с ASC

Същата заявка във възходящ ред просто разменя ключовата дума.

SELECT * FROM members ORDER BY date_of_birth ASC;

MySQL ORDER BY 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 дава следните резултати.

MySQL Пример за ORDER BY с две колони

Колоната за пол е сортирана във възходящ ред по подразбиране, докато колоната за дата на раждане е сортирана изрично в низходящ ред. Всяка ключова дума за посока се отнася само за колоната, която следва.

Как да комбинирате ORDER BY с WHERE, LIMIT и GROUP BY

ORDER BY рядко е единствената клауза в производствена заявка. MySQL винаги оценява клаузите във фиксирана последователност и познаването на тази последователност обяснява защо резултатите изглеждат по начина, по който изглеждат.

  1. ОТ чете редовете от таблицата.
  2. КЪДЕ изхвърля редовете, които не отговарят на условието.
  3. ГРУПИРАЙ ПО свива оцелелите редове в групи и HAVING филтрира тези групи.
  4. ПОДРЕДЕНИ ПО последователности, каквито и редове да останат.
  5. ОГРАНИЧАВА изрязва заявения брой редове от сортирания списък.

Тъй като 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 може да чете редовете по индексен ред и да пропуска сортирането напълно. Без индекс, големите таблици налагат сортиране на файлове в паметта или на диска, което е обичайната причина заявката за отчет да става бавна.

Въпроси и Отговори

Може. Без индекс на сортираната колона, MySQL извършва сортиране на файлове върху целия набор от резултати. Добавянето на индекс, който съответства на колоната и посоката ORDER BY, позволява на сървъра да чете редовете по ред и да пропуска тази стъпка.

Обикновено не. Сортирането по подразбиране, като например utf8mb4_0900_ai_ci, не е чувствително към главни и малки букви, така че „apple“ и „Apple“ се сортират заедно. Двоичното или _cs сортиране, или ORDER BY BINARY column_name, създава подреждане, чувствително към главни и малки букви, където главните букви са първи.

Да. ORDER BY RAND() разбърква резултатния набор, което е удобно за избиране на произволен филм или член. Той оценява всеки ред преди сортиране, така че го комбинирайте с LIMIT и го избягвайте при много големи таблици.

Да. Помощници с изкуствен интелект, вградени в инструменти като MySQL Workbench Превърнете заявките на обикновен език в SELECT оператори с ORDER BY. Винаги проверявайте генерираната колона и посока на сортиране, защото изкуственият интелект не може да знае какъв ред изисква вашият отчет.

Отчасти. Съветниците, управлявани от изкуствен интелект, четат бавни регистрационни файлове на заявки и предлагат индекси, които премахват операциите по сортиране на файлове. Предложенията все още се нуждаят от човешка проверка, тъй като всеки допълнителен индекс забавя вмъкванията и актуализациите на една и съща таблица.

Обобщете тази публикация с: