Εργασία με τη βάση δεδομένων. Λειτουργίες σε ερωτήματα SQL

Ας μάθουμε να συνοψίζουμε. Όχι, αυτά δεν είναι τα αποτελέσματα της μελέτης της SQL, αλλά τα αποτελέσματα των τιμών των στηλών των πινάκων της βάσης δεδομένων. Οι αθροιστικές συναρτήσεις SQL λειτουργούν σε τιμές στηλών για να παράγουν μια ενιαία τιμή που προκύπτει. Οι πιο συχνά χρησιμοποιούμενες συναρτήσεις συγκεντρωτικών SQL είναι SUM, MIN, MAX, AVG και COUNT. Είναι απαραίτητο να γίνει διάκριση μεταξύ δύο περιπτώσεων χρήσης συγκεντρωτικών συναρτήσεων. Πρώτον, οι αθροιστικές συναρτήσεις χρησιμοποιούνται μόνες τους και επιστρέφουν μία μόνο τιμή που προκύπτει. Δεύτερον, οι συγκεντρωτικές συναρτήσεις χρησιμοποιούνται με τον όρο SQL GROUP BY, δηλαδή ομαδοποίηση κατά πεδία (στήλες) για να ληφθούν οι προκύπτουσες τιμές σε κάθε ομάδα. Ας εξετάσουμε πρώτα περιπτώσεις χρήσης συγκεντρωτικών συναρτήσεων χωρίς ομαδοποίηση.

Λειτουργία SQL SUM

Η συνάρτηση SQL SUM επιστρέφει το άθροισμα των τιμών σε μια στήλη πίνακα βάσης δεδομένων. Μπορεί να εφαρμοστεί μόνο σε στήλες των οποίων οι τιμές είναι αριθμοί. Τα ερωτήματα SQL για τη λήψη του αθροίσματος που προκύπτει ξεκινούν ως εξής:

ΕΠΙΛΕΞΤΕ ΣΥΝΟΛΟ (COLUMN_NAME) ...

Αυτή η έκφραση ακολουθείται από FROM (TABLE_NAME) και στη συνέχεια μπορεί να καθοριστεί μια συνθήκη χρησιμοποιώντας τον όρο WHERE. Επιπλέον, το όνομα της στήλης μπορεί να προηγείται από DISTINCT, που σημαίνει ότι θα μετρώνται μόνο οι μοναδικές τιμές. Από προεπιλογή, λαμβάνονται υπόψη όλες οι τιμές (για αυτό μπορείτε να καθορίσετε συγκεκριμένα όχι DISTINCT, αλλά ALL, αλλά η λέξη ALL δεν απαιτείται).

Παράδειγμα 1.Υπάρχει μια βάση δεδομένων της εταιρείας με δεδομένα για τα τμήματα και τους υπαλλήλους της. Εκτός από όλα τα άλλα, ο πίνακας Προσωπικού έχει μια στήλη με στοιχεία για τους μισθούς των εργαζομένων. Η επιλογή από τον πίνακα μοιάζει με αυτό (για να μεγεθύνετε την εικόνα, κάντε κλικ πάνω της με το αριστερό κουμπί του ποντικιού):

Για να λάβετε το άθροισμα όλων των μισθών, χρησιμοποιήστε το ακόλουθο ερώτημα:

ΕΠΙΛΕΞΤΕ ΠΟΣΟ (Μισθός) ΑΠΟ Προσωπικό

Αυτό το ερώτημα θα επιστρέψει την τιμή 287664,63.

Και τώρα . Στις ασκήσεις αρχίζουμε ήδη να περιπλέκουμε τις εργασίες, φέρνοντάς τις πιο κοντά σε αυτές που συναντάμε στην πράξη.

Λειτουργία SQL MIN

Η συνάρτηση SQL MIN λειτουργεί επίσης σε στήλες των οποίων οι τιμές είναι αριθμοί και επιστρέφει το ελάχιστο όλων των τιμών στη στήλη. Αυτή η συνάρτηση έχει σύνταξη παρόμοια με αυτή της συνάρτησης SUM.

Παράδειγμα 3.Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στο παράδειγμα 1.

Πρέπει να μάθουμε τον κατώτατο μισθό για τους υπαλλήλους του τμήματος 42. Για να το κάνετε αυτό, γράψτε το ακόλουθο αίτημα:

Το ερώτημα θα επιστρέψει την τιμή 10505,90.

Και ξανα άσκηση για αυτολύση. Σε αυτήν και σε ορισμένες άλλες ασκήσεις, θα χρειαστείτε όχι μόνο τον πίνακα Staff, αλλά και τον πίνακα Org, που περιέχει δεδομένα σχετικά με τα τμήματα της εταιρείας:


Παράδειγμα 4.Ο πίνακας Org προστίθεται στον πίνακα Staff, που περιέχει δεδομένα για τα τμήματα της εταιρείας. Εκτυπώστε τον ελάχιστο αριθμό ετών που εργάστηκε από έναν υπάλληλο σε ένα τμήμα που βρίσκεται στη Βοστώνη.

Λειτουργία SQL MAX

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

Παράδειγμα 5.

Πρέπει να μάθουμε τον μέγιστο μισθό των υπαλλήλων του τμήματος 42. Για να το κάνετε αυτό, γράψτε το ακόλουθο αίτημα:

Το ερώτημα θα επιστρέψει την τιμή 18352,80

Είναι ώρα ασκήσεις για ανεξάρτητη λύση.

Παράδειγμα 6.Εργαζόμαστε και πάλι με δύο τραπέζια - Προσωπικό και Οργαν. Εμφανίστε το όνομα του τμήματος και τη μέγιστη αξία της προμήθειας που έλαβε ένας υπάλληλος στο τμήμα που ανήκει στην ομάδα τμημάτων (Division) Eastern. Χρήση JOIN (σύνδεση τραπεζιών) .

Λειτουργία SQL AVG

Αυτό που αναφέρεται σχετικά με τη σύνταξη για τις προηγούμενες συναρτήσεις που περιγράφηκαν ισχύουν και για τη συνάρτηση SQL AVG. Αυτή η συνάρτηση επιστρέφει τον μέσο όρο όλων των τιμών σε μια στήλη.

Παράδειγμα 7.Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στα προηγούμενα παραδείγματα.

Ας υποθέσουμε ότι θέλετε να μάθετε τη μέση προϋπηρεσία των υπαλλήλων του τμήματος 42. Για να το κάνετε αυτό, γράψτε το ακόλουθο ερώτημα:

Το αποτέλεσμα θα είναι 6,33

Παράδειγμα 8.Δουλεύουμε με ένα τραπέζι - Προσωπικό. Εμφάνιση του μέσου μισθού των εργαζομένων με 4 έως 6 χρόνια εμπειρίας.

Λειτουργία SQL COUNT

Η συνάρτηση SQL COUNT επιστρέφει τον αριθμό των εγγραφών σε έναν πίνακα βάσης δεδομένων. Εάν καθορίσετε SELECT COUNT(COLUMN_NAME) ... στο ερώτημα, το αποτέλεσμα θα είναι ο αριθμός των εγγραφών χωρίς να λαμβάνονται υπόψη εκείνες οι εγγραφές στις οποίες η τιμή της στήλης είναι NULL (μη καθορισμένη). Εάν χρησιμοποιήσετε έναν αστερίσκο ως όρισμα και ξεκινήσετε ένα ερώτημα SELECT COUNT(*) ..., το αποτέλεσμα θα είναι ο αριθμός όλων των εγγραφών (γραμμών) του πίνακα.

Παράδειγμα 9.Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στα προηγούμενα παραδείγματα.

Θέλετε να μάθετε τον αριθμό όλων των υπαλλήλων που λαμβάνουν προμήθειες. Ο αριθμός των υπαλλήλων των οποίων οι τιμές στηλών Comm δεν είναι NULL θα επιστραφεί με το ακόλουθο ερώτημα:

SELECT COUNT (Comm) FROM Staff

Το αποτέλεσμα θα είναι 11.

Παράδειγμα 10.Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στα προηγούμενα παραδείγματα.

Εάν θέλετε να μάθετε τον συνολικό αριθμό εγγραφών στον πίνακα, χρησιμοποιήστε ένα ερώτημα με έναν αστερίσκο ως όρισμα στη συνάρτηση COUNT:

ΕΠΙΛΕΞΤΕ ΑΡΙΘΜΟ (*) ΑΠΟ Προσωπικό

Το αποτέλεσμα θα είναι 17.

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

Παράδειγμα 11.Δουλεύουμε με ένα τραπέζι - Προσωπικό. Εμφάνιση του αριθμού των εργαζομένων στο τμήμα προγραμματισμού (Plains).

Συγκεντρωτικές συναρτήσεις με SQL GROUP BY

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

Παράδειγμα 12.Υπάρχει μια βάση δεδομένων της πύλης διαφημίσεων. Διαθέτει έναν πίνακα διαφημίσεων που περιέχει δεδομένα σχετικά με τις διαφημίσεις που υποβλήθηκαν για την εβδομάδα. Η στήλη Κατηγορία περιέχει δεδομένα σχετικά με μεγάλες κατηγορίες διαφημίσεων (για παράδειγμα, Real Estate) και η στήλη Ανταλλακτικά περιέχει δεδομένα σχετικά με μικρότερα τμήματα που περιλαμβάνονται στις κατηγορίες (για παράδειγμα, τα τμήματα Διαμερίσματα και εξοχικά σπίτια είναι τμήματα της κατηγορίας Real Estate). Η στήλη Μονάδες περιέχει δεδομένα για τον αριθμό των διαφημίσεων που υποβλήθηκαν και η στήλη Χρήματα περιέχει δεδομένα σχετικά με το χρηματικό ποσό που ελήφθη για την υποβολή διαφημίσεων.

ΚατηγορίαΜέροςΜονάδεςΧρήματα
ΜεταφοράΑυτοκίνητα110 17600
ΑκίνηταΔιαμερίσματα89 18690
ΑκίνηταΝτάχας57 11970
ΜεταφοράΜοτοσικλέτες131 20960
ΚΑΤΑΣΚΕΥΑΣΤΙΚΑ ΥΛΙΚΑσανίδες68 7140
Ηλεκτρολόγος Μηχανικόςτηλεοράσεις127 8255
Ηλεκτρολόγος ΜηχανικόςΨυγεία137 8905
ΚΑΤΑΣΚΕΥΑΣΤΙΚΑ ΥΛΙΚΑRegips112 11760
Ελεύθερος χρόνοςΒιβλία96 6240
ΑκίνηταΣτο σπίτι47 9870
Ελεύθερος χρόνοςΜΟΥΣΙΚΗ117 7605
Ελεύθερος χρόνοςΠαιχνίδια41 2665

Χρησιμοποιώντας τη δήλωση SQL GROUP BY, βρείτε το χρηματικό ποσό που κερδίσατε αναρτώντας διαφημίσεις σε κάθε κατηγορία. Γράφουμε το ακόλουθο αίτημα:

ΕΠΙΛΕΞΤΕ Κατηγορία, ΠΟΣΟ (Χρήματα) ΩΣ ΧΡΗΜΑΤΑ ΑΠΟ Διαφημίσεις ΟΜΑΔΑ ΑΝΑ Κατηγορία

Παράδειγμα 13.Η βάση δεδομένων και ο πίνακας είναι τα ίδια όπως στο προηγούμενο παράδειγμα.

Χρησιμοποιώντας τη δήλωση SQL GROUP BY, μάθετε ποιο τμήμα κάθε κατηγορίας είχε τις περισσότερες καταχωρίσεις. Γράφουμε το ακόλουθο αίτημα:

ΕΠΙΛΕΞΤΕ Κατηγορία, Μέρος, ΜΕΓΙΣΤΟ (Μονάδες) AS Μέγιστο ΑΠΟ Διαφημίσεις ΟΜΑΔΑ ΑΝΑ Κατηγορία

Το αποτέλεσμα θα είναι ο παρακάτω πίνακας:

Οι συνολικές και μεμονωμένες τιμές μπορούν να ληφθούν σε έναν πίνακα συνδυάζοντας αποτελέσματα ερωτημάτων χρησιμοποιώντας τον τελεστή UNION .

Σχεσιακές βάσεις δεδομένων και γλώσσα SQL

Πώς μπορώ να μάθω τον αριθμό των μοντέλων Η/Υ που παράγονται από έναν συγκεκριμένο προμηθευτή; Πώς να προσδιορίσετε τη μέση τιμή υπολογιστών με τα ίδια τεχνικά χαρακτηριστικά; Αυτές και πολλές άλλες ερωτήσεις που σχετίζονται με ορισμένες στατιστικές πληροφορίες μπορούν να απαντηθούν χρησιμοποιώντας τελικές (συγκεντρωτικές) συναρτήσεις. Το πρότυπο παρέχει τις ακόλουθες συγκεντρωτικές συναρτήσεις:

Όλες αυτές οι συναρτήσεις επιστρέφουν μία μόνο τιμή. Ταυτόχρονα, οι λειτουργίες COUNT, MINΚαι ΜΕΓΙΣΤΗισχύει για οποιονδήποτε τύπο δεδομένων, ενώ ΑΘΡΟΙΣΜΑΚαι AVGχρησιμοποιούνται μόνο για αριθμητικά πεδία. Διαφορά μεταξύ λειτουργίας ΜΕΤΡΩ(*)Και ΜΕΤΡΩ(<имя поля>) είναι ότι το δεύτερο δεν λαμβάνει υπόψη τιμές NULL κατά τον υπολογισμό.

Παράδειγμα. Βρείτε την ελάχιστη και τη μέγιστη τιμή για προσωπικούς υπολογιστές:

Παράδειγμα. Βρείτε τον διαθέσιμο αριθμό υπολογιστών που παράγονται από τον κατασκευαστή Α:

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

Παράδειγμα. Βρείτε τον αριθμό των διαθέσιμων διαφορετικών μοντέλων που παράγονται από τον κατασκευαστή A. Το ερώτημα είναι παρόμοιο με το προηγούμενο, στο οποίο έπρεπε να προσδιοριστεί ο συνολικός αριθμός μοντέλων που παράγονται από τον κατασκευαστή A. Εδώ πρέπει επίσης να βρείτε τον αριθμό των διαφορετικών μοντέλων στο το τραπέζι υπολογιστή (δηλαδή, αυτά που είναι διαθέσιμα προς πώληση).

Για να διασφαλιστεί ότι χρησιμοποιούνται μόνο μοναδικές τιμές κατά τη λήψη στατιστικών δεικτών, όταν όρισμα συγκεντρωτικών συναρτήσεωνμπορεί να χρησιμοποιηθεί DISTINCT παράμετρος. Αλλο παράμετρος ALLείναι η προεπιλογή και προϋποθέτει ότι μετρώνται όλες οι επιστρεφόμενες τιμές στη στήλη. Χειριστής,

Εάν πρέπει να λάβουμε τον αριθμό των μοντέλων Η/Υ που παράγονται Ολοικατασκευαστή, θα χρειαστεί να χρησιμοποιήσετε ΟΜΑΔΑ ΑΠΟ ρήτρα, ακολουθώντας συντακτικά μετά WHERE ρήτρες.

ΟΜΑΔΑ ΑΠΟ ρήτρα

ΟΜΑΔΑ ΑΠΟ ρήτραχρησιμοποιείται για τον καθορισμό ομάδων συμβολοσειρών εξόδου στις οποίες μπορούν να εφαρμοστούν συγκεντρωτικές συναρτήσεις (COUNT, MIN, MAX, AVG και SUM). Εάν λείπει αυτή η ρήτρα και χρησιμοποιούνται συγκεντρωτικές συναρτήσεις, τότε όλες οι στήλες με ονόματα που αναφέρονται ΕΠΙΛΕΓΩ, πρέπει να περιλαμβάνεται σε αθροιστικές συναρτήσεις, και αυτές οι συναρτήσεις θα εφαρμοστούν σε ολόκληρο το σύνολο σειρών που ικανοποιούν το κατηγόρημα του ερωτήματος. Διαφορετικά, όλες οι στήλες της λίστας SELECT Δεν περιλαμβάνονταιπρέπει να καθοριστούν συνολικά οι συναρτήσεις στην ρήτρα GROUP BY. Ως αποτέλεσμα, όλες οι σειρές ερωτημάτων εξόδου χωρίζονται σε ομάδες που χαρακτηρίζονται από τους ίδιους συνδυασμούς τιμών σε αυτές τις στήλες. Μετά από αυτό, θα εφαρμοστούν συγκεντρωτικές συναρτήσεις σε κάθε ομάδα. Λάβετε υπόψη ότι για το GROUP BY όλες οι NULL τιμές αντιμετωπίζονται ως ίσες, δηλ. κατά την ομαδοποίηση με ένα πεδίο που περιέχει τιμές NULL, όλες αυτές οι σειρές θα εμπίπτουν σε μία ομάδα.
Αν εάν υπάρχει ρήτρα GROUP BY, στον όρο SELECT χωρίς συγκεντρωτικές συναρτήσεις, τότε το ερώτημα θα επιστρέψει απλώς μία σειρά από κάθε ομάδα. Αυτή η δυνατότητα, μαζί με τη λέξη-κλειδί DISTINCT, μπορεί να χρησιμοποιηθεί για την εξάλειψη των διπλότυπων σειρών σε ένα σύνολο αποτελεσμάτων.
Ας δούμε ένα απλό παράδειγμα:
SELECT μοντέλο, COUNT(model) AS Qty_model, AVG(price) AS Avg_price
ΑΠΟ Η/Υ
GROUP BY μοντέλο?

Σε αυτό το αίτημα, για κάθε μοντέλο Η/Υ καθορίζεται ο αριθμός και το μέσο κόστος τους. Όλες οι σειρές με την ίδια τιμή μοντέλου σχηματίζουν μια ομάδα και η έξοδος του SELECT υπολογίζει τον αριθμό των τιμών και τις μέσες τιμές τιμής για κάθε ομάδα. Το αποτέλεσμα του ερωτήματος θα είναι ο παρακάτω πίνακας:
μοντέλο Qty_model Μέση_τιμή
1121 3 850.0
1232 4 425.0
1233 3 843.33333333333337
1260 1 350.0

Εάν το SELECT είχε στήλη ημερομηνίας, τότε θα ήταν δυνατός ο υπολογισμός αυτών των δεικτών για κάθε συγκεκριμένη ημερομηνία. Για να το κάνετε αυτό, πρέπει να προσθέσετε την ημερομηνία ως στήλη ομαδοποίησης και, στη συνέχεια, θα υπολογιστούν οι συγκεντρωτικές συναρτήσεις για κάθε συνδυασμό τιμών (μοντέλο-ημερομηνία).

Υπάρχουν αρκετά συγκεκριμένα κανόνες για την εκτέλεση συγκεντρωτικών λειτουργιών:

  • Εάν ως αποτέλεσμα του αιτήματος δεν ελήφθησαν σειρές(ή περισσότερες από μία σειρές για μια δεδομένη ομάδα), τότε δεν υπάρχουν δεδομένα πηγής για τον υπολογισμό οποιασδήποτε από τις συγκεντρωτικές συναρτήσεις. Σε αυτήν την περίπτωση, το αποτέλεσμα των COUNT συναρτήσεων θα είναι μηδέν και το αποτέλεσμα όλων των άλλων συναρτήσεων θα είναι NULL.
  • Διαφωνίααθροιστική συνάρτηση δεν μπορεί να περιέχει συγκεντρωτικές συναρτήσεις(συνάρτηση από συνάρτηση). Εκείνοι. σε ένα ερώτημα είναι αδύνατο, ας πούμε, να ληφθεί το μέγιστο των μέσων τιμών.
  • Το αποτέλεσμα της εκτέλεσης της συνάρτησης COUNT είναι ακέραιος αριθμός(ΑΚΕΡΑΙΟΣ ΑΡΙΘΜΟΣ). Άλλες συγκεντρωτικές συναρτήσεις κληρονομούν τους τύπους δεδομένων των τιμών που επεξεργάζονται.
  • Εάν η συνάρτηση SUM παράγει ένα αποτέλεσμα που είναι μεγαλύτερο από τη μέγιστη τιμή του χρησιμοποιούμενου τύπου δεδομένων, λάθος.

Έτσι, εάν το αίτημα δεν περιέχει ΟΜΑΔΑ ΑΝΑ ρήτρες, Οτι αθροιστικές συναρτήσειςσυμπεριλαμβανεται σε ρήτρα SELECT, εκτελούνται σε όλες τις σειρές ερωτημάτων που προκύπτουν. Εάν το αίτημα περιέχει ΟΜΑΔΑ ΑΠΟ ρήτρα, κάθε σύνολο σειρών που έχει τις ίδιες τιμές μιας στήλης ή μιας ομάδας στηλών που καθορίζονται σε ΟΜΑΔΑ ΑΠΟ ρήτρα, συγκροτεί μια ομάδα και αθροιστικές συναρτήσειςεκτελούνται για κάθε ομάδα ξεχωριστά.

ΕΧΕΙ προσφορά

Αν ρήτρα WHEREορίζει ένα κατηγόρημα για το φιλτράρισμα σειρών, στη συνέχεια ΕΧΕΙ προσφοράισχύει μετά την ομαδοποίησηγια να ορίσετε ένα παρόμοιο κατηγόρημα που φιλτράρει ομάδες κατά τιμές αθροιστικές συναρτήσεις. Αυτή η ρήτρα είναι απαραίτητη για την επικύρωση των τιμών που λαμβάνονται χρησιμοποιώντας αθροιστική συνάρτησηόχι από μεμονωμένες σειρές της πηγής εγγραφής που ορίζεται στο Ρήτρα ΑΠΟ, και από ομάδες τέτοιων γραμμών. Επομένως, ένας τέτοιος έλεγχος δεν μπορεί να περιληφθεί ρήτρα WHERE.

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

Βήμα 15. Λειτουργίες SUM, AVG, MIN, MAX, COUNT…

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

ΕΠΙΛΕΞΤΕ AVG(D_STAFF.S_EXPERIENCE) ΩΣ [ΜΕΣΗ ΕΜΠΕΙΡΙΑ ΕΡΓΑΖΟΜΕΝΩΝ] ΑΠΟ D_STAFF

Λειτουργία SQL AVG.

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

Οι συναρτήσεις που αναφέρονται παραπάνω χρησιμοποιούν ολόκληρο το αποτέλεσμα του ερωτήματος για να καθορίσουν την τιμή τους. Τέτοιες συναρτήσεις ονομάζονται σύνολο . Επίσης, υπάρχει ένας αριθμός συναρτήσεων των οποίων τα ορίσματα δεν είναι όλες οι τιμές μιας στήλης που ορίζονται στο αίτημα, αλλά κάθε μεμονωμένη τιμή κάθε μεμονωμένης γραμμής του αποτελέσματος. Ένα παράδειγμα μιας τέτοιας συνάρτησης είναι η συνάρτηση SQL για τον υπολογισμό του μήκους ενός πεδίου κειμένου LEN:

SELECT S_NAME, LEN(D_STAFF.S_NAME) AS [LENGTH] FROM D_STAFF


Μπορεί να χρησιμοποιηθεί υπέρθεση συναρτήσεων SQLόπως φαίνεται παρακάτω και υπολογίστε τη μέγιστη τιμή μήκους του πεδίου S_NAME.

SELECT MAX(LEN(D_STAFF.S_NAME)) AS [MAXIMUM LENGTH] FROM D_STAFF


Συνάρτηση SQL MAX.

Λοιπόν, εν κατακλείδι, όλα μαζί.

SELECT SUM(D_STAFF.S_EXPERIENCE) ΩΣ [SUM], AVG(D_STAFF.S_EXPERIENCE) AS [AVERAGE], MIN(D_STAFF.S_EXPERIENCE) AS [MINIMUM], MAX(D_STAFF.S_EXPERIENCE) AS [COUNT*UMAS] [NUMBER OF RECORDS], MAX(LEN(D_STAFF.S_NAME)) AS [MAXIMUM LENGTH] FROM D_STAFF


Ένα παράδειγμα χρήσης συγκεντρωτικών συναρτήσεων SQL.

Παρατηρήστε το όρισμα στη συνάρτηση COUNT. Καθόρισα το (*) ως επιχείρημα επειδή θέλω να λάβω τον συνολικό αριθμό εγγραφών. Εάν καθορίσετε, για παράδειγμα, COUNT(S_NAME), το αποτέλεσμα θα είναι ο αριθμός των μη κενών τιμών S_NAME (S_NAME ΔΕΝ ΕΙΝΑΙ NULL). Θα ήταν δυνατό να γράψετε COUNT(DISTINCT S_NAME) και να λάβετε τον αριθμό των μοναδικών τιμών S_NAME, αλλά η MS Access, δυστυχώς, δεν υποστηρίζει αυτήν την επιλογή. Στο παράδειγμά μας, COUNT(S_NAME) και COUNT(*) δίνουν ακριβώς το ίδιο αποτέλεσμα.

Βήμα 16: Μετατροπή κειμένου

Συχνά, οι τιμές κειμένου συμπληρώνονται διαφορετικά από τους χρήστες λογισμικού: ποιος γράφει το πλήρες όνομα. με κεφαλαίο, ποιος δεν είναι? Κάποιοι γράφουν τα πάντα με κεφαλαία γράμματα. Πολλές φόρμες αναφοράς απαιτούν μια ενιαία προσέγγιση, και όχι μόνο τα έντυπα αναφοράς. Για την επίλυση αυτού του προβλήματος, η SQL έχει δύο συναρτήσεις UCASE και LCASE. Ένα παράδειγμα ενός αιτήματος και το αποτέλεσμα της επεξεργασίας του φαίνονται παρακάτω:

SELECT UCASE(D_STAFF.S_NAME) AS , LCASE(D_STAFF.S_NAME) AS FROM D_STAFF


Λειτουργίες SQL UCASE και LCASE.

Βήμα 17. SQL και εργασία με συμβολοσειρές

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

ΕΠΙΛΟΓΗ UCASE(MID(P_NAME,3,5)) FROM D_PROFILE


Υπέρθεση συναρτήσεων SQL UCASE και MID.

«Κόψαμε» 5 χαρακτήρες ο καθένας από τις τιμές του ονόματος προφίλ, ξεκινώντας από τον 3ο, και καταλήξαμε με ένα σωρό επαναλαμβανόμενα «σκουπίδια». Για να αφήσουμε μόνο μοναδικές τιμές, θα χρησιμοποιήσουμε τη λέξη-κλειδί DISTINCT.

ΕΠΙΛΕΞΤΕ ΔΙΑΚΡΙΤΗ UCASE(MID(P_NAME,3,5)) ΩΣ ΑΠΟ D_PROFILE


Επιλογή μοναδικών συγκεντρωτικών τιμών συνάρτησης.

Μερικές φορές πρέπει να χρησιμοποιήσετε εκφράσεις με τη συνάρτηση LEN ως ορίσματα στη συνάρτηση MID. Στο επόμενο παράδειγμα, εμφανίζουμε ήδη τους τελευταίους 5 χαρακτήρες στα ονόματα των προφίλ.

ΕΠΙΛΟΓΗ UCASE(MID(P_NAME,LEN(P_NAME)-4,5)) FROM D_PROFILE


Χρησιμοποιώντας τη συνάρτηση SQL LEN.

Βήμα 18. Χρήση συναρτήσεων SQL στα κριτήρια επιλογής εγγραφών. ΕΧΟΝΤΑΣ χειριστή

Έχοντας κατανοήσει τις λειτουργίες, τίθεται σχεδόν αμέσως το ερώτημα: πώς μπορούν να χρησιμοποιηθούν στα κριτήρια επιλογής εγγραφών; Ορισμένες συναρτήσεις, συγκεκριμένα αυτές που δεν είναι συγκεντρωτικές συναρτήσεις, είναι αρκετά εύχρηστες. Εδώ, για παράδειγμα, είναι μια λίστα υπαλλήλων των οποίων το πλήρες όνομα. περισσότερους από 25 χαρακτήρες.

SELECT S_NAME FROM D_STAFF WHERE LEN(D_STAFF.S_NAME) > 25


Χρήση της συνάρτησης μη συγκεντρωτικού LEN σε συνθήκες ερωτήματος SQL.

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

SELECT S_POSITION FROM D_STAFF WHERE COUNT(S_POSITION)>1

Για τέτοιες περιπτώσεις, η λέξη-κλειδί HAVING εισήχθη στην SQL, η οποία θα μας βοηθήσει να λύσουμε το πρόβλημα με τις θέσεις και τους υπαλλήλους.

ΕΠΙΛΟΓΗ S_POSITION ΑΠΟ ΟΜΑΔΑ D_STAFF BY S_POSITION HAVING COUNT(S_POSITION)>1


Χρήση συγκεντρωτικών συναρτήσεων σε συνθήκες ερωτήματος SQL.

Βήμα 19. Ομαδοποίηση δεδομένων σε αποτελέσματα ερωτήματος SQL χρησιμοποιώντας τον τελεστή GROUP BY

Ο τελεστής GROUP BY απαιτείται για να ομαδοποιήσει τις τιμές των συναρτήσεων συγκεντρωτικών με τις τιμές των σχετικών πεδίων τους. Χρειάζεται όταν θέλουμε να χρησιμοποιήσουμε την τιμή συγκεντρωτικής συνάρτησης στα κριτήρια επιλογής εγγραφών (προηγούμενο βήμα). Χρειάζεται επίσης όταν θέλουμε να συμπεριλάβουμε την τιμή μιας συγκεντρωτικής συνάρτησης στο αποτέλεσμα του ερωτήματος. Αλλά στην απλούστερη μορφή της, η ομαδοποίηση ισοδυναμεί με την επισήμανση των μοναδικών τιμών μιας στήλης. Ας δούμε ένα παράδειγμα αίτησης.

ΕΠΙΛΟΓΗ S_POSITION ΑΠΟ D_STAFF


Και αυτές είναι δύο επιλογές που σας επιτρέπουν να εμφανίζετε μόνο μοναδικές τιμές S_POSITION.

ΕΠΙΛΟΓΗ S_POSITION ΑΠΟ ΟΜΑΔΑ D_STAFF BY S_POSITION

ΕΠΙΛΕΞΤΕ ΔΙΑΚΡΙΤΗ ΘΕΣΗ ΑΠΟ D_STAFF


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

ΕΠΙΛΕΞΤΕ PROFILE_ID ΩΣ , COUNT(PROFILE_ID) ΩΣ [ΑΡΙΘΜΟΣ ΕΓΓΡΑΦΩΝ] ΑΠΟ D_STAFF_PROFILE GROUP BY PROFILE_ID


Χρήση συνάρτησης συγκεντρωτικής SQL μαζί με ομαδοποίηση.

Ο τελεστής GROUP BY σας επιτρέπει επίσης να ομαδοποιήσετε το αποτέλεσμα ενός ερωτήματος με περισσότερα από ένα πεδία, παραθέτοντας τα διαχωρισμένα με κόμματα. Ελπίζω ότι μετά από όλα τα παραπάνω, δεν χρειάζονται επιπλέον σχόλια για το αποτέλεσμα της τελευταίας ερώτησης.

ΕΠΙΛΕΞΤΕ S.S_POSITION AS , S.S_NAME AS [EMPLOYEE], COUNT(SP.STAFF_ID) AS [ΑΡΙΘΜΟΣ ΑΡΧΕΙΩΝ ΣΤΟΝ ΠΙΝΑΚΑ S_STAFF_PROFILE] FROM D_STAFF S, D_STAFF_PROFILE SP WHERE S.XD_IID, SPROUPSTAFFYS. S_NAME


Ομαδοποίηση σειρών αποτελεσμάτων ερωτήματος SQL κατά πολλά πεδία.

mob_info