ΠΑΡΑΓΓΕΛΙΑ ΑΠΟ σε MySQL: Ερώτημα ASC & 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... " είναι το κανονικό ερώτημα επιλογής.
- ” | " αντιπροσωπεύει εναλλακτικές λύσεις.
- «[Συνθήκη WHERE | ΟΜΑΔΟΠΟΙΗΣΗ ΜΕ βάση τη συνθήκη `όνομα_πεδίου(ων)` HAVING]» είναι η προαιρετική συνθήκη που χρησιμοποιείται για το φιλτράρισμα του συνόλου αποτελεσμάτων ερωτήματος.
- "ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ" εκτελεί την ταξινόμηση του συνόλου αποτελεσμάτων ερωτήματος.
- «[ASC | DESC]” είναι η λέξη-κλειδί που χρησιμοποιείται για την ταξινόμηση του συνόλου αποτελεσμάτων σε αύξουσα ή φθίνουσα σειρά. Σημειώστε ότι ASC είναι η προεπιλογή.
Τι είναι οι λέξεις-κλειδιά DESC και ASC;
Οι ASC και DESC είναι οι δύο κατευθύνσεις ταξινόμησης που δέχεται η επιλογή ORDER BY. Ο παρακάτω πίνακας τις συγκρίνει στους τύπους δεδομένων που θα ταξινομείτε πιο συχνά.
Το ASC είναι η σύντομη φόρμα για αύξουσα |
MySQL Το DESC είναι η σύντομη φόρμα για φθίνουσα πορεία |
|---|---|
| Χρησιμοποιείται για την ταξινόμηση των αποτελεσμάτων του ερωτήματος σε στυλ από πάνω προς τα κάτω. | Χρησιμοποιείται για την ταξινόμηση των αποτελεσμάτων του ερωτήματος με στυλ από κάτω προς τα πάνω. |
| Όταν εργάζεστε σε τύπους δεδομένων ημερομηνίας, η παλαιότερη ημερομηνία εμφανίζεται στην κορυφή της λίστας. | Όταν εργάζεστε σε τύπους δεδομένων ημερομηνίας, η πιο πρόσφατη ημερομηνία εμφανίζεται στην κορυφή της λίστας. |
| Όταν εργάζεστε με τύπους αριθμητικών δεδομένων, οι χαμηλότερες τιμές εμφανίζονται στην κορυφή της λίστας. | Όταν εργάζεστε με αριθμητικούς τύπους δεδομένων, οι υψηλότερες τιμές εμφανίζονται στην κορυφή του συνόλου αποτελεσμάτων ερωτήματος. |
| Όταν εργάζεστε με τύπους δεδομένων συμβολοσειράς, το σύνολο αποτελεσμάτων ερωτήματος ταξινομείται από εκείνα που ξεκινούν με το γράμμα A και φτάνοντας μέχρι το γράμμα Z. | Όταν εργάζεστε με τύπους δεδομένων συμβολοσειράς, το σύνολο αποτελεσμάτων ερωτήματος ταξινομείται από εκείνα που ξεκινούν με το γράμμα Z και καταλήγουν στο γράμμα Α. |
Τόσο οι λέξεις-κλειδιά SQL DESC όσο και οι λέξεις-κλειδιά ASC χρησιμοποιούνται σε συνδυασμό με την πρόταση SELECT και την MySQL ΔΙΑΤΑΞΗ ΚΑΤΑ ρήτρα.
Σύνταξη DESC και ASC
Η λέξη-κλειδί ταξινόμησης SQL DESC έχει την ακόλουθη βασική σύνταξη.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
ΕΔΩ
- ΕΠΙΛΟΓΗ {Όνομα(α) πεδίου | *} FROM Όνομα(α) πίνακα είναι η πρόταση που περιέχει τα πεδία και τον/τους πίνακα/πίνακες από τους οποίους θα ληφθεί το σύνολο αποτελεσμάτων.
- [ΠΟΥ συνθήκη] είναι προαιρετικό, αλλά μπορεί να χρησιμοποιηθεί για το φιλτράρισμα των δεδομένων σύμφωνα με τη δεδομένη συνθήκη.
- ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ όνομα/ονόματα πεδίου είναι υποχρεωτικό και ονομάζει το πεδίο στο οποίο εκτελείται η ταξινόμηση. Το MySQL Η λέξη-κλειδί DESC καθορίζει ότι η ταξινόμηση γίνεται σε φθίνουσα σειρά.
- [ΟΡΙΟ Ν] είναι προαιρετικό, αλλά μπορεί να χρησιμοποιηθεί για να περιορίσει τον αριθμό των γραμμών που επιστρέφονται από το σύνολο αποτελεσμάτων ερωτήματος.
Γιατί να χρησιμοποιήσετε DESC και ASC σε MySQL?
Η γνώση της σύνταξης είναι μόνο η μισή λύση. Ο λόγος που υπάρχει η ORDER BY είναι ότι ένα σύνολο αποτελεσμάτων που είναι εύκολο να παραχθεί από μια βάση δεδομένων δεν είναι πάντα εύκολο να διαβαστεί από κάποιον.
Ας υποθέσουμε ότι εκτυπώνετε ένα ιστορικό πληρωμών για ένα μέλος της βιντεοθήκης, ώστε η ρεσεψιόν να μπορεί να απαντά γρήγορα σε ερωτήσεις. Είναι πολύ πιο λογικό να εκτυπώνονται οι πληρωμές σε φθίνουσα χρονολογική σειρά, ξεκινώντας από την πιο πρόσφατη πληρωμή και επιστρέφοντας στην παλαιότερη. Η λέξη-κλειδί DESC σε SQL είναι η λέξη-κλειδί που είναι χρήσιμη σε μια τέτοια περίπτωση, επειδή η λίστα μπορεί να ταξινομηθεί με βάση την ημερομηνία πληρωμής.
Ας υποθέσουμε τώρα ότι το τμήμα μάρκετινγκ θέλει μια λίστα με ταινίες ανά κατηγορία, ώστε τα μέλη να μπορούν να δουν ποιους τίτλους διατηρεί η βιβλιοθήκη πριν τις νοικιάσουν. Η ταξινόμηση των ονομάτων κατηγοριών και των τίτλων ταινιών σε αύξουσα σειρά επιτρέπει στα μέλη να αναζητούν πληροφορίες γρήγορα, ακριβώς όπως θα έκαναν σε ένα ευρετήριο. Η λέξη-κλειδί ASC εξυπηρετεί αυτόν τον σκοπό.
Με λίγα λόγια, η συνάρτηση ORDER BY μετατρέπει ένα ακατέργαστο σύνολο αποτελεσμάτων σε μια αναφορά. Η λέξη-κλειδί που επιλέγετε εξαρτάται από την ερώτηση που θέτει ο αναγνώστης: τι συνέβη πιο πρόσφατα ζητά DESC, ενώ πού μπορώ να βρω αυτό το αντικείμενο καλεί για ASC.
MySQL ΠΑΡΑΓΓΕΛΙΑ ΜΕ Παράδειγμα
Όλα τα παραδείγματα που ακολουθούν εκτελούνται στη βάση δεδομένων δειγμάτων myflixdb. Ξεκινήστε με τον πίνακα μη ταξινομημένων μελών, ο οποίος επιστρέφεται με την προεπιλεγμένη σειρά του.
SELECT * FROM members;
Εκτέλεση του παραπάνω σεναρίου στο MySQL Το Workbench σε σχέση με το myflixdb μας δίνει τα ακόλουθα αποτελέσματα που φαίνονται παρακάτω.
| αριθμός μέλους | πλήρη_ονόματα | των δύο φύλων | ημερομηνία_γέννησης | φυσική_διεύθυνση | ταχυδρομική_διεύθυνση | αριθμός_επαφής | ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ |
|---|---|---|---|---|---|---|---|
| 1 | Τζάνετ Τζόουνς | Γυναίκα | 21-07-1980 | Οικόπεδο First Street No 4 | Ιδιωτική τσάντα | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Τζάνετ Σμιθ Τζόουνς | Γυναίκα | 23-06-1980 | Melrose 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 | Sheldon Cooper | Άντρας | Τιμή NULL | Ξυλόστεγο | Τιμή NULL | 976736763 | Τιμή NULL |
| 7 | Rajesh Koothrappali | Άντρας | Τιμή NULL | Ξυλόστεγο | Τιμή NULL | 938867763 | Τιμή NULL |
| 8 | Λέσλι Γουίνκλ | Άντρας | 14-02-1984 | Ξυλόστεγο | Τιμή NULL | 987636553 | Τιμή NULL |
| 9 | Χάουαρντ Γούλοβιτς | Άντρας | 24-08-1981 | South Park | ΤΑΧΥΔΡΟΜΕΙΟ 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 | Οικόπεδο First Street No 4 | Ιδιωτική τσάντα | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Τζάνετ Σμιθ Τζόουνς | Γυναίκα | 23-06-1980 | Melrose 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 | Sheldon Cooper | Άντρας | Τιμή NULL | Ξυλόστεγο | Τιμή NULL | 976736763 | Τιμή NULL |
| 7 | Rajesh Koothrappali | Άντρας | Τιμή NULL | Ξυλόστεγο | Τιμή NULL | 938867763 | Τιμή NULL |
| 8 | Λέσλι Γουίνκλ | Άντρας | 14-02-1984 | Ξυλόστεγο | Τιμή NULL | 987636553 | Τιμή NULL |
| 9 | Χάουαρντ Γούλοβιτς | Άντρας | 24-08-1981 | South Park | ΤΑΧΥΔΡΟΜΕΙΟ Box 4563 | 987786553 | Τιμή NULL |
Ταξινόμηση μίας στήλης κατά προεπιλεγμένη σειρά
Ας υποθέσουμε ότι θέλουμε μια λίστα που ταξινομεί το σύνολο αποτελεσμάτων ερωτήματος χρησιμοποιώντας το πεδίο φύλου. Το παρακάτω σενάριο το κάνει αυτό χωρίς να ονομάσει μια κατεύθυνση.
SELECT * FROM `members` ORDER BY `gender`;
| αριθμός μέλους | πλήρη_ονόματα | των δύο φύλων | ημερομηνία_γέννησης | φυσική_διεύθυνση | ταχυδρομική_διεύθυνση | αριθμός_επαφής | ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ |
|---|---|---|---|---|---|---|---|
| 1 | Τζάνετ Τζόουνς | Γυναίκα | 21-07-1980 | Οικόπεδο First Street No 4 | Ιδιωτική τσάντα | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Τζάνετ Σμιθ Τζόουνς | Γυναίκα | 23-06-1980 | Melrose 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 | Sheldon Cooper | Άντρας | Τιμή NULL | Ξυλόστεγο | Τιμή NULL | 976736763 | Τιμή NULL |
| 7 | Rajesh Koothrappali | Άντρας | Τιμή NULL | Ξυλόστεγο | Τιμή NULL | 938867763 | Τιμή NULL |
| 8 | Λέσλι Γουίνκλ | Άντρας | 14-02-1984 | Ξυλόστεγο | Τιμή NULL | 987636553 | Τιμή NULL |
| 9 | Χάουαρντ Γούλοβιτς | Άντρας | 24-08-1981 | South Park | ΤΑΧΥΔΡΟΜΕΙΟ 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 φιλτράρει αυτές τις ομάδες.
- ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ ακολουθίες όποιες γραμμές απομένουν.
- LIMIT τεμαχίζει τον ζητούμενο αριθμό γραμμών από την ταξινομημένη λίστα.
Επειδή η συνάρτηση ORDER BY εκτελείται μετά τα WHERE και GROUP BY αλλά πριν από το LIMIT, ένα ερώτημα όπως "τα πέντε νεότερα μέλη από το Woodcrest" εκφράζεται σε μία δήλωση.
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 είναι η σύντομη φόρμα για φθίνουσα πορεία

