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

Το διαδικτυακό λεξικό του Merriam-Webster ορίζει βάση δεδομένωνΠως μεγάλο σύνολο δεδομένων, οργανωμένο με ιδιαίτερο τρόπο για παρέχοντας γρήγορη αναζήτησηΚαι εξαγωγή δεδομένων(για παράδειγμα, χρησιμοποιώντας υπολογιστή).

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

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

Τύποι βάσεων δεδομένων

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

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

Βάση δεδομένων με δομή δικτύου

Το μοντέλο δικτύου εισάγει δείκτες σε βάσεις δεδομένων - εγγραφές που περιέχουν συνδέσμους προς άλλες εγγραφές. Έτσι, μπορείτε να αποθηκεύσετε μια εγγραφή για κάθε πελάτη. Κάθε πελάτης έχει κάνει πολλές παραγγελίες σε εμάς για μια χρονική περίοδο. Τα δεδομένα είναι διατεταγμένα έτσι ώστε η εγγραφή πελάτη να περιέχει έναν δείκτη σε μία ακριβώς εγγραφή παραγγελίας. Κάθε εγγραφή παραγγελίας περιέχει δεδομένα για τη συγκεκριμένη παραγγελία και έναν δείκτη σε μια άλλη εγγραφή παραγγελίας. Στη συνέχεια, στην εφαρμογή μετατροπέα νομισμάτων που δουλέψαμε νωρίτερα, θα μπορούσαμε να χρησιμοποιήσουμε μια δομή που θα μοιάζει κάπως έτσι (Εικ. 1.):

Ρύζι. 1. Δομή εγγραφών μετατροπέων νομισμάτων

Τα δεδομένα φορτώνονται και λαμβάνεται μια συνδεδεμένη (εξ ου και το όνομα του μοντέλου – δικτύου) λίστα για τις γλώσσες (Εικ. 2):

Ρύζι. 2. Συνδεδεμένη λίστα

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

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

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

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

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

Μοντέλο ιεραρχικής βάσης δεδομένων

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

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

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

Μοντέλο σχεσιακής βάσης δεδομένων

Ένα τεράστιο άλμα στην ανάπτυξη της θεωρίας των συστημάτων διαχείρισης βάσεων δεδομένων σημειώθηκε το 1970, όταν δημοσιεύτηκε η έκθεση του E. F. Codd «A Relational Model of Data for Large Shared Data Banks».», δείτε αυτόν τον σύνδεσμο. Αυτό το πραγματικά επαναστατικό έργο εισήγαγε την έννοια των σχέσεων και έδειξε πώς οι πίνακες θα μπορούσαν να χρησιμοποιηθούν για την αναπαράσταση γεγονότων που δημιουργούν σχέσεις με και επομένως αποθηκεύουν δεδομένα σχετικά με αντικείμενα του «πραγματικού κόσμου».

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

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

("Γαλλία", "FRF", 6.56) ("Βέλγιο", "BEF", 40.1)

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

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

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

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

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

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

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

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

Γλώσσες ερωτήσεων SQL και άλλες

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

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

Ένας από τους πρώτους που εφάρμοσε τη γλώσσα ερωτημάτων ήταν η QUEL· χρησιμοποιήθηκε στη βάση δεδομένων Ingres που δημιουργήθηκε στα τέλη της δεκαετίας του 1970. Μια άλλη γλώσσα ερωτημάτων που χρησιμοποιούσε διαφορετική μέθοδο ονομαζόταν QBE (Query By Example). Περίπου την ίδια εποχή, μια ομάδα που εργαζόταν στην IBM Research ανέπτυξε τη δομημένη γλώσσα ερωτημάτων (SQL), ένα όνομα που συνήθως προφέρεται "sequel".

SQL- Αυτό τυπική γλώσσα ερωτημάτων, ο πιο συνηθισμένος ορισμός του είναι το πρότυπο ISO/IEC 9075:1992, «Τεχνολογία Πληροφοριών - Γλώσσες Βάσης Δεδομένων - SQL» (ή, πιο απλά, SQL92) και το αμερικανικό αντίστοιχο ANSI X3.135-1992, το οποίο διαφέρει από το πρώτο μόνο σε λίγα εξώφυλλα. Αυτά τα πρότυπα αντικατέστησαν την προηγουμένως υπάρχουσα SQL89. Στην πραγματικότητα, υπάρχει ένα μεταγενέστερο πρότυπο, το SQL99, αλλά δεν έχει γίνει ακόμη ευρέως διαδεδομένο και οι περισσότερες ενημερώσεις δεν επηρεάζουν τη βασική γλώσσα SQL.

Υπάρχουν τρία επίπεδα συμμόρφωσης SQL92: Entry SQL, Intermediate SQL και Full SQL. Το πιο συνηθισμένο είναι το επίπεδο "Είσοδος" και το PostgreSQL πλησιάζει πολύ σε αυτό, αν και υπάρχουν κάποιες μικρές διαφορές. Οι προγραμματιστές διορθώνουν μικρές παραλείψεις και με κάθε νέα έκδοση η PostgreSQL πλησιάζει όλο και περισσότερο το πρότυπο.

Υπάρχουν τρεις τύποι εντολών στην SQL:

  • Γλώσσα χειρισμού δεδομένων (DML)- γλώσσα χειρισμού δεδομένων. Αυτό είναι το μέρος της SQL που χρησιμοποιείται το 90% του χρόνου. Αποτελείται από εντολές για προσθήκη, διαγραφή, ενημέρωση και το πιο σημαντικό για ανάκτηση δεδομένων από τη βάση δεδομένων.
  • Γλώσσα ορισμού δεδομένων (DDL)- γλώσσα ορισμού δεδομένων. Αυτές είναι εντολές για τη δημιουργία πινάκων και τη διαχείριση άλλων πτυχών της βάσης δεδομένων που είναι δομημένες σε υψηλότερο επίπεδο από τα δεδομένα που σχετίζονται με αυτές.
  • Γλώσσα ελέγχου δεδομένων (DCL)- γλώσσα διαχείρισης δεδομένων

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

SQL

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

Ωστόσο, η πίεση της αγοράς αναγκάζει τους πωλητές βάσεων δεδομένων να δημιουργήσουν διαφορετικά προϊόντα. Έτσι εμφανίστηκαν πολλές διάλεκτοι της SQL, κάτι που διευκολύνθηκε από το γεγονός ότι το πρότυπο που περιγράφει τη γλώσσα δεν ορίζει εντολές για πολλές εργασίες διαχείρισης βάσεων δεδομένων, οι οποίες είναι απαραίτητο και πολύ σημαντικό στοιχείο κατά τη χρήση της βάσης δεδομένων στον πραγματικό κόσμο. Επομένως, υπάρχουν διαφορές μεταξύ των διαλέκτων SQL που υιοθετούνται από (για παράδειγμα) Oracle, SQL Server και PostgreSQL.

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

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

CREATE TABLE item (item_id serial, περιγραφή char(64) not null, cost_price numeric(7,2), sell_price numeric(7,2));

Εδώ προσδιορίσαμε ότι ο πίνακας χρειάζεται ένα αναγνωριστικό για να λειτουργεί ως πρωτεύον κλειδί και ότι πρέπει να δημιουργηθεί αυτόματα από το σύστημα διαχείρισης βάσης δεδομένων. Το αναγνωριστικό είναι τύπου σειριακό, που σημαίνει ότι κάθε φορά που προστίθεται ένα νέο στοιχείο στοιχείου στην ακολουθία, θα δημιουργείται ένα νέο, μοναδικό item_id. Η περιγραφή είναι ένα χαρακτηριστικό κειμένου που αποτελείται από 64 χαρακτήρες. Η τιμή κόστους (κόστος_τιμή) και η τιμή πώλησης (τιμή_πώλησης) ορίζονται ως αριθμοί κινητής υποδιαστολής με δύο δεκαδικά ψηφία.

Τώρα χρησιμοποιούμε SQL για να συμπληρώσουμε τον πίνακα που δημιουργήθηκε πρόσφατα. Δεν υπάρχει τίποτα περίπλοκο σε αυτό:

INSERT INTO item(description, cost_price, sell_price) values("Fan Small", 9.23, 15.75); INSERT INTO item(description, cost_price, sell_price) values("Fan Large", 13.36, 19.95); INSERT INTO item(description, cost_price, sell_price) values("Οδοντόβουρτσα", 0,75, 1,45);

Η βάση της SQL είναι η δήλωση SELECT. Χρησιμοποιείται για τη δημιουργία συνόλων αποτελεσμάτων - ομάδων εγγραφών (ή χαρακτηριστικών εγγραφών) που πληρούν κάποιο κριτήριο. Αυτά τα κριτήρια μπορεί να είναι αρκετά περίπλοκα. Τα σύνολα αποτελεσμάτων μπορούν να χρησιμοποιηθούν ως στόχοι για αλλαγές που γίνονται από μια δήλωση UPDATE ή διαγραφές που γίνονται από μια δήλωση DELETE.

Ακολουθούν μερικά παραδείγματα χρήσης της δήλωσης SELECT:

SELECT * FROM πελάτη, orderinfo WHERE orderinfo.customer_id = customer.customer_id GROUP BY customer_id SELECT customer.title, customer.fname, customer.lname, COUNT(orderinfo.orderinfo_id) AS "Αριθμός παραγγελιών" FROM πελάτη, πληροφορίες παραγγελίας WHERE customer.customer_id = orderinfo.customer_id GROUP BY customer.title, customer.fname, customer.lname

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

Για παράδειγμα, η βάση δεδομένων PostgreSQL παρέχει διάφορους τρόπους πρόσβασης σε δεδομένα, ιδίως μπορείτε:

  • Χρησιμοποιήστε μια εφαρμογή κονσόλας για την εκτέλεση εντολών SQL
  • Απευθείας ενσωμάτωση SQL στην εφαρμογή
  • Χρησιμοποιήστε κλήσεις συναρτήσεων API (Application Programming Interfaces) για να προετοιμάσετε και να εκτελέσετε εντολές SQL, να προβάλετε σύνολα αποτελεσμάτων και να ενημερώσετε δεδομένα από πολλές διαφορετικές γλώσσες προγραμματισμού
  • Χρησιμοποιήστε έμμεση πρόσβαση στα δεδομένα βάσης δεδομένων PostgreSQL χρησιμοποιώντας ένα πρόγραμμα οδήγησης ODBC (Σύνδεση ανοιχτής βάσης δεδομένων) ή JDBC (Συνδεσιμότητα βάσης δεδομένων Java) ή μια τυπική βιβλιοθήκη, όπως το DBI για την Perl

Συστήματα διαχείρισης βάσεων δεδομένων

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

  • Δημιουργία βάσης δεδομένων.Ορισμένα συστήματα διαχειρίζονται ένα μεγάλο αρχείο και δημιουργούν μία ή περισσότερες βάσεις δεδομένων μέσα σε αυτό, άλλα μπορεί να περιλαμβάνουν πολλά αρχεία λειτουργικό σύστημαή να εφαρμόσετε απευθείας πρόσβαση χαμηλού επιπέδου σε διαμερίσματα δίσκου. Οι χρήστες και οι προγραμματιστές δεν χρειάζεται να ανησυχούν για τη δομή χαμηλού επιπέδου τέτοιων αρχείων, καθώς όλη η απαραίτητη πρόσβαση παρέχεται από το DBMS.
  • Παρέχει ένα μέσο για την εκτέλεση ερωτημάτων και ενημερώσεων.Το DBMS πρέπει να παρέχει τη δυνατότητα αναζήτησης δεδομένων που ικανοποιούν κάποιο κριτήριο, για παράδειγμα, τη δυνατότητα επιλογής όλων των παραγγελιών που υποβάλλονται από έναν συγκεκριμένο πελάτη και δεν έχουν ακόμη παραδοθεί. Πριν η SQL γίνει ευρέως αποδεκτή ως τυπική γλώσσα, ο τρόπος έκφρασης τέτοιων ερωτημάτων διέφερε από σύστημα σε σύστημα.
  • Multitasking.Εάν πολλές εφαρμογές λειτουργούν με τη βάση δεδομένων ή πολλοί χρήστες έχουν πρόσβαση σε αυτήν ταυτόχρονα, το DBMS πρέπει να διασφαλίσει ότι η επεξεργασία του αιτήματος κάθε χρήστη δεν επηρεάζει την εργασία άλλων. Δηλαδή, οι χρήστες πρέπει να περιμένουν μόνο εάν κάποιος άλλος γράφει δεδομένα ακριβώς τη στιγμή που χρειάζεται να διαβάσει (ή να γράψει) δεδομένα σε κάποιο στοιχείο. Πολλαπλές αναγνώσεις δεδομένων μπορούν να πραγματοποιηθούν ταυτόχρονα. Στην πραγματικότητα, αποδεικνύεται ότι διαφορετικές βάσεις δεδομένων υποστηρίζουν διαφορετικά επίπεδα πολλαπλών εργασιών και ότι αυτά τα επίπεδα μπορούν ακόμη και να προσαρμοστούν.
  • Περιγραφή.Το DBMS πρέπει να διατηρεί ένα αρχείο καταγραφής όλων των αλλαγών δεδομένων σε μια χρονική περίοδο. Μπορεί να χρησιμοποιηθεί για την παρακολούθηση σφαλμάτων και επίσης (ίσως το πιο σημαντικό) για την ανάκτηση δεδομένων σε περίπτωση βλάβης του συστήματος, όπως μια απρογραμμάτιστη διακοπή ρεύματος. Είναι σύνηθες να δημιουργείτε αντίγραφα ασφαλείας των δεδομένων και να διατηρείτε ένα αρχείο καταγραφής συναλλαγών, επειδή το αντίγραφο ασφαλείας μπορεί να είναι χρήσιμο για την επαναφορά της βάσης δεδομένων σε περίπτωση βλάβης του δίσκου.
  • Διασφάλιση της ασφάλειας της βάσης δεδομένων.Το DBMS πρέπει να παρέχει έλεγχο πρόσβασης έτσι ώστε μόνο οι εγγεγραμμένοι χρήστες να μπορούν να χειρίζονται τα δεδομένα που είναι αποθηκευμένα στη βάση δεδομένων και την ίδια τη δομή της βάσης δεδομένων (χαρακτηριστικά, πίνακες και ευρετήρια). Συνήθως, ορίζεται μια ιεραρχία χρηστών για κάθε βάση δεδομένων, στην κορυφή αυτής της δομής είναι ένας "υπερχρήστης" που μπορεί να αλλάξει οτιδήποτε, στη συνέχεια υπάρχουν χρήστες που μπορούν να προσθέσουν και να διαγράψουν δεδομένα και στο κάτω μέρος υπάρχουν εκείνοι που έχουν διαβάσει -μόνο δικαιώματα. Το DBMS πρέπει να έχει τη δυνατότητα να προσθέτει και να αφαιρεί χρήστες και να καθορίζει σε ποιες δυνατότητες βάσης δεδομένων μπορούν να έχουν πρόσβαση.
  • Διατήρηση αναφορικής ακεραιότητας.Πολλά DBMS έχουν ιδιότητες που βοηθούν στη διατήρηση της ακεραιότητας αναφοράς, δηλαδή της ορθότητας των δεδομένων. Συνήθως, εάν ένα ερώτημα ή μια ενημέρωση παραβιάζει τους κανόνες του σχεσιακού μοντέλου, το DBMS εκδίδει ένα μήνυμα σφάλματος.

Στα δύο προηγούμενα άρθρα αυτής της σειράς, που δημοσιεύτηκαν στα τεύχη 6 και 7 του περιοδικού μας, εξετάσαμε διάφορους μηχανισμούς πρόσβασης δεδομένων, συμπεριλαμβανομένων των ADO, BDE και των εναλλακτικών τους. Τώρα ξέρουμε πώς να επιλέξουμε μια τεχνολογία πρόσβασης δεδομένων για ένα συγκεκριμένο ζεύγος "DBMS - εργαλείο ανάπτυξης".

Με την τεχνολογία πρόσβασης σε δεδομένα, μπορούμε επιτέλους να σκεφτούμε πώς θα πρέπει να χειρίζονται τα ίδια τα δεδομένα και τα μεταδεδομένα. Οι μέθοδοι χειρισμού μπορεί να είναι συγκεκριμένες για ένα δεδομένο DBMS (για παράδειγμα, η χρήση αντικειμένων στο τμήμα πελάτη αυτού του DBMS για πρόσβαση σε αντικείμενα βάσης δεδομένων) ή σε έναν δεδομένο μηχανισμό πρόσβασης δεδομένων. Ωστόσο, υπάρχει ένας περισσότερο ή λιγότερο καθολικός τρόπος χειρισμού δεδομένων, που υποστηρίζεται από σχεδόν όλα τα σχεσιακά DBMS διακομιστών και τους περισσότερους καθολικούς μηχανισμούς πρόσβασης δεδομένων (συμπεριλαμβανομένης της χρήσης σε συνδυασμό με επιτραπέζιους υπολογιστές DBMS). Αυτή η μέθοδος είναι η χρήση της γλώσσας SQL (Structured Query Language). Παρακάτω θα εξετάσουμε τον σκοπό και τις δυνατότητες αυτής της γλώσσας και επίσης θα μάθουμε πώς να τη χρησιμοποιούμε για εξαγωγή και σύνοψη δεδομένων, προσθήκη, διαγραφή και τροποποίηση εγγραφών, προστασία δεδομένων από μη εξουσιοδοτημένη πρόσβαση και δημιουργία βάσεων δεδομένων. Για μια πιο λεπτομερή μελέτη της SQL, μπορούμε να προτείνουμε τα βιβλία του Martin Graber «Introduction to SQL» (M., Laurie, 1996) και «SQL. Οδηγός Αναφοράς» (Μ., Lori, 1997).

Εισαγωγή

Η δομημένη γλώσσα ερωτημάτων είναι μια μη διαδικαστική γλώσσα που χρησιμοποιείται για τη διαχείριση δεδομένων σε σχεσιακά DBMS. Ο όρος "μη διαδικαστικό" σημαίνει ότι μια δεδομένη γλώσσα μπορεί να διατυπώσει τι πρέπει να γίνει με τα δεδομένα, αλλά δεν μπορεί να δώσει οδηγίες πώς ακριβώς πρέπει να γίνει. Με άλλα λόγια, αυτή η γλώσσα δεν έχει αλγοριθμικές κατασκευές όπως ετικέτες, τελεστές βρόχου, άλματα υπό όρους κ.λπ.

Η γλώσσα SQL δημιουργήθηκε στις αρχές της δεκαετίας του '70 ως αποτέλεσμα ενός ερευνητικού έργου της IBM, στόχος του οποίου ήταν να δημιουργήσει μια γλώσσα για τον χειρισμό σχεσιακών δεδομένων. Αρχικά ονομαζόταν SEQUEL (Structured English Query Language), μετά SEQUEL/2 και μετά απλά SQL. Το επίσημο πρότυπο SQL δημοσιεύτηκε από το ANSI (Αμερικανικό Εθνικό Ινστιτούτο Προτύπων, Η.Π.Α.) το 1986 (αυτή είναι η πιο συχνά χρησιμοποιούμενη εφαρμογή της SQL σήμερα). Αυτό το πρότυπο επεκτάθηκε το 1989 και το 1992, επομένως το πιο πρόσφατο πρότυπο SQL ονομάζεται SQL92. Επί του παρόντος βρίσκονται σε εξέλιξη εργασίες για το πρότυπο SQL3, το οποίο περιέχει ορισμένες αντικειμενοστρεφείς επεκτάσεις.

Υπάρχουν τρία επίπεδα συμμόρφωσης ANSI - Αρχάριος, Ενδιάμεσος και Πλήρης. Πολλοί προμηθευτές DBMS διακομιστών, όπως οι IBM, Informix, Microsoft, Oracle και Sybase, χρησιμοποιούν τις δικές τους υλοποιήσεις SQL που βασίζονται στο πρότυπο ANSI (που πληρούν τουλάχιστον το αρχικό επίπεδο συμμόρφωσης με το πρότυπο) και περιέχουν ορισμένες επεκτάσεις ειδικά για το DBMS.

Περισσότερες λεπτομερείς πληροφορίες σχετικά με τη συμμόρφωση της έκδοσης της SQL που χρησιμοποιείται σε ένα συγκεκριμένο DBMS μπορείτε να βρείτε στην τεκμηρίωση που παρέχεται με αυτό το DBMS.

Πώς λειτουργεί η SQL

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

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

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

Γλώσσα ορισμού δεδομένων (DDL)

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

Τραπέζι 1

Χειριστής

Περιγραφή

Χρησιμοποιείται για την προσθήκη νέου πίνακα στη βάση δεδομένων

Χρησιμοποιείται για την αφαίρεση ενός πίνακα από μια βάση δεδομένων

Χρησιμοποιείται για την αλλαγή της δομής ενός υπάρχοντος πίνακα

Χρησιμοποιείται για την προσθήκη νέας προβολής στη βάση δεδομένων

Χρησιμοποιείται για την αφαίρεση μιας προβολής από τη βάση δεδομένων

Χρησιμοποιείται για τη δημιουργία ευρετηρίου για ένα δεδομένο πεδίο

Χρησιμοποιείται για τη διαγραφή ενός υπάρχοντος ευρετηρίου

Χρησιμοποιείται για τη δημιουργία ενός νέου σχήματος στη βάση δεδομένων

Χρησιμοποιείται για την αφαίρεση ενός σχήματος από τη βάση δεδομένων

Χρησιμοποιείται για τη δημιουργία νέου τομέα

Χρησιμοποιείται για τον επαναπροσδιορισμό ενός τομέα

Χρησιμοποιείται για την αφαίρεση ενός τομέα από τη βάση δεδομένων

Γλώσσα χειρισμού δεδομένων (DML)

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

πίνακας 2

Μερικές φορές η δήλωση SELECT αναφέρεται ως ξεχωριστή κατηγορίαπου ονομάζεται Data Query Language (DQL).

Γλώσσα ελέγχου δρομέα (CCL)

Οι δηλώσεις γλώσσας ελέγχου δρομέα χρησιμοποιούνται για τον ορισμό ενός δρομέα, την προετοιμασία εντολών SQL για εκτέλεση και πολλές άλλες δηλώσεις. Οι δηλώσεις CCL παρουσιάζονται στον πίνακα. 5.

Πίνακας 5

Χειριστής

Περιγραφή

Χρησιμοποιείται για τον προσδιορισμό του δρομέα για το αίτημα

Χρησιμοποιείται για την περιγραφή ενός σχεδίου ερωτήματος. Αυτή η δήλωση είναι μια επέκταση SQL για τον Microsoft SQL Server 7.0. Δεν απαιτείται να εκτελεστεί σε άλλα DBMS. Για παράδειγμα, στην περίπτωση της Oracle, θα πρέπει να χρησιμοποιείται η δήλωση EXPLAIN PLAN

Χρησιμοποιείται για το άνοιγμα του δρομέα κατά τη λήψη αποτελεσμάτων ερωτήματος

Χρησιμοποιείται για τη λήψη μιας συμβολοσειράς από τα αποτελέσματα του ερωτήματος

Χρησιμοποιείται για το κλείσιμο του δρομέα

Χρησιμοποιείται για την προετοιμασία μιας δήλωσης SQL για εκτέλεση

Χρησιμοποιείται για την εκτέλεση της εντολής SQL

Χρησιμοποιείται για την περιγραφή ενός προετοιμασμένου αιτήματος

Όλες οι εντολές SQL έχουν τη μορφή που φαίνεται στο Σχ. 2.

Κάθε πρόταση SQL ξεκινά με ένα ρήμα, το οποίο είναι μια λέξη-κλειδί που καθορίζει τι κάνει η πρόταση (SELECT, INSERT, DELETE...). Η δήλωση περιέχει επίσης προτάσεις που περιέχουν πληροφορίες σχετικά με τα δεδομένα στα οποία εκτελούνται οι λειτουργίες. Κάθε πρόταση ξεκινά με μια λέξη-κλειδί όπως FROM, WHERE, κ.λπ. Η δομή της ρήτρας εξαρτάται από τον τύπο της - ορισμένες ρήτρες περιέχουν ονόματα πινάκων ή πεδίων, μερικές μπορεί να περιέχουν πρόσθετες λέξεις-κλειδιά, σταθερές ή εκφράσεις.

Πώς μπορείτε να εκτελέσετε εντολές SQL;

Όλα τα σύγχρονα DBMS διακομιστών (καθώς και πολλά δημοφιλή επιτραπέζια DBMS) περιέχουν βοηθητικά προγράμματα που σας επιτρέπουν να εκτελέσετε μια πρόταση SQL και να προβάλετε το αποτέλεσμά της. Συγκεκριμένα, το τμήμα πελάτη Oracle περιέχει το βοηθητικό πρόγραμμα SQL Plus και ο Microsoft SQL Server περιέχει το βοηθητικό πρόγραμμα SQL Query Analyzer. Αυτό το βοηθητικό πρόγραμμα θα χρησιμοποιήσουμε για να επιδείξουμε τις δυνατότητες της SQL και ως βάση δεδομένων στην οποία θα «πειραματιστούμε», θα πάρουμε τη βάση δεδομένων NorthWind που περιλαμβάνεται στο πακέτο Microsoft SQL Server 7.0. Κατ 'αρχήν, μπορείτε να χρησιμοποιήσετε μια άλλη βάση δεδομένων και οποιοδήποτε άλλο βοηθητικό πρόγραμμα που μπορεί να εκτελέσει εντολές SQL σε αυτήν τη βάση δεδομένων και να εμφανίσει τα αποτελέσματα (ή ακόμα και να γράψετε τα δικά σας χρησιμοποιώντας οποιοδήποτε εργαλείο ανάπτυξης - Visual Basic, Delphi, C++Builder, κ.λπ.). Ωστόσο, για κάθε περίπτωση, συνιστάται να το κάνετε Αντίγραφο ασφαλείαςαυτή τη βάση δεδομένων.

Η sql αποκαλείται συχνά η εσπεράντο γλώσσα για συστήματα διαχείρισης βάσεων δεδομένων (DBMS). Πράγματι, δεν υπάρχει άλλη γλώσσα στον κόσμο για εργασία με βάσεις δεδομένων που θα χρησιμοποιούνταν τόσο ευρέως σε προγράμματα. Το πρώτο πρότυπο sol εμφανίστηκε το 1986 και τώρα έχει αποκτήσει παγκόσμια αναγνώριση. Μπορεί να χρησιμοποιηθεί ακόμα και όταν εργάζεστε με μη σχεσιακά DBMS. Σε αντίθεση με άλλα εργαλεία λογισμικού, όπως οι γλώσσες C και Cobol, που αποτελούν προνόμιο των επαγγελματιών προγραμματιστών, η sql χρησιμοποιείται από ειδικούς από διάφορους τομείς. Προγραμματιστές, διαχειριστές DBMS, επιχειρησιακοί αναλυτές - όλοι επεξεργάζονται με επιτυχία δεδομένα χρησιμοποιώντας sql. Η γνώση αυτής της γλώσσας είναι χρήσιμη για όλους όσους έχουν να κάνουν με τη βάση δεδομένων.

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

Είναι δύσκολο να μάθεις sql; Εξαρτάται από το πόσο βαθιά θα πάτε. Για να γίνεις επαγγελματίας πρέπει να μελετήσεις πολύ. Η γλώσσα sql εμφανίστηκε το 1974 ως ένα μικρό θέμα ερευνητικό έργο, που αποτελούνταν από 23 σελίδες, και έχει διανύσει πολύ δρόμο από τότε. Το κείμενο του τρέχοντος προτύπου είναι επίσημο έγγραφο"η διεθνής τυπική γλώσσα βάσης δεδομένων sql" (συνήθως ονομάζεται sql-92) - περιέχει πάνω από εξακόσιες σελίδες, αλλά δεν αναφέρει τίποτα για τις συγκεκριμένες δυνατότητες των εκδόσεων sol που υλοποιούνται σε DBMS από Microsoft, Oracle, Sybase κ.λπ. είναι τόσο ανεπτυγμένο και τόσο ποικιλόμορφο που η απλή λίστα των δυνατοτήτων του θα απαιτούσε πολλά άρθρα περιοδικών και αν συλλέξετε όλα όσα έχουν γραφτεί για το θέμα sol, θα έχετε μια βιβλιοθήκη πολλών τόμων.

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

Τι είναι η sql;

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

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

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

Τι είναι ένα σχεσιακό DBMS;

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

Η έννοια του σχεσιακού μοντέλου προτάθηκε για πρώτη φορά στο εργασία Δρ.και E.F. Codd, που δημοσιεύθηκε το 1970. Περιέγραψε μια μαθηματική συσκευή για τη δόμηση και τη διαχείριση δεδομένων και πρότεινε επίσης ένα αφηρημένο μοντέλο για την αναπαράσταση οποιασδήποτε πραγματικής πληροφορίας. Προηγουμένως, κατά τη χρήση μιας βάσης δεδομένων, ήταν απαραίτητο να ληφθούν υπόψη τα ειδικά χαρακτηριστικά της αποθήκευσης πληροφοριών σε αυτήν. Εάν η εσωτερική δομή της βάσης δεδομένων άλλαζε (για παράδειγμα, για να βελτιωθεί η απόδοση), ήταν απαραίτητο να επεξεργαστούν εκ νέου τα προγράμματα εφαρμογών, ακόμα κι αν δεν υπήρχαν αλλαγές στο λογικό επίπεδο. Το σχεσιακό μοντέλο κατέστησε δυνατό τον διαχωρισμό των ιδιωτικών χαρακτηριστικών της αποθήκευσης δεδομένων από το επίπεδο προγράμματος εφαρμογής. Στην πραγματικότητα, το μοντέλο δεν περιγράφει με κανέναν τρόπο τον τρόπο αποθήκευσης και πρόσβασης στις πληροφορίες. Αυτό που λαμβάνεται υπόψη είναι πώς γίνεται αντιληπτή αυτή η πληροφορία από τον χρήστη. Χάρη στην εμφάνιση του σχεσιακού μοντέλου, η προσέγγιση στη διαχείριση δεδομένων έχει αλλάξει ποιοτικά: από τέχνη μετατράπηκε σε επιστήμη, η οποία οδήγησε στην επαναστατική ανάπτυξη του κλάδου.

Βασικές έννοιες του σχεσιακού μοντέλου

Σύμφωνα με το σχεσιακό μοντέλο, μια σχέση είναι ένας πίνακας με δεδομένα. Μια σχέση μπορεί να έχει ένα ή περισσότερα χαρακτηριστικά (χαρακτηριστικά) που αντιστοιχούν στις στήλες αυτού του πίνακα και κάποιο σύνολο (πιθανώς κενό) δεδομένων, τα οποία είναι σύνολα αυτών των χαρακτηριστικών (ονομάζονται n-ary πλειάδες ή εγγραφές) και αντιστοιχούν σε τις σειρές του τραπεζιού.

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

Ας δούμε ένα παράδειγμα. Ας υπάρχει ένας τομέας Days of Week που περιέχει τιμές από Δευτέρα έως Κυριακή. Εάν μια σχέση έχει ένα χαρακτηριστικό WeekDay που αντιστοιχεί σε αυτόν τον τομέα, τότε οποιαδήποτε πλειάδα στη σχέση πρέπει να έχει μία από τις τιμές που αναφέρονται στη στήλη WeekDay. Οι τιμές January ή Cat δεν επιτρέπεται να εμφανίζονται.

Σημείωση: το χαρακτηριστικό πρέπει να έχει μία από τις έγκυρες τιμές. Ο καθορισμός πολλαπλών τιμών ταυτόχρονα απαγορεύεται. Έτσι, εκτός από την απαίτηση ότι οι τιμές των χαρακτηριστικών ανήκουν σε ένα συγκεκριμένο τομέα, πρέπει να πληρούται η προϋπόθεση της ατομικότητάς του. Αυτό σημαίνει ότι αυτές οι έννοιες δεν μπορούν να αποσυντεθούν, δηλ. δεν μπορούν να αναλυθούν σε μικρότερα μέρη χωρίς να χαθεί το υποκείμενο νόημα. Για παράδειγμα, εάν η τιμή του χαρακτηριστικού περιείχε ταυτόχρονα τη Δευτέρα και την Τρίτη, τότε θα μπορούσαν να διακριθούν δύο μέρη, διατηρώντας την αρχική σημασία - Ημέρα της εβδομάδας. Επομένως, αυτή η τιμή χαρακτηριστικού δεν είναι ατομική. Ωστόσο, αν προσπαθήσετε να σπάσετε την έννοια "Δευτέρα" σε μέρη, θα λάβετε ένα σύνολο μεμονωμένων γραμμάτων - από "P" έως "K". η αρχική έννοια χάνεται, άρα η έννοια του «Δευτέρα» είναι ατομική.

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

Στην αρχική του εργασία, ο Δρ. Codd όρισε ένα σύνολο οκτώ τελεστών που ονομάζονται σχεσιακή άλγεβρα. Τέσσερις τελεστές - ένωση, λογικός πολλαπλασιασμός, διαφορά και καρτεσιανό γινόμενο - μεταφέρθηκαν από την παραδοσιακή θεωρία συνόλων. οι υπόλοιποι τελεστές δημιουργήθηκαν ειδικά για να χειρίζονται σχέσεις. Η επακόλουθη εργασία του Δρ. Codd, του Chris Date και άλλων ερευνητών πρότεινε επιπλέον χειριστές. Αργότερα σε αυτό το άρθρο, θα εξετάσουμε τρεις σχεσιακούς τελεστές—προβολή, επιλογή ή περιορισμό και συμμετοχή.

sql και σχεσιακό μοντέλο

Τώρα που είστε εξοικειωμένοι με το σχεσιακό μοντέλο, ας το ξεχάσουμε. Φυσικά, όχι για πάντα, αλλά μόνο για να εξηγήσω το εξής: αν και ήταν το σχεσιακό μοντέλο που πρότεινε ο Δρ Codd που χρησιμοποιήθηκε στην ανάπτυξη της sql, δεν υπάρχει πλήρης ή κυριολεκτική αντιστοιχία μεταξύ των δύο (αυτός είναι ένας από τους λόγους γιατί το πρότυπο sql-92 δεν έχει τον όρο attitude). Για παράδειγμα, οι έννοιες ενός πίνακα sql και μιας σχέσης δεν είναι ισοδύναμες, επειδή οι πίνακες μπορεί να έχουν πολλές ίδιες σειρές ταυτόχρονα, ενώ οι ίδιες πλειάδες δεν επιτρέπεται να εμφανίζονται σε σχέσεις. Επιπλέον, η SQL δεν προβλέπει τη χρήση σχεσιακών τομέων, αν και οι τύποι δεδομένων παίζουν ρόλο σε κάποιο βαθμό (μερικοί ισχυροί υποστηρικτές του σχεσιακού μοντέλου προσπαθούν τώρα να πιέσουν για τη συμπερίληψη σχεσιακών τομέων στο μελλοντικό πρότυπο SQL).

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

Στατική και δυναμική sql

Μπορεί να είστε ήδη εξοικειωμένοι με όρους όπως στατική και δυναμική sql. Ένα ερώτημα sql είναι στατικό εάν έχει μεταγλωττιστεί και βελτιστοποιηθεί σε ένα στάδιο πριν από την εκτέλεση του προγράμματος. Έχουμε ήδη αναφέρει μια μορφή στατικής sql όταν μιλήσαμε για την ενσωμάτωση εντολών sql σε προγράμματα C ή Cobol (υπάρχει άλλο όνομα για τέτοιες εκφράσεις - ενσωματωμένη sql). Όπως πιθανώς μαντεύετε, ένα δυναμικό ερώτημα SQL μεταγλωττίζεται και βελτιστοποιείται κατά την εκτέλεση του προγράμματος. Κατά κανόνα, οι απλοί χρήστες χρησιμοποιούν δυναμική sql, η οποία τους επιτρέπει να δημιουργούν ερωτήματα σύμφωνα με τις άμεσες ανάγκες τους. Μία από τις επιλογές για τη χρήση δυναμικών ερωτημάτων SQL είναι η διαδραστική ή άμεση κλήση τους (υπάρχει ακόμη και ένας ειδικός όρος - directsql), όταν τα ερωτήματα που αποστέλλονται για επεξεργασία εισάγονται διαδραστικά από το τερματικό. Υπάρχουν ορισμένες διαφορές μεταξύ στατικής και δυναμικής SQL στη σύνταξη των δομών που χρησιμοποιούνται και στις δυνατότητες εκτέλεσης, αλλά αυτά τα ζητήματα είναι πέρα ​​από το πεδίο εφαρμογής του άρθρου. Σημειώνουμε μόνο ότι για λόγους σαφήνειας, δίνονται παραδείγματα με τη μορφή άμεσων ερωτημάτων sql, καθώς αυτό επιτρέπει όχι μόνο στους προγραμματιστές, αλλά και στους περισσότερους τελικούς χρήστες, να μάθουν πώς να χρησιμοποιούν το sql.

Πώς να μάθετε sql

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

Για να εκτελέσετε οποιεσδήποτε ενέργειες σε sql, πρέπει να εκτελέσετε μια έκφραση σε γλώσσα sql. Υπάρχουν διάφοροι τύποι εκφράσεων, αλλά μεταξύ αυτών διακρίνονται τρεις κύριες ομάδες: εντολές ddl (γλώσσα ορισμού δεδομένων), εντολές dml (γλώσσα χειρισμού δεδομένων) και εργαλεία ελέγχου δεδομένων. Έτσι, κατά μία έννοια, η sql συνδυάζει τρεις διαφορετικές γλώσσες.

Εντολές γλώσσας περιγραφής δεδομένων

Ας ξεκινήσουμε με μία από τις κύριες εντολές ddl - δημιουργία πίνακα. Υπάρχουν διάφοροι τύποι πινάκων στην sql, οι κύριοι είναι δύο τύπων: βασικός (βασικός) και επιλεκτικός (προβολές). Οι βασικοί πίνακες είναι αυτοί που σχετίζονται με δεδομένα της πραγματικής ζωής. επιλεκτικοί είναι οι «εικονικοί» πίνακες που δημιουργούνται με βάση πληροφορίες που λαμβάνονται από πίνακες βάσης. αλλά στους χρήστες οι φόρμες μοιάζουν με κανονικούς πίνακες. Η εντολή δημιουργία πίνακα έχει σχεδιαστεί για τη δημιουργία βασικών πινάκων.

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

δημιουργία πίνακαTableName(ColumnDataType) ;

Δημιουργία και πίνακας είναι λέξεις-κλειδιά sql. Το TableName, το Column και το DataType είναι τυπικές παράμετροι, αντί των οποίων ο χρήστης εισάγει πραγματικές τιμές κάθε φορά. Οι παράμετροι Column και DataType περικλείονται σε παρένθεση. Στην sql, οι παρενθέσεις χρησιμοποιούνται συνήθως για την ομαδοποίηση μεμονωμένων στοιχείων. Σε αυτήν την περίπτωση, σας επιτρέπουν να συνδυάσετε ορισμούς για μια στήλη. Το τελειωτικό ερωτηματικό είναι ένα διαχωριστικό εντολών. Πρέπει να τερματίζει οποιαδήποτε έκφραση στη γλώσσα sql.

Ας δούμε ένα παράδειγμα. Ας υποθέσουμε ότι πρέπει να δημιουργήσετε έναν πίνακα για την αποθήκευση δεδομένων για όλα τα ραντεβού. Για να το κάνετε αυτό, εισάγετε την εντολή στο sql:

δημιουργία επιτραπέζιων συναντήσεων (ημερομηνία_ημερομηνίας ραντεβού) ;

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

Οι παράμετροι appointments και appointment_date ονομάζονται αναγνωριστικά επειδή καθορίζουν ονόματα για συγκεκριμένα αντικείμενα βάσης δεδομένων, σε αυτήν την περίπτωση ονόματα για έναν πίνακα και μια στήλη, αντίστοιχα. Υπάρχουν δύο τύποι αναγνωριστικών στην sql: τα κανονικά και τα οριοθετημένα. Τα επισημασμένα αναγνωριστικά περικλείονται σε διπλά εισαγωγικά και κάνουν διάκριση πεζών-κεφαλαίων. Τα τυπικά αναγνωριστικά δεν διακρίνονται από περιορισμένους χαρακτήρες και η γραφή τους δεν κάνει διάκριση πεζών-κεφαλαίων. Αυτό το άρθρο χρησιμοποιεί μόνο κανονικά αναγνωριστικά.

Οι χαρακτήρες που χρησιμοποιούνται για την κατασκευή αναγνωριστικών πρέπει να πληρούν ορισμένους κανόνες. Τα κανονικά αναγνωριστικά μπορούν να χρησιμοποιούν μόνο γράμματα (όχι απαραίτητα λατινικά, αλλά και άλλα αλφάβητα), αριθμούς και τον χαρακτήρα υπογράμμισης. Το αναγνωριστικό δεν πρέπει να περιέχει σημεία στίξης, κενά ή ειδικούς χαρακτήρες (#, @, % ή!). Επιπλέον, δεν μπορεί να ξεκινήσει με αριθμό ή υπογράμμιση. Μπορείτε να χρησιμοποιήσετε ξεχωριστές λέξεις-κλειδιά sql για αναγνωριστικά, αλλά αυτό δεν συνιστάται. Ένα αναγνωριστικό προορίζεται για την αναγνώριση κάποιου αντικειμένου, επομένως πρέπει να έχει ένα μοναδικό (εντός συγκεκριμένο πλαίσιο) όνομα: δεν μπορείτε να δημιουργήσετε έναν πίνακα με όνομα που βρίσκεται ήδη στη βάση δεδομένων. Δεν μπορείτε να έχετε στήλες με τα ίδια ονόματα στον ίδιο πίνακα. Παρεμπιπτόντως, να έχετε κατά νου ότι τα ραντεβού και τα ραντεβού είναι τα ίδια ονόματα για το sql. Η αλλαγή της πεζογραφίας των γραμμάτων από μόνη της δεν μπορεί να δημιουργήσει ένα νέο αναγνωριστικό.

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

δημιουργία πίνακαTableName(ColumnDataType[ ( , ColumnDataType )]) ;

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

δημιουργία πίνακα συναντήσεων2 (ημερομηνία_ημερομηνίας ραντεβού, ώρα_ώρας, περιγραφή varchar (256)) ;

Αυτή η εντολή δημιουργεί τον πίνακα συναντήσεις2 (ο νέος πίνακας πρέπει να έχει διαφορετικό όνομα, καθώς ο πίνακας συναντήσεων υπάρχει ήδη στη βάση δεδομένων). Όπως και ο πρώτος πίνακας, έχει μια στήλη appointment_date για την καταγραφή των ημερομηνιών των συναντήσεων. Επιπλέον, εμφανίστηκε μια στήλη appointment_time για την καταγραφή της ώρας αυτών των συναντήσεων. Η παράμετρος περιγραφής είναι μια συμβολοσειρά κειμένου που μπορεί να περιέχει έως και 256 χαρακτήρες. Αυτή η παράμετρος καθορίζεται ως varchar (συντομογραφία για την αλλαγή χαρακτήρων) επειδή δεν είναι γνωστό εκ των προτέρων πόσος χώρος θα χρειαστεί για την καταχώρηση, αλλά είναι σαφές ότι η περιγραφή δεν θα πάρει περισσότερους από 256 χαρακτήρες. Κατά την περιγραφή μιας παραμέτρου του τύπου συμβολοσειράς χαρακτήρων (και ορισμένων άλλων τύπων), υποδεικνύεται το μήκος της παραμέτρου. Η τιμή του καθορίζεται σε παρένθεση στα δεξιά του ονόματος τύπου.

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

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

δημιουργία υπαλλήλων πίνακα (χαρακτήρας επώνυμου (13) όχι μηδενικός, χαρακτήρας ονόματος (10) μη μηδενικός, ημερομηνίας_προσλήψεως, χαρακτήρας υποκαταστήματος (15), μικρού επιπέδου_βαθμού, δεκαδικός μισθός (9, 2)).

Η ομάδα συναντά αρκετά νέα στοιχεία. Πρώτα απ 'όλα, υπάρχει η έκφραση not null στο τέλος του ορισμού των στηλών last_name και first_name. Με τη βοήθεια τέτοιων δομών, τίθενται απαιτήσεις που πρέπει να τηρούνται. Σε αυτήν την περίπτωση, υποδεικνύεται ότι τα πεδία επώνυμο και όνομα πρέπει να συμπληρωθούν κατά την εισαγωγή. Δεν μπορείτε να αφήσετε αυτές τις στήλες κενές (αυτό είναι πολύ λογικό: πώς μπορείτε να αναγνωρίσετε έναν υπάλληλο χωρίς να γνωρίζετε το όνομά του;).

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

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

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

Ο επόμενος τύπος δεδομένων με τον οποίο είστε ήδη εξοικειωμένοι είναι ο χαρακτήρας που ποικίλλει (ή απλώς varchar). ανήκει στην ομάδα των συμβολοσειρών χαρακτήρων. Εάν το varchar χρησιμοποιείται για την αποθήκευση συμβολοσειρών μεταβλητού μήκους, τότε ο τύπος char που συναντάται στο τρίτο παράδειγμα προορίζεται για την αποθήκευση συμβολοσειρών με σταθερό αριθμό χαρακτήρων. Για παράδειγμα, η στήλη last_name θα περιέχει συμβολοσειρές 13 χαρακτήρων, ανεξάρτητα από τα πραγματικά επώνυμα που έχουν εισαχθεί, είτε πρόκειται για poe είτε για penworth-chickering (στην περίπτωση του poe, οι υπόλοιποι 10 χαρακτήρες θα γεμίσουν με κενά).

Από την πλευρά του χρήστη, το varchar και το char έχουν την ίδια σημασία. Γιατί ήταν απαραίτητο να εισαχθούν δύο τύποι; Το γεγονός είναι ότι στην πράξη συνήθως πρέπει να αναζητήσετε έναν συμβιβασμό μεταξύ της απόδοσης και της εξοικονόμησης χώρου στο δίσκο. Κατά κανόνα, η χρήση συμβολοσειρών με σταθερό μήκος παρέχει κάποιο όφελος στην ταχύτητα πρόσβασης, αλλά εάν το μήκος της συμβολοσειράς είναι πολύ μεγάλο, σπαταλάται ο χώρος στο δίσκο. Εάν στα ραντεβού2 κρατάτε 256 χαρακτήρες για κάθε γραμμή σχολίων, τότε αυτό μπορεί να αποδειχθεί παράλογο. τις περισσότερες φορές οι γραμμές θα είναι σημαντικά μικρότερες. Από την άλλη πλευρά, τα επώνυμα ποικίλλουν επίσης σε μήκος, αλλά γενικά απαιτούν περίπου 13 χαρακτήρες. Σε αυτή την περίπτωση, οι απώλειες θα είναι ελάχιστες. Ένας καλός εμπειρικός κανόνας είναι: εάν γνωρίζετε ότι το μήκος της χορδής ποικίλλει ελάχιστα ή είναι σχετικά μικρό, τότε χρησιμοποιήστε char. σε άλλες περιπτώσεις - varchar.

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

Ο τύπος δεκαδικών δεδομένων, που χρησιμοποιείται συνήθως για τη χρηματοοικονομική λογιστική, σας επιτρέπει να καθορίσετε ένα μοτίβο με τον επιθυμητό αριθμό δεκαδικών ψηφίων. Επειδή αυτός ο τύπος χρησιμοποιείται για ακριβή αριθμητική σημείωση, εγγυάται ακρίβεια κατά την εκτέλεση μαθηματικών πράξεων σε δεκαδικά δεδομένα. Εάν χρησιμοποιείτε τύπους δεδομένων από την κατά προσέγγιση ομάδα αριθμητικών σημειώσεων για δεκαδικές τιμές, για παράδειγμα float (αριθμός κινητής υποδιαστολής), αυτό θα οδηγήσει σε σφάλματα στρογγυλοποίησης, επομένως αυτή η επιλογή δεν είναι κατάλληλη για οικονομικούς υπολογισμούς. Για τον καθορισμό παραμέτρων του δεκαδικού τύπου, χρησιμοποιείται ο ακόλουθος συμβολισμός:

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

Η πλαϊνή γραμμή "Δημιουργία πίνακα" εμφανίζει μια πλήρη περίληψη της εντολής δημιουργίας πίνακα. Περιέχει νέα στοιχεία και δείχνει τη μορφή για όλους τους εξεταζόμενους τύπους δεδομένων (Καταρχήν, υπάρχουν και άλλοι τύποι δεδομένων, αλλά δεν τους εξετάζουμε ακόμη).

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

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

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

δημιουργία πίνακα πίνακα (χαρακτήρας στήλης (μήκος) [ περιορισμός ] | χαρακτήρας μεταβλητός (μήκος) [ περιορισμός ] | ημερομηνία [ περιορισμός ] | χρόνος [ περιορισμός ] | ακέραιος [ περιορισμός ] | μικρός [ περιορισμός ] | δεκαδικός (ακρίβεια, δεκαδικά ψηφία) [ περιορισμός ] | float (ακρίβεια) [ περιορισμός ] [( , χαρακτήρας στήλης (μήκος) [ περιορισμός ] | varchar (μήκος) [ περιορισμός ] | ημερομηνία [ περιορισμός ] | χρόνος [ περιορισμός ] | int [ περιορισμός ] | μικρός [ περιορισμός ] | dec (ακρίβεια, δεκαδικά ψηφία) [περιορισμός] | float (ακρίβεια) [περιορισμός] )]);

Το μυστικό του ονόματος sql

Στις αρχές της δεκαετίας του 1970. Η ibm άρχισε να εφαρμόζει το μοντέλο σχεσιακής βάσης δεδομένων που πρότεινε ο Δρ. Codd. Ο Ντόναλντ Τσάμπερλιν και μια ομάδα άλλων στη Μονάδα Προηγμένης Έρευνας δημιούργησαν μια πρωτότυπη γλώσσα που ονομάζεται δομημένη αγγλική γλώσσα ερωτημάτων ή απλώς συνέχεια. Στη συνέχεια επεκτάθηκε και βελτιώθηκε. Η νέα έκδοση που πρότεινε η ibm ονομάστηκε sequel/2. Χρησιμοποιήθηκε ως διεπαφή προγραμματισμού (api) για το σχεδιασμό του πρώτου συστήματος σχεσιακής βάσης δεδομένων της ibm, system/r. Για λόγους που σχετίζονται με νομικές αποχρώσεις, η ibm αποφάσισε να αλλάξει το όνομα: αντί για sequel/2, χρησιμοποιήστε sql (δομημένη γλώσσα ερωτημάτων). Αυτή η συντομογραφία προφέρεται συχνά "see-ku-el."

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

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

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

Σε αυτό το άρθρο

Τι είναι η SQL;

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

Τα σύνολα δεδομένων περιγράφονται στην SQL για να απαντηθούν ερωτήσεις. Όταν χρησιμοποιείτε SQL, πρέπει να χρησιμοποιείτε τη σωστή σύνταξη. Η σύνταξη είναι ένα σύνολο κανόνων που επιτρέπουν τον σωστό συνδυασμό των στοιχείων μιας γλώσσας. Η σύνταξη SQL βασίζεται στη σύνταξη Στα Αγγλικάκαι μοιράζεται πολλά στοιχεία με τη σύνταξη γλώσσας της Visual Basic for Applications (VBA).

Για παράδειγμα, μια απλή πρόταση SQL που ανακτά μια λίστα επωνύμων για τις επαφές με το όνομα Mary μπορεί να μοιάζει με αυτό:

ΕΠΙΛΟΓΗ Επώνυμο
ΑΠΟ Επαφές
WHERE First_Name = "Mary";

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

ΕΠΙΛΟΓΗ δηλώσεων

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

    πίνακες που περιέχουν δεδομένα·

    συνδέσεις μεταξύ δεδομένων από διαφορετικές πηγές·

    πεδία ή υπολογισμοί βάσει των οποίων επιλέγονται τα δεδομένα·

    προϋποθέσεις επιλογής που πρέπει να πληρούνται από τα δεδομένα που περιλαμβάνονται στο αποτέλεσμα του ερωτήματος·

    αναγκαιότητα και μέθοδος διαλογής.

Δηλώσεις SQL

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

Δήλωση SQL

Περιγραφή

Επιτακτικός

Καθορίζει τα πεδία που περιέχουν τα απαιτούμενα δεδομένα.

Ορίζει πίνακες που περιέχουν τα πεδία που καθορίζονται στον όρο SELECT.

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

Καθορίζει τη σειρά ταξινόμησης των αποτελεσμάτων.

Σε μια πρόταση SQL που περιέχει συναρτήσεις συνάθροισης, καθορίζει τα πεδία για τα οποία δεν υπολογίζεται μια συνοπτική τιμή στον όρο SELECT.

Μόνο εάν υπάρχουν τέτοια πεδία

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

Όροι SQL

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

Όρος SQL

Συγκρίσιμο μέρος του λόγου

Ορισμός

Παράδειγμα

αναγνωριστικό

ουσιαστικό

Ένα όνομα που χρησιμοποιείται για την αναγνώριση ενός αντικειμένου βάσης δεδομένων, όπως ένα όνομα πεδίου.

Πελάτες.[Αριθμός τηλεφώνου]

χειριστής

ρήμα ή επίρρημα

Μια λέξη-κλειδί που αντιπροσωπεύει ή τροποποιεί μια ενέργεια.

συνεχής

ουσιαστικό

Μια τιμή που δεν αλλάζει, όπως ένας αριθμός ή NULL.

έκφραση

επίθετο

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

>= Προϊόντα.[Τιμή]

Βασικοί όροι SQL: SELECT, FROM και WHERE

Η γενική μορφή των δηλώσεων SQL είναι:

ΕΠΙΛΟΓΗ πεδίου_1
ΑΠΟ πίνακα_1
WHERE κριτήριο_1
;

Σημειώσεις:

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

    Κάθε πρόταση SELECT τελειώνει με ένα ερωτηματικό (;). Ένα ερωτηματικό μπορεί να εμφανιστεί είτε στο τέλος της τελευταίας πρότασης είτε στο ξεχωριστή γραμμήστο τέλος της δήλωσης SQL.

Παράδειγμα στην Access

Το παρακάτω παράδειγμα δείχνει πώς μπορεί να μοιάζει μια πρόταση SQL για ένα απλό ερώτημα επιλογής στην Access.

1. ρήτρα SELECT

2. Ρήτρα ΑΠΟ

3. Ρήτρα WHERE

Ας δούμε το παράδειγμα πρόταση προς πρόταση για να κατανοήσουμε πώς λειτουργεί η σύνταξη SQL.

ρήτρα SELECT

ΕΠΙΛΟΓΗ, Εταιρεία

Αυτή είναι μια ρήτρα SELECT. Περιέχει μια δήλωση (SELECT) ακολουθούμενη από δύο αναγνωριστικά ("[Email Address]" και "Company").

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

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

Σε μια πρόταση SELECT, η ρήτρα SELECT βρίσκεται πάντα πριν από την πρόταση FROM.

Ρήτρα ΑΠΟ

ΑΠΟ Επαφές

Αυτή είναι μια ρήτρα FROM. Περιέχει μια δήλωση (FROM) ακολουθούμενη από ένα αναγνωριστικό (Επαφές).

Η πρόταση FROM δεν καθορίζει τα πεδία προς επιλογή.

ρήτρα WHERE

WHERE City="Σιάτλ"

Αυτή είναι η ρήτρα WHERE. Περιέχει μια δήλωση (ΠΟΥ) ακολουθούμενη από την έκφραση (City="Rostov").

Υπάρχουν πολλά πράγματα που μπορείτε να κάνετε με τις ρήτρες SELECT, FROM και WHERE. Για περισσότερες πληροφορίες σχετικά με τη χρήση αυτών των προσφορών, ανατρέξτε στα ακόλουθα άρθρα:

Ταξινόμηση αποτελεσμάτων: ORDER BY

Οπως λέμε Microsoft Excel, στην Access μπορείτε να ταξινομήσετε τα αποτελέσματα ενός ερωτήματος σε έναν πίνακα. Χρησιμοποιώντας τον όρο ORDER BY, μπορείτε επίσης να καθορίσετε τον τρόπο ταξινόμησης των αποτελεσμάτων όταν εκτελείται το ερώτημα. Εάν χρησιμοποιείται όρος ORDER BY, πρέπει να εμφανίζεται στο τέλος της πρότασης SQL.

Ο όρος ORDER BY περιέχει μια λίστα πεδίων προς ταξινόμηση, με την ίδια σειρά με την οποία θα εφαρμοστεί η ταξινόμηση.

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

ΠΑΡΑΓΓΕΛΙΑ ΑΠΟ Εταιρεία DESC,

Σημείωση:Από προεπιλογή, η Access ταξινομεί τις τιμές με αύξουσα σειρά (Α έως Ω, από μικρότερη προς μεγαλύτερη). Για να ταξινομήσετε τις τιμές με φθίνουσα σειρά, πρέπει να καθορίσετε τη λέξη-κλειδί DESC.

Για περισσότερες πληροφορίες σχετικά με την ρήτρα ORDER BY, ανατρέξτε στην ενότητα ORDER BY clause.

Εργασία με συνοπτικά δεδομένα: ρήτρες GROUP BY και HAVING

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

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

Καθορισμός πεδίων που δεν χρησιμοποιούνται σε μια συγκεντρωτική συνάρτηση: όρος GROUP BY

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

Η ρήτρα GROUP BY πρέπει να ακολουθεί αμέσως την ρήτρα WHERE ή FROM εάν δεν υπάρχει ρήτρα WHERE. Ο όρος GROUP BY παραθέτει τα πεδία με την ίδια σειρά με τον όρο SELECT.

Ας συνεχίσουμε το προηγούμενο παράδειγμα. Στην ρήτρα SELECT, εάν η συνάρτηση συγκεντρωτικών εφαρμογών ισχύει μόνο στο πεδίο [Διεύθυνση Email], τότε η ρήτρα GROUP BY θα μοιάζει με αυτό:

ΟΜΑΔΑ ΑΝΑ Εταιρία

Για περισσότερες πληροφορίες σχετικά με την ρήτρα GROUP BY, ανατρέξτε στο άρθρο GROUP BY ρήτρα.

Περιορισμός συγκεντρωτικών τιμών με χρήση συνθηκών ομαδοποίησης: η ρήτρα HAVING

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

Για παράδειγμα, ας υποθέσουμε ότι η συνάρτηση AVG (η οποία υπολογίζει τον μέσο όρο) εφαρμόζεται στο πρώτο πεδίο στον όρο SELECT:

SELECT COUNT(), Εταιρεία

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

HAVING COUNT()>1

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

Για περισσότερες πληροφορίες σχετικά με την ρήτρα HAVING, ανατρέξτε στο άρθρο HAVING ρήτρα.

Συνδυασμός αποτελεσμάτων ερωτήματος: τελεστής UNION

Ο τελεστής UNION χρησιμοποιείται για την ταυτόχρονη προβολή όλων των δεδομένων που επιστρέφονται από πολλαπλά παρόμοια επιλεγμένα ερωτήματα ως συνδυασμένο σύνολο.

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

Σημείωση:Στα ερωτήματα σύνδεσης, οι αριθμητικοί τύποι και οι τύποι δεδομένων κειμένου είναι συμβατοί.

Χρησιμοποιώντας τον τελεστή UNION, μπορείτε να καθορίσετε εάν διπλότυπες σειρές, εάν υπάρχουν, θα πρέπει να περιλαμβάνονται στα αποτελέσματα του ερωτήματος. Για να το κάνετε αυτό, χρησιμοποιήστε τη λέξη-κλειδί ALL.

Ένα ερώτημα για συνδυασμό δύο δηλώσεων SELECT έχει την ακόλουθη βασική σύνταξη:

ΕΠΙΛΟΓΗ πεδίου_1
ΑΠΟ πίνακα_1
ΕΝΩΣΗ
ΕΠΙΛΟΓΗ πεδίου_α
ΑΠΟ πίνακα_α
;

Για παράδειγμα, ας υποθέσουμε ότι έχετε δύο πίνακες που ονομάζονται "Προϊόντα" και "Υπηρεσίες". Και οι δύο πίνακες περιέχουν πεδία με το όνομα του προϊόντος ή της υπηρεσίας, πληροφορίες σχετικά με την τιμή και την εγγύηση, καθώς και ένα πεδίο που υποδεικνύει την αποκλειστικότητα του προσφερόμενου προϊόντος ή υπηρεσίας. Παρόλο που οι πίνακες Προϊόντων και Υπηρεσιών παρέχουν διαφορετικούς τύπους εγγυήσεων, οι βασικές πληροφορίες είναι οι ίδιες (ανεξάρτητα από το αν μεμονωμένα προϊόντα ή υπηρεσίες έχουν εγγύηση). Μπορείτε να χρησιμοποιήσετε το ακόλουθο ερώτημα σύνδεσης για να ενώσετε τέσσερα πεδία από δύο πίνακες:

ΕΠΙΛΕΞΤΕ όνομα, τιμή, εγγύηση_διαθέσιμη, αποκλειστική_προσφορά
ΑΠΟ Προϊόντα
ΕΝΩΣΗ ΟΛΩΝ
ΕΠΙΛΕΞΤΕ όνομα, τιμή, εγγύηση_διαθέσιμη, αποκλειστική_προσφορά
ΑΠΟ Υπηρεσίες
;

Για περισσότερες πληροφορίες σχετικά με το συνδυασμό εντολών SELECT χρησιμοποιώντας τον τελεστή UNION, βλ

Η γλώσσα ερωτημάτων της βάσης δεδομένων SQL εμφανίστηκε τη δεκαετία του '70. Το πρωτότυπό του αναπτύχθηκε από την IBM και είναι γνωστό ως SEQUEL (Structured English QUEry Language). Η SQL ενσωματώνει τα πλεονεκτήματα του σχεσιακού μοντέλου, ιδιαίτερα το γεγονός ότι βασίζεται στη μαθηματική συσκευή της σχεσιακής άλγεβρας και του σχεσιακού λογισμού, χρησιμοποιώντας σχετικά μικρό αριθμό τελεστών και απλή σύνταξη.

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

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

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

8.1. Διαφορά μεταξύ SQL και διαδικαστικών γλωσσών προγραμματισμού

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

8.2. SQL Forms and Parts

Υπάρχουν δύο μορφές γλώσσας SQL που υπάρχουν και χρησιμοποιούνται: διαδραστική SQL

και ενσωματωμένη SQL.

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

Το Embedded SQL αποτελείται από εντολές SQL που είναι ενσωματωμένες σε προγράμματα που είναι συνήθως γραμμένα σε κάποια άλλη γλώσσα (Pascal, C, C++, κ.λπ.). Αυτό καθιστά τα προγράμματα γραμμένα σε τέτοιες γλώσσες πιο ισχυρά και αποτελεσματικά, επιτρέποντάς τους να λειτουργούν με δεδομένα που είναι αποθηκευμένα σε σχεσιακές βάσεις δεδομένων, απαιτώντας ωστόσο την εισαγωγή πρόσθετων εργαλείων που παρέχουν διεπαφή στην SQL με τη γλώσσα στην οποία είναι ενσωματωμένη.

Τόσο η διαδραστική όσο και η ενσωματωμένη SQL χωρίζονται συνήθως στα ακόλουθα στοιχεία.

Γλώσσα ορισμού δεδομένων– Η DDL (Data Definition Language), δίνει τη δυνατότητα δημιουργίας, τροποποίησης και διαγραφής διαφόρων αντικειμένων βάσης δεδομένων (πίνακες, ευρετήρια, χρήστες, δικαιώματα κ.λπ.).

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

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

Γλώσσα Επεξεργασίας Δεδομένων– DML (Γλώσσα χειρισμού δεδομένων),

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

Ωστόσο, αυτές δεν είναι δύο διαφορετικές γλώσσες, αλλά συστατικά μιας ενιαίας SQL.

8.3. Όροι και ορολογία

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

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

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

8.4. Δειγματοληψία δεδομένων. ΧειριστήςΕΠΙΛΕΓΩ

Τα πιο απλά ερωτήματα SELECT

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

ΕΠΙΛΕΓΩ< λίστα χαρακτηριστικών>

ΑΠΟ< список таблиц>

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

Η λέξη-κλειδί SELECT λέει στο DBMS ότι αυτή η δήλωση είναι ένα αίτημα για ανάκτηση πληροφοριών. Μετά τη λέξη SELECT, διαχωρισμένη με κόμματα, παρατίθενται τα ονόματα των πεδίων (λίστα χαρακτηριστικών) των οποίων το περιεχόμενο ζητείται.

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

Για παράδειγμα,

ΕΠΙΛΕΞΤΕ ΟΝΟΜΑ, ΕΠΩΝΥΜΟ ΑΠΟ ΜΑΘΗΤΗ.

Το ερώτημα SQL πρέπει να τελειώνει με ερωτηματικό. Το παραπάνω ερώτημα ανακτά όλες τις τιμές του NAME και

ΕΠΩΝΥΜΟ από τον πίνακα ΜΑΘΗΤΩΝ.

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

Η σειρά των στηλών σε αυτόν τον πίνακα ταιριάζει με τη σειρά των πεδίων ΟΝΟΜΑ και ΕΠΩΝΥΜΟ που καθορίζονται στο ερώτημα και όχι με τη σειρά τους στον πίνακα εισαγωγής

ΜΑΘΗΤΗΣ ΣΧΟΛΕΙΟΥ.

Λάβετε υπόψη ότι οι πίνακες που προέκυψαν ως αποτέλεσμα ενός ερωτήματος SQL δεν πληρούν πλήρως τον ορισμό μιας σχεσιακής σχέσης. ΣΕ

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

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

ΕΠΙΛΕΞΤΕ ΠΟΛΗ ΑΠΟ ΜΑΘΗΤΙΚΟ ;

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

Μπέλγκοροντ

Μπορείτε να δείτε ότι μπορεί να υπάρχουν πανομοιότυπες σειρές σε αυτόν τον πίνακα. Τονίζονται με έντονους χαρακτήρες.

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

Η εισαγωγή μιας δήλωσης SELECT σε μια έκφραση, μια ρήτρα που ορίζεται από τη λέξη-κλειδί WHERE (where), σας επιτρέπει να εισαγάγετε μια έκφραση συνθήκης (κατηγόρημα) που αξιολογείται σε true ή false για τις τιμές του πεδίου της γραμμής πίνακα στις οποίες έχει πρόσβαση η δήλωση SELECT. Ο όρος WHERE καθορίζει ποιες σειρές των καθορισμένων πινάκων πρέπει να επιλεγούν. Ο πίνακας που είναι το αποτέλεσμα ενός ερωτήματος περιλαμβάνει μόνο εκείνες τις σειρές για τις οποίες η συνθήκη (κατηγόρημα) που καθορίζεται στον όρο WHERE αξιολογείται ως αληθής.

Γράψτε ένα ερώτημα που επιλέγει τα ονόματα (ΟΝΟΜΑ) όλων των μαθητών με το επώνυμο (ΕΠΩΝΥΜΟ) Petrov, πληροφορίες για το οποίο υπάρχουν στον πίνακα

ΕΠΙΛΕΞΤΕ ΕΠΩΝΥΜΟ, ΟΝΟΜΑ

ΑΠΟ ΜΑΘΗΤΗ

ΠΟΥ ΕΠΩΝΥΜΟ = ‘Petrov’;

Οι συνθήκες που καθορίζονται στον όρο WHERE μπορούν να χρησιμοποιούν πράξεις σύγκρισης που καθορίζονται από τους ακόλουθους τελεστές: = (ίσο), > (μεγαλύτερο από),< (меньше), >= (μεγαλύτερο ή ίσο με),<= (меньше или равно), <>(όχι ίσο), καθώς και οι λογικοί τελεστές AND, OR, και NOT.

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

ΕΠΙΛΕΞΤΕ ΟΝΟΜΑ, ΕΠΩΝΥΜΟ ΑΠΟ ΜΑΘΗΤΗ

ΟΠΟΥ KURS = 3 ΚΑΙ ΥΠΟΒΟΛΗ > 0 ;

8.5. Υλοποίηση πράξεων σχεσιακής άλγεβρας με χρήση γλώσσας SQL. Σχεσιακή πληρότητα SQL

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

φορέας εκμετάλλευσης της Ένωσης

Σχεσιακή άλγεβρα: Μια δήλωση UNION B SQL:

ΕΠΙΛΟΓΗ * ΑΠΟ Α

ΕΠΙΛΟΓΗ * ΑΠΟ Β ;

Χειριστής διασταύρωσης

Σχεσιακή Άλγεβρα: Α ΤΟΜΗ Β

Δήλωση SQL:

ΕΠΙΛΟΓΗ Α. ΠΕΔΙΟ1, Α. ΠΕΔΙΟ2, …,

ΑΠΟ Α, Β

ΟΠΟΥ Α. ΠΕΔΙΟ1=Β. ΠΕΔΙΟ1 ΚΑΙ Α. ΠΕΔΙΟ2=Β. ΠΕΔΙΟ2 ΚΑΙ ...;

ΕΠΙΛΕΞΤΕ Α.* ΑΠΟ Α, Β

WHERE A.pk =B.pk;

Χειριστής αφαίρεσης

Σχεσιακή Άλγεβρα: Δήλωση A MINUS B SQL:

ΕΠΙΛΟΓΗ * ΑΠΟ Α

ΟΠΟΥ A.pk ΟΧΙ ΜΕΣΑ (ΕΠΙΛΟΓΗ pk ΑΠΟ Β);

όπου A.pk και B.pk είναι τα κύρια κλειδιά των πινάκων Α και Β

Καρτεσιανός χειριστής προϊόντων

Σχεσιακή Άλγεβρα: Δήλωση SQL TIMES B:

ΑΠΟ Α, Β;

ΕΠΙΛΟΓΗ Α. ΠΕΔΙΟ1, Α. ΠΕΔΙΟ2, …, Β. ΠΕΔΙΟ1, Β. ΠΕΔΙΟ2, …

ΑΠΟ ΕΝΑ ΣΥΝΔΕΣΗ Β ;

Χειριστής προβολής

Σχεσιακή Άλγεβρα: Μια δήλωση SQL:

ΕΠΙΛΟΓΗ DISTINCT X, Y, …, Z FROM A;

Χειριστής δειγματοληψίας

Σχεσιακή Άλγεβρα: A WHERE θ Δήλωση SQL:

ΕΠΙΛΟΓΗ * ΑΠΟ Α

ΠΟΥ θ ;

τελεστής θ-σύνδεσης

Σχεσιακή Άλγεβρα: (Α ΦΟΡΕΣ Β) ΠΟΥ θ Δήλωση SQL:

ΕΠΙΛΟΓΗ Α. ΠΕΔΙΟ1, Α. ΠΕΔΙΟ2, …, Β. ΠΕΔΙΟ1, Β. ΠΕΔΙΟ2, …

ΑΠΟ Α, Β

ΠΟΥ θ ;

ΕΠΙΛΟΓΗ Α. ΠΕΔΙΟ1, Α. ΠΕΔΙΟ2, …, Β. ΠΕΔΙΟ1, Β. ΠΕΔΙΟ2, …

ΑΠΟ ΕΝΑ ΣΤΑΥΡΟ ΕΝΩΣΗ Β ΟΠΟΥ θ ;

Χειριστής τμήματος

Σχεσιακή άλγεβρα: A(X,Y) DEVIDE BY B(Y) πρόταση SQL:

ΕΠΙΛΕΞΤΕ DISTINCT A . Χ ΑΠΟ Α

(ΕΠΙΛΟΓΗ *

(ΕΠΙΛΟΓΗ * ΑΠΟ Α Α1

Α'1. Χ=Α. Χ ΚΑΙ Α1. Υ=Β. Υ));

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

Θα πρέπει να δώσετε προσοχή στο γεγονός ότι εάν τα παραπάνω ερωτήματα περιέχουν τιμές NULL στους πίνακες (δείτε την ενότητα 9.1 παρακάτω), τότε όλα τα παραπάνω ερωτήματα ενδέχεται να μην λειτουργούν σωστά, επειδή ΜΗΔΕΝΙΚΟ< >NULL και NULL = NULL είναι ψευδείς.

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