Сортиране на резултатите
С помощта на командата SELECT резултатите бяха върнати в същия ред, в който записите бяха добавени в базата данни. Това е редът за сортиране по подразбиране. В този раздел ще разгледаме как можем да сортираме резултатите от заявката си. Сортирането е просто пренареждане на резултатите от нашата заявка по определен начин. Сортирането може да се извърши на една колона или на повече от една колона. Това може да се направи за числа, низове, както и типове данни за дата.
Какво е ORDER BY в MySQL?
MySQL ORDER BY се използва заедно с заявката SELECT за сортиране на данните по подреден начин. Клаузата MySQL ORDER BY се използва за сортиране на резултатите от заявките във възходящ или низходящ ред.
SELECT statement… [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
ТУК
- "SELECT statement ..." е обикновената заявка за избор
- "|" представлява алтернативи
- "[WHERE условие | GROUP BY` име_на_полета `HAVING условие" е незадължително условие, използвано за филтриране на резултатите от заявката.
- „ORDER BY“ извършва сортирането на резултатите от заявката
- "[ASC | DESC]" е ключовата дума, използвана за сортиране на набори от резултати във възходящ или низходящ ред. Забележка ASC се използва по подразбиране.
Какво представляват DESC и ASC ключовите думи?
|
|
Използва се за сортиране на резултатите от заявката в стил отгоре надолу. |
Използва се за сортиране на резултатите от заявката в стил отдолу нагоре |
Когато работите с типове данни за дата, най-ранната дата се показва в горната част на списъка. |
. Когато работите по типове дати, най-новата дата се показва в горната част на списъка. |
Когато работите с числови типове данни, най-ниските стойности се показват в горната част на списъка. |
Когато работите с числови типове данни, най-високите стойности се показват в горната част на набора от резултати от заявката. |
Когато работите с типове данни с низове, наборът от резултати от заявките се сортира от тези, започващи с буквата A, стигаща до буквата Z. |
Когато работите с низови типове данни, наборът от резултати от заявките се сортира от тези, започващи с буквата Z, спускаща се до буквата А. |
И двете ключови думи 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]
ТУК
- SELECT {fieldName (s) | *} FROM tableName (s) е изразът, съдържащ полетата и таблицата (таблиците), от които да се получи набор от резултати.
- [WHERE условие] не е задължително, но може да се използва за филтриране на данните според даденото условие.
- ПОРЪЧКА ПО Име на полето е задължително и е полето, в което трябва да се извърши сортирането. Ключовата дума MySQL DESC указва, че сортирането трябва да бъде в низходящ ред.
- [LIMIT] е по избор, но може да се използва за ограничаване на броя на резултатите, върнати от набора от резултати от заявката.
Примери:
Нека сега разгледаме практически пример -
SELECT * FROM members;
Изпълнението на горния скрипт в MySQL workbench срещу myflixdb ни дава следните резултати, показани по-долу.
membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | This email address is being protected from spambots. You need JavaScript enabled to view it. |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
5 | Leonard Hofstadter | Male | NULL | Woodcrest | NULL | 845738767 | NULL |
6 | Sheldon Cooper | Male | NULL | Woodcrest | NULL | 976736763 | NULL |
7 | Rajesh Koothrappali | Male | NULL | Woodcrest | NULL | 938867763 | NULL |
8 | Leslie Winkle | Male | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
9 | Howard Wolowitz | Male | 24-08-1981 | SouthPark | P.O. Box 4563 | 987786553 |
Да предположим, че маркетинговият отдел иска данните за членовете да бъдат подредени в низходящ ред на датата на раждане. Това ще им помогне да изпращат поздравления за рожден ден своевременно. Можем да получим споменатия списък, като изпълним заявка като по-долу -
SELECT * FROM members ORDER BY date_of_birth DESC;
Изпълнението на горния скрипт в MySQL workbench срещу myflixdb ни дава следните резултати, показани по-долу.
Същата заявка във възходящ ред
ИЗБЕРЕТЕ * ОТ членовете ПОРЪЧАЙТЕ ПО date_of_birth ASC
Забележка: NULL стойности означава никакви стойности (не нула или празен низ). Наблюдавайте начина, по който са сортирани.
Още примери
Нека разгледаме следния скрипт, който изброява всички записи на членове.
SELECT * FROM `members`;
Изпълнението на горния скрипт дава следните резултати, показани по-долу.
membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | This email address is being protected from spambots. You need JavaScript enabled to view it. |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
5 | Leonard Hofstadter | Male | NULL | Woodcrest | NULL | 845738767 | NULL |
6 | Sheldon Cooper | Male | NULL | Woodcrest | NULL | 976736763 | NULL |
7 | Rajesh Koothrappali | Male | NULL | Woodcrest | NULL | 938867763 | NULL |
8 | Leslie Winkle | Male | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
9 | Howard Wolowitz | Male | 24-08-1981 | SouthPark | P.O. Box 4563 | 987786553 | NULL |
Да предположим, че искаме да получим списък, който сортира резултатите от заявката, използвайки полето за пол, бихме използвали скрипта, показан по-долу.
SELECT * FROM `members` ORDER BY `gender`;
membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | This email address is being protected from spambots. You need JavaScript enabled to view it. |
4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
5 | Leonard Hofstadter | Male | NULL | Woodcrest | NULL | 845738767 | NULL |
6 | Sheldon Cooper | Male | NULL | Woodcrest | NULL | 976736763 | NULL |
7 | Rajesh Koothrappali | Male | NULL | Woodcrest | NULL | 938867763 | NULL |
8 | Leslie Winkle | Male | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
9 | Howard Wolowitz | Male | 24-08-1981 | SouthPark | P.O. Box 4563 | 987786553 | NULL |
Членовете "Женски" са показани първо, последвани от "Мъжки" членове, това е така, защото когато се използва клаузата ORDER BY DESC, без да се посочва ключовата дума ASC или MySQL DESC, по подразбиране MySQL е сортирала резултатите от заявката във възходящ ред.
Нека сега разгледаме пример, който извършва сортирането с помощта на две колони ; първата по подразбиране се сортира във възходящ ред, докато втората колона се сортира в низходящ ред.
SELECT * FROM `members` ORDER BY `gender`,`date_of_birth` DESC;
Изпълнението на горния скрипт в MySQL workbench срещу myflixdb дава следните резултати.
Половата колона по подразбиране беше сортирана във възходящ ред, докато колоната за дата на раждане беше сортирана изрично в низходящ ред
Защо можем да използваме DESC и ASC?
Да предположим, че искаме да отпечатаме история на плащанията за член на видеотеката, за да помогнем да отговаряме на запитвания от рецепцията, не би ли било по-логично плащанията да бъдат отпечатани в низходящ хронологичен ред, започвайки от скорошното плащане до по-ранното плащане?
DESC в SQL е ключова дума, която става полезна в такива ситуации. Можем да напишем заявка, която сортира списъка в низходящ ред, използвайки датата на плащане.
Да предположим, че маркетинговият отдел иска да получи списък с филми по категории, които членовете могат да използват, за да решат кои филми са на разположение в библиотеката при наемане на филми, не би ли било по-логично да изглежда сортиране на имената и заглавията на категориите филми във възходящ ред, така че членовете могат бързо да търсят информацията от списъка?
Ключовата дума ASC е полезна в такива ситуации; можем да получим списъка с филми, сортиран по име на категория и заглавие на филм във възходящ ред.
Обобщение
- Сортирането на резултатите от заявката е пренареждане на редовете, върнати от набор от резултати от заявка, във възходящ или низходящ ред.
- Ключовата дума DESC в SQL се използва за сортиране на резултатите от заявката в низходящ ред.
- Ключовата дума ASC се използва за сортиране на резултатите от заявката във възходящ ред.
- И DESC, и ASC работят заедно с ключовата дума ORDER BY. Те могат да се използват и в комбинация с други ключови думи, като клауза WHERE и LIMIT
- По подразбиране за ORDER BY, когато нищо не е изрично посочено, е ASC.