Σειρά κατά σύνταξη. Ταξινόμηση δεδομένων σε SQL (ORDER BY). Ταξινόμηση επιλεγμένων δεδομένων

Σημείωση:
Όλα τα άρθρα στην τρέχουσα κατηγορία εκμάθησης SQL χρησιμοποιούν παραδείγματα και προβλήματα που βασίζονται σε μια βάση δεδομένων εκπαίδευσης.

Σύμφωνα με την πρώτη κανονική μορφή σχεσιακών βάσεων δεδομένων, η σειρά των γραμμών στους πίνακες δεν πρέπει να έχει σημασία. Αλλά στην πράξη, είναι συχνά απαραίτητο να ταξινομήσετε τις πληροφορίες πριν εμφανιστούν στην οθόνη.

Η ρήτρα ORDER BY είναι υπεύθυνη για την παραγγελία των σειρών που έχουν φορτωθεί στο ερώτημα SQL. Βρίσκεται στο τέλος του αιτήματος:

ΕΠΙΛΕΓΩ<Перечень столбцов>ΑΠΟ<Перечень таблиц>ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ<Условие сортировки>

Η συνθήκη ταξινόμησης καθορίζει τις στήλες με τις οποίες θα ταξινομηθούν οι προκύπτουσες σειρές του πίνακα:

ΠΑΡΑΓΓΕΛΙΑ ΑΠΟ στήλη 1, στήλη 2

Σειρά ταξινόμησης σε SQL

Υπάρχουν 2 επιλογές ταξινόμησης: αύξουσα και φθίνουσα. Για να υποδείξετε τον τύπο ταξινόμησης στο ερώτημα, μετά το όνομα της στήλης, υποδείξτε λέξη-κλειδί ASC (αύξουσα) ή DESC (φθίνουσα), που ορίζουν αύξουσα ή φθίνουσα σειρά, αντίστοιχα. Ο προεπιλεγμένος τύπος είναι ASC:

ORDER BY col1 -- η επόμενη ρήτρα θα είναι ισοδύναμη με ORDER BY col1 ACS

Είναι επίσης δυνατό να καθοριστεί διαφορετική σειρά για διαφορετικές στήλες:

ΠΑΡΑΓΓΕΛΙΑ ΑΝΑ στήλη 1 DESC, col2 ASC

Για να ενοποιήσετε το υλικό, λύστε το πρόβλημα στην εκπαιδευτική βάση δεδομένων:

Πρέπει να λάβετε μια λίστα με τα αναγνωριστικά εργαζομένων, ταξινομημένα ανά ομάδα σε αύξουσα σειρά και ημερομηνία πρόσληψης, από το νεότερο προς το παλαιότερο.

SELECT id, Group, Hire_date FROM Employees ORDER BY Group, Hire_date DESC

Ας συμπληρώσουμε τη σύνταξη της πρότασης SELECT με τον όρο ORDER BY (η κάθετη γραμμή σημαίνει ότι πρέπει να επιλεγεί μία από τις επιλογές):

ΕΠΙΛΟΓΗ [TableName.]ColumnName[, [TableName.]ColumnName2 ...] FROM [[DatabaseName.]SchemaName.]TableName Όνομα στήλης [, [TableName.]ColumnName2 ...]

  • Εμπρός >

Εάν σας βοήθησαν τα υλικά από το office-menu.ru, υποστηρίξτε το έργο ώστε να μπορέσω να το αναπτύξω περαιτέρω.

Ο όρος ORDER BY στην Access ταξινομεί τις εγγραφές που επιστρέφονται από ένα ερώτημα σε αύξουσα ή φθίνουσα σειρά των τιμών των καθορισμένων πεδίων.

Σύνταξη

ΕΠΙΛΕΓΩ field_list
ΑΠΟ τραπέζι
ΟΠΟΥ επιλογή_κατάσταση
[, πεδίο 2 ][, ...]]]

Δήλωση SELECTπου περιέχει την ρήτρα ORDER BY περιλαμβάνει τα ακόλουθα στοιχεία:

Σημειώσεις

Η ρήτρα ORDER BY είναι προαιρετική. Θα πρέπει να χρησιμοποιείται όταν χρειάζεται να εμφανίσετε δεδομένα σε ταξινομημένη μορφή.

Η προεπιλεγμένη σειρά ταξινόμησης είναι αύξουσα (Α έως Ω, 0 έως 9). Τα δύο παραδείγματα παρακάτω δείχνουν την ταξινόμηση των ονομάτων των εργαζομένων κατά επώνυμο.

ΕΠΙΛΟΓΗ Επώνυμο, Όνομα
ΑΠΟ Εργαζόμενους
ΠΑΡΑΓΓΕΛΙΑ ΑΠΟ Επώνυμο;
ΕΠΙΛΟΓΗ Επώνυμο, Όνομα
ΑΠΟ Εργαζόμενους
ΠΑΡΑΓΓΕΛΙΑ ΑΠΟ Επώνυμο ASC;

Για ταξινόμηση με φθίνουσα σειρά (Ζ έως Α, 9 έως 0), προσθέστε τη δεσμευμένη λέξη DESC στο τέλος κάθε πεδίου με βάση το οποίο θέλετε να ταξινομήσετε τις εγγραφές. Το παρακάτω παράδειγμα ταξινομεί τα ονόματα των εργαζομένων με φθίνουσα σειρά μισθού.

ΕΠΙΛΟΓΗ Επώνυμο, Μισθός
ΑΠΟ Εργαζόμενους
ΠΑΡΑΓΓΕΛΙΑ ΑΝΑ Μισθό DESC, Επώνυμο;

Εάν καθορίσετε ένα πεδίο που περιέχει δεδομένα υπομνήματος ή αντικείμενα OLE στον όρο ORDER BY, θα προκύψει σφάλμα. Πυρήνας DBMS Microsoft Accessδεν υποστηρίζει ταξινόμηση κατά πεδία αυτού του τύπου.

Ο όρος ORDER BY είναι συνήθως το τελευταίο στοιχείο σε μια πρόταση SQL.

Μπορείτε να συμπεριλάβετε επιπλέον πεδία στην ρήτρα ORDER BY. Οι εγγραφές ταξινομούνται πρώτα σύμφωνα με το πεδίο που καθορίζεται πρώτα στον όρο ORDER BY. Στη συνέχεια, οι εγγραφές με τις ίδιες τιμές πρώτου πεδίου ταξινομούνται με βάση το δεύτερο καθορισμένο πεδίο και ούτω καθεξής.

Κατά την ανάκτηση δεδομένων, μπορεί να είναι σημαντικό να τα αποκτήσετε σε μια συγκεκριμένη ταξινομημένη μορφή. Η ταξινόμηση μπορεί να γίνει από οποιαδήποτε πεδία με οποιονδήποτε τύπο δεδομένων. Αυτό μπορεί να είναι μια αύξουσα ή φθίνουσα ταξινόμηση για αριθμητικά πεδία. Για πεδία χαρακτήρων (κείμενο) θα μπορούσε να γίνει ταξινόμηση αλφαβητική σειρά, αν και στην ουσία είναι και ταξινόμηση κατά αύξουσα ή φθίνουσα σειρά. Μπορεί επίσης να εκτελεστεί προς οποιαδήποτε κατεύθυνση - από το Α έως το Ω και αντίστροφα από το Ω στο Α.

Η ουσία της διαδικασίας ταξινόμησης είναι να μειωθεί η ακολουθία σε μια συγκεκριμένη σειρά. Μπορείτε να μάθετε περισσότερα σχετικά με την ταξινόμηση στο άρθρο «Αλγόριθμοι ταξινόμησης». Για παράδειγμα, ταξινόμηση μιας αυθαίρετης ακολουθίας αριθμών σε αύξουσα σειρά:

2, 4, 1, 5, 9

θα πρέπει να έχει ως αποτέλεσμα μια διατεταγμένη σειρά:

1, 2, 4, 5, 6

Ομοίως, κατά την ταξινόμηση με αύξουσα σειρά τιμών συμβολοσειρών:

Ιβάνοφ Ιβάν, Πετρόφ Πετρ, Ιβάνοφ Αντρέι

το αποτέλεσμα θα πρέπει να είναι:

Ιβάνοφ Αντρέι, Ιβάνοφ Ιβάν, Πετρόφ Πετρόφ

Εδώ η γραμμή "Andrey Ivanov" έχει μετακινηθεί στην αρχή, αφού η σύγκριση των χορδών πραγματοποιείται χαρακτήρα προς χαρακτήρα. Και οι δύο γραμμές ξεκινούν με τους ίδιους χαρακτήρες "Ivanov". Δεδομένου ότι το σύμβολο "A" στη λέξη "Andrey" εμφανίζεται νωρίτερα στο αλφάβητο από το σύμβολο "I" στη λέξη "Ivan", αυτή η γραμμή θα τοποθετηθεί νωρίτερα.

Ταξινόμηση σε ένα ερώτημα SQL

Για να εκτελέσετε ταξινόμηση, πρέπει να προσθέσετε την εντολή ORDER BY στη συμβολοσειρά ερωτήματος. Μετά από αυτή την εντολή, υποδεικνύεται το πεδίο με το οποίο εκτελείται η ταξινόμηση.

Για παράδειγμα, χρησιμοποιούμε τα επιτραπέζια αγαθά:

αρ
(Αριθμός αντικειμένου)
τίτλος
(Ονομα)
τιμή
(τιμή)
1 Μανταρίνι50
2 Καρπούζι120
3 Ενας ανανάς80
4 Μπανάνα40

Τα δεδομένα εδώ είναι ήδη ταξινομημένα από τη στήλη "αριθμός". Τώρα, ας δημιουργήσουμε ένα ερώτημα που θα εμφανίζει έναν πίνακα με τα προϊόντα ταξινομημένα με αλφαβητική σειρά:

ΕΠΙΛΕΓΩ * ΑΠΟ αγαθά ΠΑΡΑΓΓΕΛΙΑ ΑΝΑ Τίτλο

SELECT * FROM goods – καθορίζει την επιλογή όλων των πεδίων από τον πίνακα αγαθών.

ORDER BY – εντολή ταξινόμησης.

τίτλος – η στήλη με την οποία θα γίνει η ταξινόμηση.

Το αποτέλεσμα της εκτέλεσης ενός τέτοιου αιτήματος είναι το εξής:

αρ τίτλος τιμή
3 Ενας ανανάς80
2 Καρπούζι120
4 Μπανάνα40
1 Μανταρίνι50

Μπορείτε επίσης να κάνετε ταξινόμηση για οποιοδήποτε από τα πεδία του πίνακα.

Κατεύθυνση ταξινόμησης

Από προεπιλογή, η εντολή ORDER BY ταξινομείται με αύξουσα σειρά. Για να ελέγξετε μη αυτόματα την κατεύθυνση ταξινόμησης, χρησιμοποιήστε τη λέξη-κλειδί ASC (αύξουσα) ή DESC (φθίνουσα) μετά το όνομα της στήλης. Έτσι, για να εμφανιστεί ο πίνακας μας με φθίνουσα σειρά τιμών, πρέπει να υποβάλετε το ερώτημα ως εξής:

ΕΠΙΛΕΓΩ * ΑΠΟ αγαθά ΠΑΡΑΓΓΕΛΙΑ ΚΑΤΑ ΤΙΜΗ ΠΕΡΙΦ

Η ταξινόμηση κατά αύξουσα τιμή θα είναι:

ΕΠΙΛΕΓΩ * ΑΠΟ εμπορεύματα ΠΑΡΑΓΓΕΛΙΑ ΚΑΤΑ ΤΙΜΗ ΕΝΥ

Ταξινόμηση ανά πολλαπλά πεδία

Η SQL επιτρέπει την ταξινόμηση ανά πολλαπλά πεδία ταυτόχρονα. Για να γίνει αυτό, μετά την εντολή ORDER BY, τα απαιτούμενα πεδία υποδεικνύονται διαχωρισμένα με κόμματα. Η σειρά του αποτελέσματος του ερωτήματος θα διαμορφωθεί με την ίδια σειρά με την οποία καθορίζονται τα πεδία ταξινόμησης.

στήλη 1 στήλη 2 στήλη 3
3 1 ντο
1 3 ντο
2 2 σι
2 1 σι
1 2 ένα
1 3 ένα
3 4 ένα

Ας ταξινομήσουμε τον πίνακα σύμφωνα με τους ακόλουθους κανόνες:

ΕΠΙΛΕΓΩ * ΑΠΟ mytable ΣΕΙΡΑ ΚΑΤΑ στήλη1 ASC, στήλη 2 DESC, στήλη 3 ASC

Εκείνοι. η πρώτη στήλη είναι αύξουσα, η δεύτερη φθίνουσα, η τρίτη και πάλι αύξουσα. Το ερώτημα θα ταξινομήσει τις σειρές κατά την πρώτη στήλη και, στη συνέχεια, χωρίς να παραβιαστεί ο πρώτος κανόνας, κατά τη δεύτερη στήλη. Στη συνέχεια, επίσης, χωρίς να παραβιάζονται οι ισχύοντες κανόνες, σύμφωνα με το τρίτο. Το αποτέλεσμα θα είναι ένα σύνολο δεδομένων όπως αυτό:

στήλη 1 στήλη 2 στήλη 3
1 3 ένα
1 3 ντο
1 2 ένα
2 2 σι
2 1 σι
3 1 ένα
3 1 ντο

Σειρά της εντολής ORDER BY σε ένα ερώτημα

Η ταξινόμηση σειρών πραγματοποιείται συνήθως μαζί με μια συνθήκη για την επιλογή δεδομένων. Η εντολή ORDER BY τοποθετείται μετά την συνθήκη επιλογής WHERE. Για παράδειγμα, επιλέγουμε προϊόντα με τιμή μικρότερη από 100 ρούβλια, ταξινομημένα κατά όνομα με αλφαβητική σειρά:

ΕΠΙΛΕΓΩ * ΑΠΟ αγαθά ΟΠΟΥ τιμή 100ΠΑΡΑΓΓΕΛΙΑ ΚΑΤΑ ΤΙΜΗ ASC

Συχνά υπάρχει ανάγκη να εμφανιστεί το αποτέλεσμα ενός ερωτήματος με μια συγκεκριμένη σειρά, για παράδειγμα, αλφαβητικά. Για το σκοπό αυτό το ΣΔΒΔ διαθέτει ειδική λειτουργία στη γλώσσα SQL – ταξινόμηση. Σε αυτή την περίπτωση, ο προγραμματιστής μπορεί να επιλέξει ποια πεδία και με ποια σειρά θα εμφανιστεί για να επιτύχει το επιθυμητό αποτέλεσμα, χωρίς να χρησιμοποιεί σοβαρές δεξιότητες προγραμματισμού.

Τι είναι η ταξινόμηση σε μια βάση δεδομένων;

Η εργασία με βάσεις δεδομένων συνδέεται συνεχώς με μεγάλο όγκο πληροφοριών που πρέπει να οργανωθούν. Επί του παρόντος, υπάρχει ένας αριθμός DBMS με ένα ευρύ φάσμα λειτουργιών, οι πιο δημοφιλείς από τις οποίες είναι η Oracle και η MS SQL. Η ταξινόμηση των πληροφοριών, ως μία από τις κύριες διαδικασίες στην εργασία με βάσεις δεδομένων, παρέχεται από μια ειδική ενσωματωμένη λειτουργία σε καθεμία από αυτές.

Η κατάταξη δεδομένων σάς επιτρέπει να απλοποιήσετε τη διαδικασία αναζήτησης και σε ορισμένες περιπτώσεις βοηθά στην επίλυση ορισμένων προβλημάτων ή στη βελτιστοποίηση της λειτουργίας του προγράμματος. Η ταξινόμηση SQL εκτελείται από ένα χωριστά επιλεγμένο πεδίο και, εάν είναι απαραίτητο, εάν υπάρχουν πανομοιότυπες τιμές στα στοιχεία αυτού του πεδίου, μπορείτε να καθορίσετε πρόσθετες παραμέτρους που καθορίζουν τη θέση των σειρών.

Εντολή ταξινόμησης

Η ταξινόμηση SQL στη βάση δεδομένων παρέχεται χρησιμοποιώντας τη συνάρτηση ORDER BY. Έτσι, όταν εξάγετε πληροφορίες από μια βάση δεδομένων, αφού καθορίσετε τις στήλες και τους πίνακες από τους οποίους θα γίνει η ανάγνωση, το ερώτημα πρέπει να καθορίσει μια εντολή ταξινόμησης και στη συνέχεια να καθορίσει το πεδίο ή τα πεδία με τα οποία θα γίνει η ταξινόμηση.

Για παράδειγμα, εάν πρέπει να λάβετε δεδομένα από τα πεδία Όνομα και Ηλικία από τον πίνακα Άτομα, ενώ εμφανίζετε το αποτέλεσμα με αλφαβητική σειρά από τη στήλη Όνομα, τότε το ακόλουθο ερώτημα θα σας βοηθήσει: ΕΠΙΛΕΞΤΕ Όνομα, Ηλικία ΑΠΟ Άτομα ΠΑΡΑΓΓΕΛΙΑ ΑΝΑ ΟΝΟΜΑ.

Πώς να ορίσετε τη σειρά ταξινόμησης;

Οι σύγχρονες συνθήκες θέτουν διάφορα καθήκοντα για τους προγραμματιστές και μερικές φορές είναι απαραίτητο να προκαθοριστεί με ποια σειρά θα εμφανίζεται το αποτέλεσμα - με φθίνουσα ή αύξουσα σειρά, με αλφαβητική σειρά ή με αντίστροφη σειρά; Και για να γίνει αυτό στην SQL, η σειρά ταξινόμησης καθορίζεται προσθέτοντας μια λέξη-κλειδί στο ερώτημα. Αφού επιλέξετε τα πεδία και τους πίνακες από τους οποίους θα ληφθούν οι επιθυμητές πληροφορίες, πρέπει να προσθέσετε ORDER BY και, στη συνέχεια, να καθορίσετε το όνομα της στήλης με την οποία θέλετε να ταξινομήσετε.

Για να πάρετε την αντίστροφη σειρά, πρέπει να καθορίσετε την παράμετρο DESC μετά το όνομα. Εάν είναι απαραίτητο να παραγγείλετε στοιχεία σύμφωνα με δύο ή περισσότερα κριτήρια, τότε οι στήλες υποδεικνύονται διαχωρισμένες με κόμμα και προτεραιότητα στην κατάταξη θα δοθεί στο πεδίο που είναι πρώτο στη λίστα. Αξίζει να σημειωθεί ότι η παράμετρος DESC προβλέπει τη διάταξη στοιχείων με αντίστροφη σειρά μόνο σε ένα πεδίο, μετά το όνομα του οποίου υποδεικνύεται αυτή η λέξη-κλειδί, επομένως, εάν είναι απαραίτητο, πρέπει να προσδιορίζεται σε όλες τις επιλεγμένες στήλες.

Εναλλακτικές μέθοδοι ταξινόμησης

Εάν δεν είναι δυνατή η χρήση της ενσωματωμένης συνάρτησης ταξινόμησης SQL, μπορείτε να γράψετε έναν από τους γνωστούς αλγόριθμους. Εάν χρειάζεται να επιτύχετε την ταχύτερη ταξινόμηση των στοιχείων, θα πρέπει να χρησιμοποιήσετε μια μέθοδο που βασίζεται στον διαχωρισμό της σειράς των στοιχείων στη μέση. Πολύ δημοφιλείς είναι επίσης οι μέθοδοι κατάταξης «φούσκα», στις οποίες δύο γειτονικά στοιχείαανταλλάξτε θέσεις σε περίπτωση λανθασμένης τοποθέτησης, "ταξινόμηση πυραμίδας", που στέλνει το μεγαλύτερο στοιχείο στο τέλος της λίστας και "ταξινόμηση εισαγωγής", που προκαθορίζει τη θέση κάθε στοιχείου με τη σειρά.

Η σύνταξη ενός αλγορίθμου μόνοι σας δεν θα αυξήσει σημαντικά την ταχύτητα ταξινόμησης, ωστόσο, θα συμβάλει στην ανάπτυξη των δεξιοτήτων προγραμματισμού και θα σας επιτρέψει επίσης να τροποποιήσετε τη διαδικασία προσαρμόζοντας το σχήμα κατάταξης σε μια συγκεκριμένη βάση δεδομένων για να βελτιώσετε την αποτελεσματικότητα του προγράμματος.

Στο μέλλον, μπορεί να χρειαστεί να ταξινομήσουμε την επιλογή μας - αλφαβητικά για κείμενο ή αύξουσα/φθίνουσα για αριθμητικές τιμές. Για τέτοιους σκοπούς σε SQLΥπάρχει ειδικό χειριστή ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ .

1. Ταξινόμηση των επιλεγμένων δεδομένων.

Ας ταξινομήσουμε ολόκληρο τον πίνακα με βάση το ποσό των πωλήσεων του προϊόντος, δηλαδή με βάση τη στήλη Ποσό.

ΕΠΙΛΕΓΩ * ΑΠΟ ΠΑΡΑΓΓΕΛΙΑ Αθροιστικού Προϊόντος ΚΑΤΑ ΠΟΣΟ

Βλέπουμε ότι το ερώτημα ταξινόμησε τις εγγραφές με αύξουσα σειρά στο πεδίο Ποσό. Είναι επιτακτική ανάγκη να ακολουθήσετε την ακολουθία των τελεστών, δηλ. χειριστής ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ πρέπει να πάει στο τέλος του αιτήματος. Διαφορετικά θα λάβετε ένα μήνυμα σφάλματος.

Επίσης χαρακτηριστικό του χειριστή ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ είναι ότι μπορεί να ταξινομήσει δεδομένα ανά πεδίο που δεν επιλέξαμε στο ερώτημα, αρκεί δηλαδή να είναι καθόλου στη βάση δεδομένων.

2. Ταξινόμηση κατά πολλά πεδία.

Τώρα ας ταξινομήσουμε το παράδειγμά μας επιπλέον κατά ένα ακόμη πεδίο. Ας είναι χωράφι Πόλη, που εμφανίζει τον τόπο πώλησης των προϊόντων.

ΕΠΙΛΕΓΩ * ΑΠΟ ΠΑΡΑΓΓΕΛΙΑ αθροιστικού προϊόντος ΚΑΤΑ ΠΟΣΟ, Πόλη

Η σειρά ταξινόμησης θα εξαρτηθεί από τη σειρά των πεδίων στο αίτημα. Δηλαδή, στην περίπτωσή μας, πρώτα τα δεδομένα θα ταξινομηθούν ανά στήλη Ποσό, και μετά από Πόλη.

3. Κατεύθυνση ταξινόμησης.

Ακόμα κι αν ο προεπιλεγμένος τελεστής ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ ταξινομεί με αύξουσα σειρά, μπορούμε επίσης να καθορίσουμε τιμές ταξινόμησης με φθίνουσα σειρά. Για να γίνει αυτό, στο τέλος κάθε πεδίου βάζουμε τον τελεστή DESC (η οποία είναι συντομογραφία της λέξης ΦΘΙΝΩΝ).

ΕΠΙΛΕΓΩ * ΑΠΟ ΠΑΡΑΓΓΕΛΙΑ αθροιστικού προϊόντος ΚΑΤΑ ΠΟΣΟ DESC , Πόλη

ΣΕ σε αυτό το παράδειγμα, αξία στο πεδίο Ποσόταξινομήθηκαν με φθίνουσα σειρά και στο χωράφι Πόλη- Αύξουσα. Χειριστής DESC ισχύει μόνο για μία στήλη, επομένως, εάν χρειάζεται, πρέπει να γράφεται μετά από κάθε πεδίο που συμμετέχει στη ταξινόμηση.