Ενσωματωμένες Λειτουργίες SQLέχει σχεδιαστεί για να διευκολύνει και να επιταχύνει την επεξεργασία δεδομένων. Η ιδιαιτερότητα είναι ότι μπορούν να προσδιοριστούν απευθείας στην έκφραση. Όλες οι ενσωματωμένες λειτουργίες μπορούν να χωριστούν υπό όρους σε ομάδες.

Μαθηματικές συναρτήσεις:

    ABS(έννοια) - επιστρέφει την απόλυτη τιμή του αριθμού.

    Γύρος(αξία, ακρίβεια) - επιστρέφει μια αριθμητική τιμή στρογγυλοποιημένη στο καθορισμένο όρισμα ακρίβειατον αριθμό των δεκαδικών ψηφίων·

    ΣΗΜΑΔΙ(έννοια) - επιστρέφει ένα μείον εάν ο αριθμός είναι αρνητικός και ένα συν διαφορετικά.

    ΕΞΟΥΣΙΑ(αξία, βαθμός) – ανεβάζει έναν αριθμό σε δύναμη.

    SQRT(έννοια) - εξάγει την τετραγωνική ρίζα ενός αριθμού.

    ΟΡΟΦΗ(έννοια)- επιστρέφει τον πλησιέστερο ακέραιο μεγαλύτερο ή ίσο της τιμής.

    - ΠΑΤΩΜΑ(έννοια)Επιστρέφει τον πλησιέστερο ακέραιο μικρότερο ή ίσο με την τιμή.

Συναρτήσεις συμβολοσειράς:

    ASCII(γραμμή) - επιστρέφει ASCIIκωδικός του πρώτου χαρακτήρα της συμβολοσειράς.

    CHΕΝΑR(αριθμός) – επιστροφή χαρακτήρα από ASCIIκώδικας;

    LEN (γραμμή) – επιστρέφει το μήκος της συμβολοσειράς σε χαρακτήρες, εξαιρουμένων των διαστημάτων στο τέλος.

    μεγάλοΤΑΚΤΟΠΟΙΗΣΗ(γραμμή)/ RTRIM(γραμμή)-αφαιρεί κενά στην αρχή/το τέλος μιας συμβολοσειράς.

    ΑΡΙΣΤΕΡΑ(συμβολοσειρά, αριθμός)/ RΔΙΚΑΙΩΜΑ(συμβολοσειρά, αριθμός)- επιστρέφει το καθορισμένο όρισμα αριθμόςτον αριθμό των χαρακτήρων στη συμβολοσειρά, ξεκινώντας από την αριστερή/δεξιά άκρη.

    ΥΠΟΤΡΟΠΗ(γραμμή, θέση, μήκος) - επιστρέφει μια υποσυμβολοσειρά του καθορισμένου μήκους από τη συμβολοσειρά, ξεκινώντας από την καθορισμένη θέση.

    ΠΙΟ ΧΑΜΗΛΑ(γραμμή) /ΑΝΩΤΕΡΟΣ(γραμμή) - επιστρέφει μια συμβολοσειρά που έχει μετατραπεί σε χαμηλότερη / κεφαλαίοκαι τα λοιπά.

Λειτουργίες για εργασία με ημερομηνίες:

    GETDATE() - Επιστρέφει μια τιμή που περιέχει την ημερομηνία και την ώρα του υπολογιστή στον οποίο εκτελείται η παρουσία του SQL Server.

    ΗΜΕΡΑ(ημερομηνία αξίας)– επιστρέφει έναν αριθμό από την καθορισμένη ημερομηνία.

    ΜΗΝΑΣ(ημερομηνία αξίας)- επιστρέφει τον αριθμό του μήνα από την καθορισμένη ημερομηνία.

    ΕΤΟΣ(ημερομηνία αξίας)- επιστρέφει την αξία του έτους από την καθορισμένη ημερομηνία.

    DATENANE( μέρος, value_date) - επιστρέφει συμβολοσειρά χαρακτήρων, που αντιπροσωπεύει το καθορισμένο μέρος ( ημέρα, μήνας, Ωρακαι τα λοιπά.) από την καθορισμένη ημερομηνία·

    DATEPART( μέρος, value_date) - επιστρέφει έναν ακέραιο που αντιπροσωπεύει το καθορισμένο τμήμα ( ημέρα, μήνας, Ωρακαι τα λοιπά.) από την καθορισμένη ημερομηνία.

Λειτουργίες μετατροπής τύπου δεδομένων

    ΕΚΜΑΓΕΙΟ (έννοια ΟΠΩΣ ΚΑΙ Τύπος δεδομένων)

    ΜΕΤΑΤΡΕΠΩ(Τύπος δεδομένων, έννοια)

Διαφωνία έννοιαστις συναρτήσεις, καθορίζει την τιμή που θα μετατραπεί.

7.3. Εντολές γλώσσας ορισμού δεδομένων

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

Δημιουργήστε έναν πίνακα

Η δημιουργία νέου πίνακα πραγματοποιείται με την εντολή ΔΗΜΙΟΥΡΓΙΑ ΤΡΑΠΕΖΙΟΥ. Η εντολή περιγράφει τη δομή του πίνακα, κάθε στήλη του πίνακα και τους περιορισμούς ακεραιότητας που πρέπει να οριστούν για τον πίνακα.

Σύνταξη εντολών:

ΔΗΜΙΟΥΡΓΙΑ ΤΡΑΠΕΖΙΟΥ table_name (( στήλη_περιγραφή |υπολογισμένο_όνομα_στήληςΟΠΩΣ ΚΑΙ έκφραση | table_level_integrity_constraints) [, ...])

Το όνομα του πίνακα είναι ένα αναγνωριστικό με μέγιστο μήκος 128 χαρακτήρων.

Ένας πίνακας μπορεί να περιέχει μια υπολογιζόμενη στήλη, οπότε η τιμή της στήλης καθορίζεται από μια έκφραση που είναι αποθηκευμένη στη δομή του πίνακα. Μια υπολογισμένη στήλη δεν μπορεί να τροποποιηθεί, επομένως δεν μπορεί να είναι NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY ή DEFAULT.

Η σύνταξη για την περιγραφή μιας στήλης πίνακα είναι:

στήλη_όνομα Τύπος δεδομένων[(το μέγεθος)]

[(ΠΡΟΕΠΙΛΟΓΗ προεπιλεγμένη_τιμή | IDENTITY [(τιμή, βήμα)]}]

[column_level_integrity_constraints]

ΠΡΟΕΠΙΛΟΓΗ - σας επιτρέπει να καθορίσετε την τιμή που έχει εκχωρηθεί στη στήλη στη νέα εγγραφή.

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

Υπάρχουν δύο ομάδες περιορισμών ακεραιότητας που χειρίζεται το DBMS:

Περιορισμοί δηλωτικής ακεραιότητας που δηλώνονται όταν δημιουργείται ή τροποποιείται ένας πίνακας.

Περιορισμοί διαδικαστικής ακεραιότητας που αντιμετωπίζονται από ενεργοποιητές.

Οι περιορισμοί ακεραιότητας της δήλωσης μπορεί να είναι περιορισμοί σε επίπεδο πίνακα και περιορισμοί σε επίπεδο πίνακα. Ένας περιορισμός σε επίπεδο στήλης ισχύει μόνο για μία στήλη. Σε κάθε περιορισμό δηλωτικής ακεραιότητας μπορεί να δοθεί ένα όνομα.

Η περιγραφή των περιορισμών σε επίπεδο στήλης έχει την ακόλουθη σύνταξη:

((ΠΡΩΤΕΡΟ ΚΛΕΙΔΙ | ΜΟΝΑΔΙΚΟ | ΟΧΙ NULL ) |ΑΝΑΦΟΡΕΣ ΞΕΝΟΥ ΚΛΕΙΔΙΟΥ table_name( στήλη_όνομα)

|ΕΛΕΓΧΟΣ boolean_expression)

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

Περιορισμός ΠΡΩΤΟΓΕΝΙΚΟ ΚΛΕΙΔΙ. Όλες οι τιμές του πρωτεύοντος κλειδιού του πίνακα πρέπει να είναι μοναδικές και όχι μηδενικές. Ένας πίνακας μπορεί να έχει μόνο ένα πρωτεύον κλειδί. Εάν είναι σύνθετο, τότε οι περιορισμοί ακεραιότητας στο πρωτεύον κλειδί ορίζονται σε επίπεδο πίνακα.

ΜΟΝΑΔΙΚΟΙ περιορισμοί μοναδικότητας τιμής στήλης. Αυτό σημαίνει ότι ένας πίνακας δεν μπορεί να έχει δύο εγγραφές που έχουν την ίδια τιμή σε αυτήν τη στήλη.

Ένας περιορισμός NOT NULL που εμποδίζει τη στήλη να αποθηκεύσει μια τιμή NULL.

Περιορισμός ξένου κλειδιού FOREIGN KEY (περιορισμός ακεραιότητας αναφοράς). Για μια στήλη που είναι ξένο κλειδί, χρησιμοποιήστε REFERENCES για να καθορίσετε το όνομα του πίνακα στον οποίο δημιουργείται η σύνδεση και το όνομα της στήλης αυτού του πίνακα με την οποία θα συνδεθεί. Ένας τέτοιος πίνακας είναι ο κύριος (γονικός) πίνακας σε σχέση με τον πίνακα που δημιουργήθηκε. Η στήλη στον κύριο πίνακα της οποίας οι τιμές συνδέονται πρέπει να έχει περιορισμό ΚΥΡΙΑΚΟ ΚΛΕΙΔΙ.

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

Η ακεραιότητα αναφοράς καθορίζει τους κανόνες για την προσθήκη και την τροποποίηση δεδομένων σε έναν πίνακα χρησιμοποιώντας ένα ξένο κλειδί και τον αντίστοιχο περιορισμό του πρωτεύοντος κλειδιού. Οι όροι ON UPDATE και ON DELETE για ένα ξένο κλειδί ορίζουν τους ακόλουθους κανόνες για την τροποποίηση των σχετικών δεδομένων:

ΚΑΜΙΑ ΕΝΕΡΓΕΙΑ - σας επιτρέπει να αλλάξετε (διαγράψετε) μόνο εκείνες τις τιμές στον κύριο πίνακα που δεν έχουν αντίστοιχες τιμές ξένων κλειδιών στον θυγατρικό πίνακα. Αυτός ο κανόνας ισχύει από προεπιλογή.

CASCADE σημαίνει ότι κάθε τιμή του ξένου κλειδιού του θυγατρικού πίνακα θα αλλάξει αυτόματα (διαγράφεται) όταν τροποποιηθεί η τιμή του πρωτεύοντος κλειδιού του γονικού πίνακα.

SET NULL σημαίνει ότι σε περίπτωση αλλαγής (διαγραφής) του πρωτεύοντος κλειδιού του γονικού πίνακα, σε όλες τις παραπομπές σειρές του θυγατρικού πίνακα, στις τιμές του ξένου κλειδιού θα εκχωρηθούν αυτόματα τιμές NULL.

SET DEFAULT σημαίνει ότι σε περίπτωση αλλαγής (διαγραφής) του πρωτεύοντος κλειδιού του γονικού πίνακα, σε όλες τις παραπομπές σειρές του θυγατρικού πίνακα, οι τιμές του ξένου κλειδιού θα εκχωρηθούν αυτόματα προεπιλεγμένες τιμές.

Ας συμπληρώσουμε το παράδειγμα της βάσης δεδομένων εκπαίδευσης «Πανεπιστήμιο», ο σχεδιασμός της οποίας εξετάστηκε στο Κεφ. 4.3 πίνακες ΠΕΙΘΑΡΧΙΑ και ΓΕΝΙΚΗ ΔΗΛΩΣΗ. Οι πίνακες 6 και 7 περιγράφουν τη λογική δομή των πινάκων.

Πίνακας 6

Λογική δομή του πληροφοριακού αντικειμένου DISCIPLINE

Πίνακας 7

Η λογική δομή του αντικειμένου πληροφοριών ΓΕΝΙΚΗ ΔΗΛΩΣΗ

Σημάδι κλειδιού

Μορφή πεδίου

Ονομα

Ακρίβεια

Αριθμός βιβλίου εγγραφής

Αριθμός εγγεγραμμένου βιβλίου μαθητή

κείμενο

Πειθαρχικός κώδικας

Πειθαρχικός κώδικας

Αριθμητικός

μακρύς ακέραιος

αριθμητικός

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

Ρύζι. 35. Σχήμα βάσης δεδομένων "Πανεπιστήμιο"

Όπως μπορείτε να δείτε από το σχήμα της βάσης δεδομένων, ο πίνακας FACULTY είναι ένας ανεξάρτητος πίνακας, επομένως δημιουργείται πρώτος. Ένα αίτημα για δημιουργία πίνακα, λαμβάνοντας υπόψη την περιγραφή της λογικής δομής στον Πίνακα. 4 (σελ. 61) θα μοιάζει με:

ΔΗΜΙΟΥΡΓΙΑ ΤΡΑΠΕΖΙ σχολή

([αριθμός τμήματος] μικροσκοπικό ΚΥΡΙΟ ΚΛΕΙΔΙ , [όνομα τμήματος] χαρ(50))

Ο πίνακας SPECIALTY είναι επίσης ανεξάρτητος, τον δημιουργούμε δεύτερο. Όταν δημιουργεί ένα ερώτημα, χρησιμοποιεί την περιγραφή της λογικής δομής στον Πίνακα. 5 (σελ. 62).

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ [ειδικότητα] (

[αριθμός ειδικότητας] int ΚΥΡΙΟ ΚΛΕΙΔΙ,

[όνομα ειδικότητας] χαρακτήρες (60),

[κόστος εκπαίδευσης] )

Ο πίνακας GROUP εξαρτάται από τον πίνακα FACULTY και SPECIALTY. Χρησιμοποιούμε τον πίνακα 3 (σελ. 61) όταν δημιουργούμε ένα ερώτημα και λαμβάνουμε υπόψη ότι οι στήλες αριθμός σχολήςκαι αριθμός ειδικότηταςείναι ξένα κλειδιά:

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ [ομάδα] (

[αριθμός ομάδας] smallint PRIMARY KEY,

[αριθμός ειδικότητας] int ειδικότητα ΞΕΝΩΝ ΚΛΕΙΔΙΩΝ ΑΝΑΦΟΡΕΣ( δωμάτιο ειδικός- Νέα)ΣΤΗ ΔΙΑΓΡΑΦΗ ΚΑΣΚΑΔΑ ΣΤΗΝ ΕΝΗΜΕΡΩΣΗ ΚΑΣΚΑΔΑ,

[αριθμός σχολής] μικροσκοπική σχολή ΞΕΝΩΝ ΚΛΕΙΔΙΩΝ ΑΝΑΦΟΡΕΣ ( δωμάτιο σχολή) ON DELETE CASCADE ON UPDADE CASCADE, [αριθμός μαθήματος] tinyint)

Ο πίνακας STUDENT είναι ένας πίνακας που εξαρτάται από την ομάδα. Με βάση τα δεδομένα του Πίνακα 2 (σελ. 60), θα κάνουμε ένα ερώτημα. Σημειώνουμε επίσης ότι η στήλη αριθμός ομάδαςείναι ξένα κλειδιά:

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ [μαθητής] (

[αριθμός ομάδας] smallint NOT NULL ΞΕΝΑ ΚΛΕΙΔΙ ΑΝΑΦΟΡΕΣ ομάδα( δωμάτιο ομάδες) ,

[επώνυμο] char(15) ΟΧΙ NULL ,

[ημερομηνία γέννησης] ημερομηνία ώρα ΟΧΙ ΜΗ ΜΗΧΑΝΟ,

[εμπορικό] bit ΟΧΙ NULL,

[όνομα εγγραφής] char(9))

Τα δεδομένα στον πίνακα ΓΕΝΙΚΟ ΑΡΧΕΙΟ εξαρτώνται από τους πίνακες ΜΑΘΗΤΩΝ και ΠΕΙΘΑΡΧΩΝ. Σε αυτόν τον πίνακα, το πρωτεύον κλειδί είναι σύνθετο και κάθε μία από τις στήλες του πρωτεύοντος κλειδιού είναι ένα ξένο κλειδί (βλ. Πίνακας 7 και Εικόνα 35).

Ας χρησιμοποιήσουμε την περιγραφή της λογικής δομής του πίνακα πειθαρχίας που δίνεται στον Πίνακα 6 και ας κάνουμε ένα ερώτημα:

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ [πειθαρχία] (

[κωδικός πειθαρχίας] int PRIMARY KEY,

[όνομα πειθαρχίας] char(50))

Τώρα μπορείτε να δημιουργήσετε ένα ερώτημα για να δημιουργήσετε έναν πίνακα γενικών δηλώσεων. Επειδή το πρωτεύον κλειδί του πίνακα είναι ένα σύνθετο κλειδί, ο περιορισμός PRIMARY KEY πρέπει να οριστεί σε επίπεδο πίνακα. Για παράδειγμα, ας θέσουμε περιορισμούς ΕΞΩΤΕΡΙΚΟΥ ΚΛΕΙΔΙΟΥ και σε επίπεδο πίνακα. Το αίτημα θα μοιάζει με αυτό:

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ [γενικό φύλλο] (

[κωδικός πειθαρχίας] int,

[αριθμός βαθμολογίου] char(8),

[βαθμός] NOT NULL , PRIMARY KEY ([κωδικός πειθαρχίας], [αριθμός βιβλίου τάξης]), ΞΕΝΟ ΚΛΕΙΔΙ ([κωδικός πειθαρχίας]) ΑΝΑΦΟΡΕΣ [ειθαρχία] ([κωδικός πειθαρχίας]), ΞΕΝΟ ΚΛΕΙΔΙ ([αριθμός βιβλίου τάξης]) ΑΝΑΦΟΡΕΣ [μαθητής ] ([αριθμός βιβλίου βαθμού]))

Αλλαγή της δομής ενός πίνακα

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

Διαγραφή πίνακα

Η απόθεση ενός πίνακα γίνεται χρησιμοποιώντας την εντολή DROP TABLE. Σύνταξη εντολών:

ΠΡΩΤΟΤΡΑΠΕΖΙ τραπέζι

Για παράδειγμα, ένα ερώτημα για τη διαγραφή του πίνακα STUDENT μοιάζει με αυτό:

ΠΤΡΑΠΕΖΙ ΠΡΟΣΤΑΣΗΣ Μαθητής

Η διαγραφή ενός πίνακα ΠΡΕΠΕΙ να λαμβάνει υπόψη τις σχέσεις που δημιουργούνται στη βάση δεδομένων μεταξύ των πινάκων. Εάν ένας άλλος πίνακας αναφέρεται στον πίνακα που διαγράφεται χρησιμοποιώντας τον περιορισμό ακεραιότητας FOREIGN KEY, τότε το DBMS δεν θα επιτρέψει τη διαγραφή του.

Δημιουργήστε ένα ευρετήριο

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

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

Ένα ευρετήριο δημιουργείται χρησιμοποιώντας την εντολή CREATE INDEX:

ΔΗΜΙΟΥΡΓΙΑ ΕΥΡΕΤΗΡΙΟΥ

όνομα_ευρετήριο ON όνομα _τραπεζάκια(στήλη [,…])

όπου UNIQUE υποδηλώνει ότι το ευρετήριο πρέπει να αποθηκεύει μόνο μοναδικές τιμές.

Ένα ευρετήριο μπορεί να δημιουργηθεί σε μία ή περισσότερες στήλες (σύνθετο ευρετήριο). Τα σύνθετα ευρετήρια σάς επιτρέπουν να διακρίνετε τις εγγραφές που έχουν την ίδια τιμή στην ίδια στήλη.

Παράδειγμα: Δημιουργήστε ένα σύνθετο ευρετήριο στον πίνακα STUDENT για τα πεδία Επώνυμο και Ημερομηνία Γέννησης

ΔΗΜΙΟΥΡΓΙΑ ΕΥΡΕΤΗΡΙΟΥ Ind_Fam ΕΝΕΡΓΟΠΟΙΗΣΗ

Φοιτητής (Επώνυμο, [Ημερομηνία Γέννησης] DESC)

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

Διαγραφή ευρετηρίου πίνακα

Η εντολή DROP αφαιρεί ένα ευρετήριο από έναν πίνακα. Η σύνταξη για την εντολή DROP για την απόθεση ενός ευρετηρίου είναι:

ΔΕΙΚΤΗΣ ΠΤΩΣΗΣ δείκτηςΕΠΙ τραπέζι

Για να μπορέσει να απορριφθεί ένα ευρετήριο από έναν πίνακα ή από τον ίδιο τον πίνακα, πρέπει να κλείσει.

Παράδειγμα: Διαγραφή ευρετηρίου Ind_Fam από τον πίνακα STUDENT

ΑΠΟΣΤΟΛΗ ΕΥΡΕΤΗΡΙΟΥ Ind_Fam ΣΤΟΝ μαθητή

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

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

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

ΕΠΙΛΟΓΗ ΣΥΝΘΗΜΑΤΟΣ (COLUMNAME) ...

Αυτή η έκφραση ακολουθείται από 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Και πάλι εργαζόμαστε με δύο πίνακες - Staff και Org. Εμφανίστε το όνομα του τμήματος και το μέγιστο ποσό προμηθειών που λαμβάνει ένας υπάλληλος στο τμήμα που ανήκει στην ομάδα τμημάτων (Division) Eastern. Χρήση JOIN (σύνδεση τραπεζιών) .

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

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

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

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

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

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

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

Η συνάρτηση SQL COUNT επιστρέφει τον αριθμό των εγγραφών σε έναν πίνακα βάσης δεδομένων. Εάν καθορίσετε SELECT COUNT(COLUMNAME) ... στο ερώτημα, τότε το αποτέλεσμα θα είναι ο αριθμός των εγγραφών χωρίς να ληφθούν υπόψη εκείνες οι εγγραφές στις οποίες η τιμή της στήλης είναι 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

Όπως οι περισσότερες γλώσσες προγραμματισμού, η SQL έχει λειτουργίες για το χειρισμό δεδομένων. Αξίζει να σημειωθεί ότι, σε αντίθεση με τις δηλώσεις SQL, οι συναρτήσεις δεν είναι τυποποιημένες για όλους τους τύπους DBMS, δηλαδή, για να εκτελούνται οι ίδιες λειτουργίες σε δεδομένα, διαφορετικά DBMS έχουν τα δικά τους ονόματα συναρτήσεων. Αυτό σημαίνει ότι ο κώδικας ερωτήματος που είναι γραμμένος σε ένα ΣΔΒΔ ενδέχεται να μην λειτουργεί σε άλλο και αυτό πρέπει να ληφθεί υπόψη στο μέλλον. Πάνω απ 'όλα, αυτό αφορά συναρτήσεις για την επεξεργασία τιμών κειμένου, τη μετατροπή τύπων δεδομένων και τον χειρισμό ημερομηνιών.

Συνήθως υποστηρίζεται DBMS τυπικό σεττύπους συναρτήσεων, και συγκεκριμένα:

  • Λειτουργίες κειμένου που χρησιμοποιούνται για την επεξεργασία κειμένου (επιλογή μέρους των χαρακτήρων στο κείμενο, προσδιορισμός του μήκους του κειμένου, μετατροπή χαρακτήρων σε κεφαλαία ή πεζά ...)
  • Αριθμητικές συναρτήσεις. Χρησιμοποιείται για εκτέλεση μαθηματικές πράξειςπάνω από αριθμούς
  • Λειτουργίες ημερομηνίας και ώρας (εκτελέστε χειρισμό ημερομηνίας και ώρας, υπολογίστε την περίοδο μεταξύ των ημερομηνιών, ελέγξτε τις ημερομηνίες για ορθότητα κ.λπ.)
  • Στατιστικές συναρτήσεις (για τον υπολογισμό του μέγιστου / ελάχιστες τιμές, μέσοι όροι, μετρώντας ποσότητες και αθροίσματα...)
  • Λειτουργίες συστήματος (παρέχουν διάφορες πληροφορίες υπηρεσίας σχετικά με το DBMS, τον χρήστη, κ.λπ.).

1. Λειτουργίες SQL για επεξεργασία κειμένου

Η υλοποίηση της SQL στο Access DBMS έχει τις ακόλουθες λειτουργίες για την επεξεργασία κειμένου:

Ας μετατρέψουμε τα ονόματα προϊόντων σε κεφαλαία χρησιμοποιώντας τη συνάρτηση UCase():

ΕΠΙΛΕΓΩ Προϊόν, UCase(Product) AS Product_UCase FROM Sumproduct

Επιλέξτε τους τρεις πρώτους χαρακτήρες στο κείμενο χρησιμοποιώντας τη συνάρτηση ΑΡΙΣΤΕΡΑ():

ΕΠΙΛΕΓΩ Προϊόν, LEFT(Product, 3) AS Product_LEFT FROM Sumproduct

2. Συναρτήσεις SQL για την επεξεργασία αριθμών

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

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

Για παράδειγμα, ας γράψουμε ένα ερώτημα για να πάρουμε την τετραγωνική ρίζα των αριθμών σε μια στήλη Ποσόχρησιμοποιώντας τη συνάρτηση SQR():

ΕΠΙΛΕΓΩ Amount, SQR(Amount) AS Amount_SQR FROM Sumproduct

3. Λειτουργίες SQL για την επεξεργασία ημερομηνιών και ωρών

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

Λίστα ορισμένων λειτουργιών για χειρισμό ημερομηνίας και ώρας Πρόσβαση στο DBMS:

Ας δούμε ένα παράδειγμα για το πώς λειτουργεί η συνάρτηση DatePart():

ΕΠΙΛΕΓΩ Date1, DatePart("m", Date1) AS Month1 FROM Sumproduct

Λειτουργία DatePart()Εχει πρόσθετη παράμετρος, που μας επιτρέπει να εμφανίζουμε το απαραίτητο μέρος της ημερομηνίας. Στο παράδειγμα, χρησιμοποιήσαμε την παράμετρο "Μ", που εμφανίζει τον αριθμό του μήνα (με τον ίδιο τρόπο μπορούμε να εμφανίσουμε το έτος - "εεεε", τέταρτο - "q", ημέρα - "ρε", εβδομάδα - "w", ώρα - "η", λεπτά - "ν", δευτερόλεπτα - "μικρό"και τα λοιπά.).

4. Στατιστικές συναρτήσεις SQL

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

Λίστα στατιστικών συναρτήσεων σε Πρόσβαση στο DBMS:

ΜΕΤΡΩ():

ΕΠΙΛΕΓΩ COUNT(*) AS Count1 FROM Sumproduct- επιστρέφει τον αριθμό όλων των σειρών στον πίνακα

ΕΠΙΛΕΓΩ COUNT(Προϊόν) AS Count2 FROM Sumproduct- επιστρέφει τον αριθμό όλων των μη κενών σειρών στο πεδίο Προϊόν

Καταργήσαμε σκόπιμα μία τιμή σε μια στήλη Προϊόνγια να δείξει τη διαφορά στον τρόπο λειτουργίας των δύο ερωτημάτων.

Παραδείγματα χρήσης συναρτήσεων ΑΘΡΟΙΣΜΑ():

ΕΠΙΛΕΓΩ SUM(Quantity) AS Sum1 FROM Sumproduct WHERE Μήνας = "Απρίλιος"

Με αυτό το αίτημα, αντικατοπτρίσαμε τον συνολικό αριθμό των προϊόντων που πωλήθηκαν τον Απρίλιο.

ΕΠΙΛΕΓΩ SUM(Ποσότητα*Ποσό) ΩΣ Άθροισμα2 ΑΠΟ άθροισμα προϊόντος

Όπως μπορείτε να δείτε, σε αθροιστικές συναρτήσεις, μπορούμε να εκτελέσουμε υπολογισμούς σε πολλαπλές στήλες χρησιμοποιώντας τυπικούς μαθηματικούς τελεστές.

Παράδειγμα χρήσης συνάρτησης MIN():

ΕΠΙΛΕΓΩ MIN (Ποσό) ΩΣ Ελάχιστο 1 FROM Sumproduct

Παράδειγμα χρήσης συνάρτησης ΜΕΓΙΣΤΗ():

ΕΠΙΛΕΓΩ MAX(Ποσό) AS Max1 FROM Sumproduct

Παράδειγμα χρήσης συνάρτησης AVG():

ΕΠΙΛΕΓΩ AVG(Ποσό) AS Μέσο 1 FROM Sumproduct

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

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

Επιπλέον, οι περισσότερες πλατφόρμες έχουν τη δυνατότητα να δημιουργούν προσαρμοσμένες λειτουργίες. Ανά Επιπλέον πληροφορίεςγια λειτουργίες που καθορίζονται από το χρήστη, ανατρέξτε στην ενότητα "ΔΗΜΙΟΥΡΓΙΑ/ΑΛΛΑΓΗ ΛΕΙΤΟΥΡΓΙΑΣ/ΔΙΑΔΙΚΑΣΙΑΣ ΔΗΛΩΣΕΙΣ"

Τύποι συναρτήσεων

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

Ντετερμινιστικές και μη ντετερμινιστικές συναρτήσεις

Οι συναρτήσεις μπορεί να είναι ντετερμινιστικές ή μη ντετερμινιστικές. Μια ντετερμινιστική συνάρτηση επιστρέφει πάντα το ίδιο αποτέλεσμα για το ίδιο σύνολο τιμών εισόδου. Οι μη ντετερμινιστικές συναρτήσεις ενδέχεται να επιστρέφουν διαφορετικά αποτελέσματα σε διαφορετικές κλήσεις, ακόμα κι αν τους δίνονται οι ίδιες τιμές εισόδου.

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

Αθροιστικές και βαθμωτές συναρτήσεις

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

Λειτουργίες παραθύρου

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

Τα βήματα αυτού του σταδίου εκμάθησης ερωτημάτων 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 [MAX LENGTH] FROM D_STAFF


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

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

SELECT SUM(D_STAFF.S_EXPERIENCE) AS [SUM], AVG(D_STAFF.S_EXPERIENCE) AS [AVERAGE], MIN(D_STAFF.S_EXPERIENCE) AS [MINIMUM], MAX(D_STAFF.S_EXPERIENCE) AS [MAXIMAS] [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ο, και πήραμε ένα σωρό επαναλαμβανόμενα «σκουπίδια». Για να αφήσουμε μόνο μοναδικές τιμές, θα χρησιμοποιήσουμε λέξη-κλειδίΔΙΑΚΡΙΤΗ.

ΕΠΙΛΕΞΤΕ ΔΙΑΚΡΙΤΗ 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 κατά πολλαπλά πεδία.