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

Κάθε εντολή SQL ξεκινά με μια λέξη-κλειδί, ένα ρήμα που περιγράφει την ενέργεια που εκτελεί η εντολή, όπως το CREATE. Μια ομάδα μπορεί να έχει μία ή περισσότερες προτάσεις. Η πρόταση περιγράφει τα δεδομένα με τα οποία λειτουργεί η εντολή ή περιέχει διευκρινιστικές πληροφορίες σχετικά με την ενέργεια που εκτελεί η εντολή. Κάθε ρήτρα ξεκινά με μια λέξη-κλειδί, όπως το WHERE Ορισμένες ρήτρες στην εντολή απαιτούνται, άλλες όχι. Ορισμένες προτάσεις μπορεί να περιέχουν πρόσθετες λέξεις-κλειδιά και εκφράσεις. Πολλές προτάσεις περιλαμβάνουν ονόματα πινάκων ή πεδίων. Τα ονόματα πρέπει να είναι από 1 έως 18 χαρακτήρες, να ξεκινούν με γράμμα και να μην περιέχουν κενά ή ειδικούς χαρακτήρες στίξης. Οι λέξεις-κλειδιά δεν μπορούν να χρησιμοποιηθούν ως ονόματα.

52. SQL (Structured Query Language) - Structured Query Languageείναι μια τυπική γλώσσα ερωτημάτων για εργασία με σχεσιακές βάσεις δεδομένων.

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

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

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

Χαρακτηρίζοντας τη γλώσσα SQL ως σύνολο, μπορούμε να επισημάνουμε τα ακόλουθα χαρακτηριστικά:

δομή υψηλού επιπέδου που θυμίζει την αγγλική γλώσσα.

· ανεξαρτησία από συγκεκριμένα ΣΔΒΔ.

· Διαθεσιμότητα αναπτυξιακών προτύπων.

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

· Παροχή πρόσβασης λογισμικού σε βάσεις δεδομένων.

· Υποστήριξη αρχιτεκτονικής πελάτη/διακομιστή.

· Επεκτασιμότητα και υποστήριξη αντικειμενοστρεφών τεχνολογιών.



· δυνατότητα πρόσβασης σε δεδομένα στο Διαδίκτυο.

Κύριες λειτουργίες της γλώσσας SQL:

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

SQL – γλώσσα προγραμματισμού βάσης δεδομένων. Για πρόσβαση στη βάση δεδομένων, οι εντολές SQL εισάγονται σε προγράμματα εφαρμογών.

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

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

55. Γλωσσικές δυνατότητεςΗ γλώσσα SQL, η οποία συμμορφώνεται με τα πιο πρόσφατα πρότυπα SQL:2003, SQL:1999, είναι μια πολύ πλούσια και πολύπλοκη γλώσσα, όλες οι δυνατότητες της οποίας είναι δύσκολο να κατανοηθούν άμεσα, πολύ λιγότερο να κατανοηθούν. Επομένως, πρέπει να σπάσουμε τη γλώσσα σε επίπεδα. Σε μία από τις ταξινομήσεις που παρέχονται από το πρότυπο SQL, αυτή η γλώσσα χωρίζεται σε «βασικά» (εισαγωγή), «ενδιάμεσα» (ενδιάμεσα) και «πλήρη» επίπεδα. Το βασικό επίπεδο περιέχει περίπου σαράντα εντολές, οι οποίες μπορούν να ομαδοποιηθούν σε κατηγορίες ανάλογα με τη λειτουργικότητά τους.

Στοιχεία ΔΗΜΙΟΥΡΓΙΑΣ ΠΙΝΑΚΑ (NOMZ INT, ΟΝΟΜΑ CHAR(15), ΕΤΟΣ INT, ΦΥΛΟ CHAR(3))

ΣΤΟΙΧΕΙΑ ΠΙΝΑΚΑΣ Λεπτομέρειες

ALTER TABLE Λεπτομέρειες (ΔΕΙΓΜΑ CHAR(10))

ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΒΟΛΗΣ Ακαδημαϊκής Προόδου M1 AS SELECT *FROM Academic Performance WHERE GROUP= "M-1"

INSERT INTO Information VALUES (980101, "IVANOV I. I.", 1980, "HUSBAND")

ΔΙΑΓΡΑΦΗ ΑΠΟ Λεπτομέρειες WHERE NOMZ=980201

ΕΝΗΜΕΡΩΣΗ ΣΕΤ ΠΛΗΡΟΦΟΡΙΩΝ Πλήρες όνομα = "KRAVTSOVA I. I." ΠΟΥ ΝΟΜΖ=980201

ΕΠΙΛΕΞΤΕ * ΑΠΟ ΠΛΗΡΟΦΟΡΙΕΣ WHERE FULL NAME="SIDOROV S. S." Ή ΠΛΗΡΕΣ ΟΝΟΜΑ="PETROV P. P."

54. Τύποι δεδομένων και εκφράσειςΓια να αποκτήσετε πρόσβαση σε έναν σχεσιακό πίνακα στην SQL, πρέπει να γράψετε (να καθορίσετε) μια εντολή. ΕΠΙΛΟΓΗ (επιλογή)λέξη-κλειδίλέει στο DBMS ποια ενέργεια θα εκτελέσει αυτή η εντολή. Οι εντολές ερωτήματος ξεκινούν με μια λέξη-κλειδί. Εκτός από το SELECT, αυτές μπορεί να είναι λέξεις ΔΗΜΙΟΥΡΓΩ-δημιουργώ, ΕΙΣΑΓΕΤΕ-εισάγετε, ΔΙΑΓΡΑΦΩ- διαγραφή, ΔΙΑΠΡΑΤΤΩ– πλήρης κ.λπ.

ΑΠΟ -λέξη-κλειδί, όπως το SELECT, που υπάρχει σε κάθε εντολή. Ακολουθεί ένα κενό και μετά το όνομα των πινάκων που χρησιμοποιούνται ως πηγές πληροφοριών. Τα ονόματα των πινάκων και των πεδίων πρέπει να περιέχουν από 1 έως 18 χαρακτήρες, να ξεκινούν με γράμμα και να μην περιέχουν κενά ή ειδικούς χαρακτήρες.

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

ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ -ταξινόμηση των εμφανιζόμενων εγγραφών (Αύξουσα – αύξουσα, φθίνουσα – φθίνουσα. Εάν δεν έχει καθοριστεί ο τύπος ταξινόμησης, τότε η ταξινόμηση γίνεται με αύξουσα σειρά).

CHAR (μήκος) ΧΑΡΑΚΤΗΡΑΣ (μήκος)Συμβολοσειρές χαρακτήρων σταθερού μήκους

ΑΚΕΡΑΙΟΣ ΕΣΩΤΟλόκληροι αριθμοί

SMALLINTΜικρός ακέραιος αριθμός

NUMERIC(ακρίβεια, βαθμός) DECIMAL(ακρίβεια, βαθμός DEC(ακρίβεια, βαθμός)Σταθερός αριθμός σημείου

FLOAT (ακρίβεια)Αριθμός κινητής υποδιαστολής

Διπλή ακρίβειααριθμοί με αιωρούμενη μνήμη, υψηλή ακρίβεια

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

Σταθερέςχρησιμοποιούνται για την ένδειξη συγκεκριμένων τιμών δεδομένων. Σταθερές σταθερές σημείου, για παράδειγμα: 21 -375,18 62,3

Σταθερές κινητής υποδιαστολής,για παράδειγμα: 1.5E7 -3.14E9 2.5E-6 0.783E24

Σταθερές χορδώνπρέπει να περικλείεται σε μονά εισαγωγικά. Παραδείγματα τέτοιων σταθερών: "Minsk" "New York" "Ivanov I. I."

Λείπει τιμή(ΜΗΔΕΝΙΚΟ). Η SQL υποστηρίζει το χειρισμό δεδομένων που λείπουν χρησιμοποιώντας την έννοια της τιμής που λείπει.

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

· ΜΕΤΡΩ– αριθμός τιμών στη στήλη του πίνακα.

· ΑΘΡΟΙΣΜΑ- το άθροισμα των τιμών στη στήλη.

· AVG– αριθμητικός μέσος όρος των τιμών στη στήλη.

· ΜΕΓΙΣΤΗ– μέγιστη τιμή στη στήλη.

· MIN– ελάχιστη τιμή στη στήλη.

Μπορούν να χρησιμοποιηθούν οι ακόλουθες εκφράσεις: τύπους χειριστή:

· αριθμητική: + (πρόσθεση), - (αφαίρεση), * (πολλαπλασιασμός), / (διαίρεση);

· σχέση: = (ίσο), > (μεγαλύτερο),< (меньше), >= (μεγαλύτερο ή ίσο με),<= (меньше или равно), <>(όχι ίσο)

· σπαζοκεφαλιά: ΚΑΙ(λογικό "ΚΑΙ"), Ή(λογικό "OR"), ΔΕΝ(λογική άρνηση).

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

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

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

Της ομάδας ΔΙΑΠΡΑΤΤΩΚαι ΑΝΤΙΣΤΡΟΦΗχρησιμοποιούνται κυρίως σε λειτουργία προγράμματος, αν και μπορούν επίσης να χρησιμοποιηθούν διαδραστικά.

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

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

· INSERT – το δικαίωμα προσθήκης δεδομένων στον πίνακα.

· ΕΝΗΜΕΡΩΣΗ – το δικαίωμα αλλαγής δεδομένων πίνακα.

· ΔΙΑΓΡΑΦΗ – το δικαίωμα διαγραφής δεδομένων από τον πίνακα.

· ΑΝΑΦΟΡΕΣ – το δικαίωμα ορισμού του πρωτεύοντος κλειδιού.

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

Γλώσσα SQL

Έτσι, εξοικειωθήκαμε με τις βασικές έννοιες της θεωρίας βάσεων δεδομένων, εγκαταστήσαμε και ρυθμίσαμε τη MySQL να λειτουργεί. Τώρα είναι η ώρα να μάθετε πώς να χειρίζεστε δεδομένα που είναι αποθηκευμένα σε βάσεις δεδομένων. Για αυτό χρειαζόμαστε SQL – δομημένη γλώσσα ερωτημάτων. Αυτή η γλώσσα καθιστά δυνατή τη δημιουργία, την επεξεργασία και τη διαγραφή πληροφοριών που είναι αποθηκευμένες σε βάσεις δεδομένων, τη δημιουργία νέων βάσεων δεδομένων και πολλά άλλα. SQL είναι ένα πρότυπο ANSI (American National Standards Institute) και ISO (Διεθνής Οργανισμός Τυποποίησης).

Λίγη ιστορία

Πρώτο διεθνές πρότυπο γλώσσας SQL υιοθετήθηκε το 1989 και αποκαλείται συχνά SQL/89 . Μεταξύ των μειονεκτημάτων αυτού του προτύπου, το πιο αξιοσημείωτο είναι ότι καθόρισε πολλές σημαντικές ιδιότητες όπως καθορίζονται από την υλοποίηση. Ως εκ τούτου, υπήρχαν πολλές αποκλίσεις στις υλοποιήσεις της γλώσσας από διαφορετικούς κατασκευαστές. Υπήρξαν επίσης παράπονα για την έλλειψη αναφοράς του προτύπου σε πρακτικές πτυχές της γλώσσας, όπως η ενσωμάτωσή του στη γλώσσα προγραμματισμού C.

Επόμενο Διεθνές Πρότυπο Γλωσσών SQL υιοθετήθηκε στα τέλη του 1992 και έγινε γνωστό ως SQL/92 . Αποδείχθηκε ότι ήταν πολύ πιο ακριβές και πλήρες από SQL/89 , αν και δεν ήταν χωρίς ελλείψεις. Επί του παρόντος, τα περισσότερα συστήματα εφαρμόζουν σχεδόν πλήρως αυτό το πρότυπο. Ωστόσο, όπως γνωρίζετε, η πρόοδος δεν μπορεί να σταματήσει και το 1999 εμφανίστηκε ένα νέο πρότυπο SQL :1999, γνωστό και ως SQL3. Το SQL3 χαρακτηρίζεται ως "αντικειμενοστρεφές" SQL ” και είναι η βάση πολλών συστημάτων διαχείρισης βάσεων δεδομένων αντικειμενικής σχέσης (για παράδειγμα, το ORACLE8 της Oracle, ο Universal Server της Informix και η καθολική βάση δεδομένων DB2 της IBM). Αυτό το πρότυπο δεν είναι απλώς μια συγχώνευση SQL-92 και τεχνολογία αντικειμένων. Περιέχει μια σειρά από επεκτάσεις στο παραδοσιακό SQL , και το ίδιο το έγγραφο έχει σχεδιαστεί για να διευκολύνει πιο αποτελεσματικές εργασίες τυποποίησης στο μέλλον.

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

Στη συνέχεια, μιλώντας για τα βασικά της γλώσσας SQL , θα τηρήσουμε την εφαρμογή του στο MySQL DBMS.

Βασικοί τελεστές γλώσσας SQL

Οι λειτουργίες οποιουδήποτε DBMS περιλαμβάνουν:

  1. δημιουργία, διαγραφή, αλλαγή βάσης δεδομένων (DB).
  2. προσθήκη, αλλαγή, διαγραφή, εκχώρηση δικαιωμάτων χρήστη.
  3. εισαγωγή, διαγραφή και αλλαγή δεδομένων στη βάση δεδομένων (πίνακες και εγγραφές)·
  4. λήψη δεδομένων από τη βάση δεδομένων.

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

Πριν κάνετε οτιδήποτε με τα δεδομένα, πρέπει να δημιουργήσετε πίνακες στους οποίους θα αποθηκευτούν αυτά τα δεδομένα, να μάθετε πώς να αλλάξετε τη δομή αυτών των πινάκων και να τους διαγράψετε εάν είναι απαραίτητο. Για το σκοπό αυτό στη γλώσσα SQL υπάρχουν χειριστές ΔΗΜΙΟΥΡΓΙΑ ΤΡΑΠΕΖΙΟΥ, ALTER TABLEΚαι ΠΤΡΑΠΕΖΙ ΠΤΩΣΗΣ.

ΔΗΜΙΟΥΡΓΙΑ ΔΗΛΩΣΗΣ ΠΙΝΑΚΑ

mysql>CREATE TABLE Persons (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), last_name VARCHAR(100), death_date INT, περιγραφή TEXT, φωτογραφία INT, υπηκοότητα CHAR(50) DEFAULT "Russia"); Παράδειγμα 10.1. Δημιουργία του πίνακα Πρόσωπα

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

Εμφάνιση όλων των βάσεων δεδομένων:

mysql>ΕΜΦΑΝΙΣΗ βάσεων δεδομένων.

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

mysql>χρήση βιβλίου? mysql>εμφάνιση πινάκων.

Εμφάνιση όλων των στηλών στον πίνακα Πρόσωπα:

mysql> εμφάνιση στηλών από Πρόσωπα.

Δήλωση DOP TABLE

Χειριστής ΠΤΡΑΠΕΖΙ ΠΤΩΣΗΣδιαγράφει έναν ή περισσότερους πίνακες. Όλα τα δεδομένα και οι ορισμοί του πίνακα καταργούνται, επομένως να είστε προσεκτικοί όταν χρησιμοποιείτε αυτήν την εντολή.

Σύνταξη:

ΑΠΟΣΤΟΛΗ TABLE table_name [, table_name,...]

Στην MySQL 3.22 και νεότερες εκδόσεις, μπορείτε να χρησιμοποιήσετε τις λέξεις-κλειδιά IF EXISTS για να δημιουργήσετε ένα σφάλμα εάν δεν υπάρχουν οι καθορισμένοι πίνακες.

Οι επιλογές RESTRICT και CASCADE διευκολύνουν τη μεταφορά ενός προγράμματος από άλλα DBMS. Δεν χρησιμοποιούνται αυτήν τη στιγμή.

mysql> ΑΠΟΣΤΟΛΗ ΠΙΝΑΚΑ ΑΝ ΥΠΑΡΧΕΙ Πρόσωπα, τεχνουργήματα, δοκιμή. Παράδειγμα 10.2. Χρησιμοποιώντας τη δήλωση DROP TABLE

Δήλωση ALTER TABLE

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

Σύνταξη:

ALTER TABLE table_name alter_specification [, alter_specification ...]

Μπορείτε να κάνετε τις ακόλουθες αλλαγές στον πίνακα (όλες οι οποίες καταγράφονται στο alter_specification):

  • προσθέτοντας ένα πεδίο:

    ΠΡΟΣΘΗΚΗ στήλης_ορισμού

    ΠΡΟΣΘΗΚΗ (collumn_definition, column_definition,...)

  • προσθήκη ευρετηρίων:

    ΠΡΟΣΘΗΚΗ INDEX [όνομα_ευρετηρίου] (όνομα_στήλης,...)ή ΠΡΟΣΘΗΚΗ ΚΥΡΙΟ ΚΛΕΙΔΙ (όνομα_στήλης,...)ή ΠΡΟΣΘΗΚΗ ΜΟΝΑΔΙΚΟ [όνομα_ευρετηρίου] (όνομα_στήλης,...)ή ΠΡΟΣΘΗΚΗ ΠΛΗΡΟΥ ΚΕΙΜΕΝΟΥ [όνομα_ευρετηρίου] (όνομα_στήλης,...)

  • αλλαγή πεδίου:

    ALTER στήλη_όνομα (ΡΥΘΜΙΣΗ ΠΡΟΕΠΙΛΟΓΗΣ κυριολεκτικά | ΑΠΟΣΤΟΛΗ ΠΡΟΕΠΙΛΟΓΗ)ή ΑΛΛΑΓΗ old_column_name column_definitionή TODIFY στήλη_ορισμός

  • διαγραφή πεδίου, ευρετηρίου, κλειδιού:

    DROP column_name DROP PRIMARY KEY DROP INDEX index_name

  • μετονομασία πίνακα:

    RENAME new_table_name

  • αναδιάταξη πεδίων πίνακα:

    ΠΑΡΑΓΓΕΛΙΑ ΑΝΑ Πεδίο

    table_options

Εάν ο χειριστής ALTER TABLEχρησιμοποιείται για την αλλαγή του ορισμού του τύπου στήλης, αλλά ΠΕΡΙΓΡΑΦΕΙ το όνομα_πίνακαδείχνει ότι η στήλη δεν έχει αλλάξει, τότε η MySQL μπορεί να αγνοεί αυτήν την τροποποίηση για έναν από τους λόγους που περιγράφονται στην ειδική ενότητα της τεκμηρίωσης. Για παράδειγμα, εάν προσπαθήσετε να αλλάξετε μια στήλη VARCHAR σε CHAR, η MySQL θα συνεχίσει να χρησιμοποιεί το VARCHAR εάν ο εν λόγω πίνακας περιέχει άλλες στήλες μεταβλητού μήκους.

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

Παράδειγμα 10.3. Ας προσθέσουμε ένα πεδίο στον πίνακα Πρόσωπα που δημιουργήθηκε για να καταγράψουμε το έτος γέννησης του ατόμου:

mysql> ΑΛΛΑΓΗ ΠΙΝΑΚΑ Πρόσωπα ΠΡΟΣΘΗΚΗ ΑΚΡΑΙΟΥ ΒΗΜΕΡΑΣ ΜΕΤΑ το επώνυμο. Παράδειγμα 10.3. Προσθήκη πεδίου στον πίνακα Πρόσωπα για την καταγραφή του έτους γέννησης ενός ατόμου

Έτσι, μάθαμε πώς να εργαζόμαστε με πίνακες: να τους δημιουργείτε, να τους διαγράψετε και να τους τροποποιήσετε. Τώρα ας δούμε πώς να κάνουμε το ίδιο με τα δεδομένα που είναι αποθηκευμένα σε αυτούς τους πίνακες.

Δήλωση SELECT

Χειριστής ΕΠΙΛΕΓΩχρησιμοποιείται για την ανάκτηση σειρών επιλεγμένων από έναν ή περισσότερους πίνακες. Δηλαδή, με τη βοήθειά του καθορίζουμε τις στήλες ή τις εκφράσεις που πρέπει να ανακτηθούν (select_expressions), τους πίνακες (table_references), από τους οποίους θα πρέπει να γίνει η επιλογή και, ενδεχομένως, την συνθήκη (where_definition), την οποία τα δεδομένα σε αυτά Οι στήλες πρέπει να αντιστοιχούν και στη σειρά με την οποία πρέπει να εκδοθούν αυτά τα δεδομένα.

Επιπλέον, ο χειριστής ΕΠΙΛΕΓΩμπορεί να χρησιμοποιηθεί για την ανάκτηση σειρών που υπολογίζονται χωρίς αναφορά σε κανέναν πίνακα. Για παράδειγμα, για να υπολογίσετε με τι ισούται το 2*2, απλά γράφετε

mysql> ΕΠΙΛΟΓΗ 2*2;

Απλοποιημένη δομή χειριστή ΕΠΙΛΕΓΩμπορεί να αναπαρασταθεί ως εξής:

Οι αγκύλες σημαίνουν ότι ο τελεστής μέσα σε αυτά είναι προαιρετικός σημαίνει μια λίστα πιθανών επιλογών. Μετά τη λέξη-κλειδί ORDER BY, υποδείξτε το όνομα της στήλης, τον αριθμό (ανυπόγραφο ακέραιος) ή τον τύπο και τη μέθοδο ταξινόμησης (αύξουσα - ASC ή φθίνουσα - DESC). Η προεπιλεγμένη σειρά είναι αύξουσα.

Όταν γράφουμε "*" σε μια έκφραση επιλογής, σημαίνει ότι επιλέγουμε όλες τις στήλες. Εκτός από το "*", συναρτήσεις όπως max , min και avg μπορούν να χρησιμοποιηθούν σε select_expressions.

Παράδειγμα 10.4. Επιλέξτε από τον πίνακα Πρόσωπα όλα τα δεδομένα για τα οποία το πεδίο first_name έχει την τιμή "Alexander":

Επιλέξτε το όνομα και την περιγραφή (τίτλος, περιγραφή) του αντικειμένου με αριθμό 10:

INSERT δήλωση

Χειριστής ΕΙΣΑΓΕΤΕεισάγει νέες σειρές σε έναν υπάρχοντα πίνακα. Ο χειριστής έχει διάφορες μορφές. Η παράμετρος table_name σε όλες αυτές τις φόρμες καθορίζει τον πίνακα στον οποίο πρέπει να γραφτούν οι σειρές. Οι στήλες για τις οποίες ορίζονται οι τιμές καθορίζονται στη λίστα ονομάτων στηλών (όνομα_στήλης) ή στο τμήμα SET.

Σύνταξη:

    INSERT table_name [(column_name,...)] VALUES (έκφραση,...),(...),...

    Αυτή η φόρμα εντολής ΕΙΣΑΓΕΤΕεισάγει σειρές σύμφωνα με τις ακριβείς τιμές που καθορίζονται στην εντολή. Οι στήλες παρατίθενται σε παρένθεση μετά το όνομα του πίνακα και οι τιμές τους παρατίθενται μετά τη λέξη-κλειδί VALUES.

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

    mysql> INSERT INTO Persons (επώνυμο, bday) ΤΙΜΕΣ ("Ivanov", "1934");

    θα εισαγάγει μια σειρά στον πίνακα Πρόσωπα στην οποία οι τιμές του επωνύμου (επώνυμο) και της ημερομηνίας γέννησης (bday) θα οριστούν αντίστοιχα ως "Ivanov" και "1934".

    INSERT table_name [(column_name,...)] ΕΠΙΛΟΓΗ ...

    Αυτή η φόρμα εντολής ΕΙΣΑΓΕΤΕεισάγει σειρές επιλεγμένες από άλλον πίνακα ή πίνακες.

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

    θα εισαγάγει στον πίνακα Artifacts στο πεδίο "author" την τιμή του αναγνωριστικού που έχει επιλεγεί από τον πίνακα Persons, υπό την προϋπόθεση ότι το επώνυμο του ατόμου είναι Ivanov.

    INSERT table_name SET column_name=expression, column_name=expression, ...

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

    mysql> INSERT INTO SET Προσώπων last_name="Petrov", first_name="Ivan";

    Αυτή η εντολή θα εισαγάγει την τιμή "Petrov" στον πίνακα "Persons" στο πεδίο last_name και τη συμβολοσειρά "Ivan" στο πεδίο first_name.

Μορφή ΕΙΣΑΓΩΓΗ...ΤΙΜΩΝμε μια λίστα πολλαπλών τιμών υποστηρίζεται σε MySQL 3.22.5 και μεταγενέστερες εκδόσεις. Σύνταξη έκφρασης στήλη_όνομα=έκφρασηυποστηρίζεται σε MySQL έκδοση 3.22.10 και μεταγενέστερη.

Ισχύουν οι ακόλουθες συμφωνίες.

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

    mysql> INSERT INTO table_name (col1,col2) VALUES(15,col1*2);

    Αλλά δεν μπορείτε να προσδιορίσετε:

    mysql> INSERT INTO table_name (col1,col2) VALUES(col2*2,15);

Δεν έχουμε συζητήσει ακόμη τρεις προαιρετικές παραμέτρους που υπάρχουν και στις τρεις μορφές της εντολής: LOW_PRIORITY, DELAYED και IGNORE.

Οι παράμετροι LOW_PRIORITY και DELAYED χρησιμοποιούνται όταν ένας μεγάλος αριθμός χρηστών εργάζεται με τον πίνακα. Απαιτούν να δοθεί προτεραιότητα σε μια δεδομένη λειτουργία έναντι των λειτουργιών άλλων χρηστών. Εάν έχει καθοριστεί η λέξη-κλειδί LOW_PRIORITY, τότε εκτέλεση αυτής της εντολής ΕΙΣΑΓΕΤΕθα καθυστερήσει έως ότου οι άλλοι πελάτες ολοκληρώσουν την ανάγνωση αυτού του πίνακα. Σε αυτήν την περίπτωση, ο πελάτης πρέπει να περιμένει έως ότου ολοκληρωθεί η εντολή εισαγωγής, κάτι που μπορεί να διαρκέσει σημαντικό χρονικό διάστημα εάν ο πίνακας χρησιμοποιείται πολύ. Αντίθετα, η εντολή ΚΑΘΥΣΤΕΡΗΣΗ ΕΙΣΑΓΩΓΗΣεπιτρέπει σε έναν συγκεκριμένο πελάτη να συνεχίσει αμέσως μια λειτουργία, ανεξάρτητα από άλλους χρήστες.

Αν στην ομάδα ΕΙΣΑΓΕΤΕΕάν έχει καθοριστεί η λέξη-κλειδί IGNORE, τότε όλες οι σειρές που έχουν διπλότυπα κλειδιά ΠΡΩΤΑΡΧΙΚΟΣή ΜΟΝΑΔΙΚΟΣσε αυτόν τον πίνακα θα αγνοηθούν και δεν θα εισαχθούν στον πίνακα. Εάν δεν καθορίσετε IGNORE , η λειτουργία εισαγωγής ματαιώνεται όταν συναντήσει μια σειρά που έχει διπλότυπη τιμή για ένα υπάρχον κλειδί.

ΕΝΗΜΕΡΩΣΗ δήλωσης

Σύνταξη:

Χειριστής ΕΚΣΥΓΧΡΟΝΙΖΩΕνημερώνει τις τιμές των υπαρχόντων στηλών του πίνακα σύμφωνα με τις τιμές που έχουν εισαχθεί. Η δήλωση SET καθορίζει ποιες στήλες πρέπει να τροποποιηθούν και ποιες τιμές πρέπει να οριστούν σε αυτές. Η ρήτρα WHERE, εάν υπάρχει, καθορίζει ποιες σειρές ενημερώνονται. Διαφορετικά, όλες οι σειρές ενημερώνονται. Εάν έχει καθοριστεί μια παράσταση ORDER BY, οι σειρές θα ενημερωθούν με τη σειρά που καθορίζεται σε αυτήν.

Εάν έχει καθοριστεί η λέξη-κλειδί LOW_PRIORITY, τότε εκτέλεση αυτής της εντολής ΕΚΣΥΓΧΡΟΝΙΖΩκαθυστερεί έως ότου οι άλλοι πελάτες ολοκληρώσουν την ανάγνωση αυτού του πίνακα.

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

Εάν μια παράσταση που καθορίζει μια νέα τιμή στήλης χρησιμοποιεί το όνομα αυτού του πεδίου, τότε η εντολή ΕΚΣΥΓΧΡΟΝΙΖΩχρησιμοποιεί την τρέχουσα τιμή αυτής της στήλης. Για παράδειγμα, η ακόλουθη εντολή ορίζει τη στήλη death_date σε μια τιμή μεγαλύτερη από την τρέχουσα τιμή της:

mysql> ΕΝΗΜΕΡΩΣΗ Προσώπων SET death_date=death_date+1;

Στην έκδοση 3.23 της MySQL, μπορείτε να χρησιμοποιήσετε την παράμετρο LIMIT # για να διασφαλίσετε ότι έχει τροποποιηθεί μόνο ο καθορισμένος αριθμός σειρών.

Για παράδειγμα, μια τέτοια λειτουργία θα αντικαταστήσει τον τίτλο του τίτλου στην πρώτη σειρά του πίνακα των εκθεμάτων μας με τη συμβολοσειρά "Tube computer":

mysql> ΕΝΗΜΕΡΩΣΗ Τεχνουργημάτων SET title=" Υπολογιστής Tube" Limit 1;!}

ΔΙΑΓΡΑΦΗ δήλωσης

Χειριστής ΔΙΑΓΡΑΦΩαφαιρεί σειρές από τον πίνακα table_name που ικανοποιούν τις προϋποθέσεις που καθορίζονται στο where_definition και επιστρέφει τον αριθμό των εγγραφών που αφαιρέθηκαν.

Εάν ο χειριστής ΔΙΑΓΡΑΦΩεκτελείται χωρίς ορισμό WHERE, όλες οι σειρές διαγράφονται.

Σύνταξη:

Για παράδειγμα, η ακόλουθη εντολή θα αφαιρεθεί από τον πίνακα Πρόσωπα

07/02/07 11,6Κ

Εισαγωγή στη Σχεσιακή Διαχείριση Βάσεων Δεδομένων

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

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

Είναι δύσκολο να μάθεις sql; Εξαρτάται από το πόσο βαθιά θα πάτε. Για να γίνεις επαγγελματίας πρέπει να μελετήσεις πολύ. Η γλώσσα sql ξεκίνησε τη ζωή της το 1974 ως αντικείμενο μιας σύντομης ερευνητικής εργασίας 23 σελίδων και έχει διανύσει πολύ δρόμο από τότε. Το κείμενο του τρέχοντος προτύπου - το επίσημο έγγραφο "the international standard database language 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 (ακρίβεια) [ περιορισμός ] [( , char (μήκος) [ περιορισμός ] | varchar (μήκος) [ περιορισμός ] | ημερομηνία [ περιορισμός ] | χρόνος [ περιορισμός ] | int [ περιορισμός ] | μικρός [ περιορισμός ] | dec (ακρίβεια, δεκαδικά ψηφία) [ περιορισμός ] |.

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

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

Υπάρχουν σημαντικές διαφορές μεταξύ των πρώιμων πρωτοτύπων συνέχειας και του προτύπου sql που αναγνωρίζεται πλέον σε διάφορους οργανισμούς. Ο Jim Melton, ο οποίος ετοίμασε το πρότυπο sql-92, δήλωσε μάλιστα ότι πολλοί άνθρωποι κάνουν λάθος πιστεύοντας ότι η λέξη "δομημένο" αντικατοπτρίζει σωστά τις ιδιαιτερότητες αυτής της γλώσσας (jim melton και Alan R. Simon "κατανοώντας τη νέα sql: ένας πλήρης οδηγός ." San Francisco : morgan kaufmann, 1993. isbn: 1-55860-245-3). Επομένως, στην πραγματικότητα, το sql είναι απλώς ένα όνομα, μια ακολουθία γραμμάτων s-q-l και τίποτα περισσότερο.

Καλό κακό

Γλώσσα προγραμματισμού

Η SQL (Structured Query Language) είναι μια γλώσσα διαχείρισης βάσεων δεδομένων για σχεσιακές βάσεις δεδομένων. Η ίδια η SQL δεν είναι μια πλήρης γλώσσα προγραμματισμού Turing, αλλά το πρότυπό της επιτρέπει τη δημιουργία διαδικαστικών επεκτάσεων για αυτήν που επεκτείνουν τη λειτουργικότητά της σε μια πλήρη γλώσσα προγραμματισμού.

Η γλώσσα δημιουργήθηκε τη δεκαετία του 1970 με την ονομασία «SEQUEL» για το σύστημα διαχείρισης βάσεων δεδομένων System R (DBMS) Αργότερα μετονομάστηκε σε «SQL» για την αποφυγή διενέξεων εμπορικών σημάτων. Το 1979, η SQL δημοσιεύτηκε για πρώτη φορά ως εμπορικό προϊόν, το Oracle V2.

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

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

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

Η SQL αποτελείται από τέσσερα διακριτά μέρη:

  1. Η γλώσσα ορισμού δεδομένων (DDL) χρησιμοποιείται για τον καθορισμό των δομών δεδομένων που είναι αποθηκευμένες στη βάση δεδομένων. Οι δηλώσεις DDL σάς επιτρέπουν να δημιουργείτε, να τροποποιείτε και να διαγράφετε μεμονωμένα αντικείμενα στη βάση δεδομένων. Οι έγκυροι τύποι αντικειμένων εξαρτώνται από το DBMS που χρησιμοποιείται και συνήθως περιλαμβάνουν βάσεις δεδομένων, χρήστες, πίνακες και έναν αριθμό μικρότερων υποστηρικτικών αντικειμένων, όπως ρόλους και ευρετήρια.
  2. Η γλώσσα χειρισμού δεδομένων (DML) χρησιμοποιείται για την ανάκτηση και την τροποποίηση δεδομένων στη βάση δεδομένων. Οι δηλώσεις DML σάς επιτρέπουν να ανακτάτε, να εισάγετε, να τροποποιείτε και να διαγράφετε δεδομένα σε πίνακες. Μερικές φορές οι δηλώσεις επιλογής ανάκτησης δεδομένων δεν θεωρούνται μέρος της DML επειδή δεν αλλάζουν την κατάσταση των δεδομένων. Όλες οι δηλώσεις DML έχουν δηλωτικό χαρακτήρα.
  3. Η γλώσσα ορισμού πρόσβασης δεδομένων (DCL) χρησιμοποιείται για τον έλεγχο της πρόσβασης στα δεδομένα στη βάση δεδομένων. Οι δηλώσεις DCL ισχύουν για προνόμια και σας επιτρέπουν να εκχωρήσετε και να ανακαλέσετε δικαιώματα εφαρμογής ορισμένων δηλώσεων DDL και DML σε ορισμένα αντικείμενα βάσης δεδομένων.
  4. Η γλώσσα ελέγχου συναλλαγών (TCL) χρησιμοποιείται για τον έλεγχο της επεξεργασίας των συναλλαγών στη βάση δεδομένων. Συνήθως οι δηλώσεις TCL περιλαμβάνουν δέσμευση για τη δέσμευση αλλαγών που έγιναν κατά τη διάρκεια μιας συναλλαγής, επαναφορά για επαναφορά τους και σημείο αποθήκευσης για τη διάσπαση της συναλλαγής σε πολλά μικρότερα μέρη.

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

Παραδείγματα:

Γειά σου Κόσμε!:

Παράδειγμα για εκδόσεις Oracle 10g SQL, Oracle 11g SQL

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

επιλέξτε "Hello, World!" από διπλό ?

Παραγοντικό:

Παράδειγμα για εκδόσεις Oracle 10g SQL, Oracle 11g SQL

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

  • επίπεδο ψευδοστήλης για τη δημιουργία ψευδοπίνακων t1 και t2 που περιέχουν αριθμούς από το 1 έως το 16,
  • αθροιστική συνάρτηση sum , η οποία σας επιτρέπει να αθροίζετε τα στοιχεία ενός συνόλου χωρίς να χρησιμοποιείτε ρητά βρόχο,
  • και τις μαθηματικές συναρτήσεις ln και exp, οι οποίες σας επιτρέπουν να αντικαταστήσετε το γινόμενο (που απαιτείται για τον υπολογισμό του παραγοντικού) με ένα άθροισμα (που παρέχεται από την SQL).

Η γραμμή «0! = 1" δεν θα συμπεριληφθεί στο σύνολο σειρών που προκύπτει, επειδή Η προσπάθεια αξιολόγησης του ln(0) οδηγεί σε εξαίρεση.

Αριθμοί Fibonacci:

Παράδειγμα για εκδόσεις Oracle 10g SQL, Oracle 11g SQL

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

  • Ο τύπος του Binet και οι μαθηματικές συναρτήσεις ROUND, POWER και SQRT για τον υπολογισμό του nου αριθμού Fibonacci.
  • επίπεδο ψευδό-στήλης για τη δημιουργία ενός ψευδο-πίνακα t1 που περιέχει αριθμούς από το 1 έως το 16.
  • ενσωματωμένη συνάρτηση SYS_CONNECT_BY_PATH για διατεταγμένη συνένωση των ληφθέντων αριθμών.

ΕΠΙΛΕΞΤΕ ΑΝΤΙΚΑΤΑΣΤΑΣΗ (MAX (SYS_CONNECT_BY_PATH (fib || ", " , "/" )), "/" , "" ) || "..." fiblist FROM ( SELECT n , fib , ROW_NUMBER () OVER (ORDER BY n ) r FROM ( select n , round ((power ((1 + sqrt (5 ))) * 0 . 5 , n ) - power ((1 - sqrt (5 )) * 0 . 5 , n )) / sqrt (5 )) fib from (επιλέξτε επίπεδο n από διπλή σύνδεση ανά επίπεδο<= 16 ) t1 ) t2 ) START WITH r = 1 CONNECT BY PRIOR r = r - 1 ;

Γειά σου Κόσμε!:

Παράδειγμα για εκδόσεις Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012, MySQL 5, PostgreSQL 8.4, PostgreSQL 9.1, sqlite 3.7.3

επιλέξτε "Hello, World!" ;

Παραγοντικό:

Παράδειγμα για εκδόσεις του Microsoft SQL Server 2005, του Microsoft SQL Server 2008 R2, του Microsoft SQL Server 2012

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

Μπορείτε να υπολογίσετε μόνο ακέραιους παραγοντικούς αριθμούς έως 20!. Όταν προσπαθείς να υπολογίσεις το 21! Παρουσιάζεται το σφάλμα "Αριθμητικό σφάλμα υπερχείλισης", π.χ. το πλέγμα bit ξεχειλίζει.

Για πραγματικούς αριθμούς, το παραγοντικό είναι 100! (Για να το κάνετε αυτό, στο παράδειγμα πρέπει να αντικαταστήσετε το bigint με το float στην 3η γραμμή)

Αριθμοί Fibonacci:

Παράδειγμα για εκδόσεις του Microsoft SQL Server 2005, του Microsoft SQL Server 2008 R2, του Microsoft SQL Server 2012

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

Παραγοντικό:

Παράδειγμα για εκδόσεις Oracle 10g SQL, Oracle 11g SQL

Αυτό το παράδειγμα δείχνει τη χρήση του τελεστή μοντέλου, που είναι διαθέσιμος στο Oracle 10g, ο οποίος επιτρέπει στις συμβολοσειρές ερωτημάτων να αντιμετωπίζονται ως στοιχεία πίνακα. Κάθε γραμμή περιέχει δύο πεδία - τον αριθμό γραμμής n και το παραγοντικό της f.

επιλέξτε n || "! = " || f παραγοντική από διπλό μοντέλο επιστρέφει όλες τις σειρές διάσταση με ( 0 d ) μέτρα ( 0 f , 1 n ) κανόνες iterate ( 17 ) ( f [ iteration_number ] = decode ( iteration_number , 0 , 1 , f [ iteration_number - 1 ] * iteration_number ) , n [ αριθμός_επανάληψης ] = αριθμός_επανάληψης );

Αριθμοί Fibonacci:

Παράδειγμα για εκδόσεις Oracle 10g SQL, Oracle 11g SQL

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

επιλέξτε μέγ(α) || ", ..." from (επιλέξτε s από διπλό μοντέλο επιστρέψτε όλες τις σειρές διάσταση κατά ( 0 d ) μέτρα ( cast ( " " as varchar2 (200 )) s , 0 f ) κανόνες iterate ( 16 ) ( f [ iteration_number ] = αποκωδικοποίηση (αριθμός_επανάληψης , 0 , 1 , 1 , 1 , f [ αριθμός_επανάληψης - 1 ] + f [ αριθμός_επανάληψης - 2 ]), s [ αριθμός_επανάληψης ] = αποκωδικοποίηση (αριθμός_επανάληψης, 0, σε_χαρακτήρα (f [αριθμός_επανάληψης_επανάληψης]), 1 ] ||. ", " || to_char (f [ iteration_number ]) );

Παραγοντικό:

Παράδειγμα για εκδόσεις MySQL 5

επιλέξτε concat (cast (t2 . n ως char ), "!= " , cast (exp (sum (log (t1 . n ))) ως char )) from ( select @ i : = @ i + 1 AS n from TABLE , (επιλέξτε @ i : = 0 ) ως όριο sel1 16 ) t1 , ( επιλέξτε @ j : = @ j + 1 AS n από τον ΠΙΝΑΚΑ , (επιλέξτε @ j : = 0 ) ως όριο sel1 16 ) t2 όπου t1 . n<= t2 . n group by t2 . n

Αριθμοί Fibonacci:

Παράδειγμα για εκδόσεις MySQL 5

Αντικαταστήστε το TABLE με οποιονδήποτε πίνακα στον οποίο έχετε πρόσβαση, όπως mysql.help_topic .

επιλέξτε concat (group_concat (f διαχωριστικό ", " ), ", ..." ) από (επιλέξτε @ f : = @ i + @ j ως f , @ i : = @ j , @ j : = @ f από τον ΠΙΝΑΚΑ , (επιλέξτε @ i : = 1 , @ j : = 0 ) όριο sel1 16 ) t

Γειά σου Κόσμε!:

Παράδειγμα για εκδόσεις Oracle 10g SQL, Oracle 11g SQL

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

ξεκινήστε το dbms_output. put_line("Γεια, Κόσμος!"); τέλος ;

Παραγοντικό:

Παράδειγμα για εκδόσεις Oracle 10g SQL, Oracle 11g SQL

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

δηλώστε n αριθμό := 0 ; f αριθμός := 1 ; αρχίζουν ενώ (ν<= 16 ) loop dbms_output . put_line (n || "! = " || f ); n : = n + 1 ; f : = f * n ; end loop ; end ;

Αριθμοί Fibonacci:

Παράδειγμα για εκδόσεις Oracle 10g SQL, Oracle 11g SQL

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

Το διάνυσμα τύπου δήλωσης είναι η varray (16) του αριθμού. fib vector := vector(); i αριθμός ; s varchar2(100); ξεκινήστε fib. επέκταση(16); fib (1) := 1; fib (2) := 1; s : = fib (1 ) || ", " || fib(2) || "," ; για i σε 3 .. 16 loop fib (i) : = fib (i - 1) + fib (i - 2); s := s || fib(i) || "," ; τελικός βρόχος ; dbms_output. put_line (s || "..." ); τέλος ;

Τετραγωνική εξίσωση:

Παράδειγμα για εκδόσεις Oracle 10g SQL, Oracle 11g SQL

Αυτό το παράδειγμα δοκιμάστηκε σε SQL*Plus, TOAD και PL/SQL Developer.

Η καθαρή SQL σάς επιτρέπει να εισάγετε μεταβλητές κατά την εκτέλεση του ερωτήματος με τη μορφή αντικαταστάσιμων μεταβλητών. Για να ορίσετε μια τέτοια μεταβλητή, το όνομά της (σε αυτήν την περίπτωση, A, B και C) θα πρέπει να χρησιμοποιείται με το συμπλεκτικό σύμβολο & μπροστά από αυτό όποτε χρειάζεται αναφορά στη μεταβλητή. Όταν εκτελείται το ερώτημα, ζητείται από τον χρήστη να εισαγάγει τις τιμές όλων των μεταβλητών αντικατάστασης που χρησιμοποιούνται στο ερώτημα. Μόλις εισαχθούν οι τιμές, κάθε αναφορά σε μια τέτοια μεταβλητή αντικαθίσταται με την τιμή της και το αίτημα που προκύπτει εκτελείται.

Υπάρχουν διάφοροι τρόποι εισαγωγής τιμών για μεταβλητές αντικατάστασης. Σε αυτό το παράδειγμα, της πρώτης αναφοράς σε κάθε μεταβλητή προηγείται ένα διπλό σύμφωνο && αντί για ένα μονό συμπλεκτικό σύμφωνο. Με αυτόν τον τρόπο, η τιμή για κάθε μεταβλητή εισάγεται μόνο μία φορά και όλες οι επόμενες αναφορές σε αυτήν θα αντικατασταθούν με την ίδια τιμή (όταν χρησιμοποιείται ένα μεμονωμένο σύμφωνο στο SQL*Plus, η τιμή για κάθε αναφορά στην ίδια μεταβλητή πρέπει να εισαχθεί χωριστά ). Στο PL/SQL Developer, όλες οι αναφορές μεταβλητών πρέπει να προηγούνται από ένα μόνο & χαρακτήρα, διαφορετικά θα προκύψει σφάλμα ORA-01008 "Not all variables bound".

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

Το ίδιο το αίτημα αποτελείται από τέσσερα διαφορετικά αιτήματα. Κάθε ερώτημα επιστρέφει μια συμβολοσειρά που περιέχει το αποτέλεσμα του υπολογισμού σε μία από τις περιπτώσεις (A=0, D=0, D>0 και D<0) и ничего — в трех остальных случаях. Результаты всех четырех запросов объединяются, чтобы получить окончательный результат.

αλλαγή του συνόλου συνεδριών NLS_NUMERIC_CHARACTERS = "." επιλέξτε "Δεν είναι τετραγωνική εξίσωση." ans από το dual όπου && A = 0 ένωση επιλέξτε "x =" || to_char (-&& B / 2 /& A ) από dual όπου & A != 0 και & B *& B - 4 *& A *&& C = 0 ένωση επιλέξτε "x1 = " || to_char ((-& B + sqrt (& B *& B - 4 *& A *& C )) / 2 /& A ) || ", x2 = " || to_char (-& B - sqrt (& B *& B - 4 *& A *& C )) / 2 /& A from dual where & A != 0 and & B *& B - 4 *& A *& C > 0 ένωση επιλέξτε "x1 = (" || to_char (-& B / 2 /& A ) || "," || to_char (sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) ||. "), " || "x2 = (" || to_char (-& B / 2 /& A ) || "," || to_char (- sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || ")" από διπλό όπου & A != 0 και & B *& B - 4 *& A *& C< 0 ;

PHP και βάσεις δεδομένων

Η ικανότητα αποτελεσματικής αποθήκευσης και ανάκτησης μεγάλων ποσοτήτων πληροφοριών έχει συμβάλει τεράστια στην επιτυχή ανάπτυξη του Διαδικτύου. Συνήθως χρησιμοποιούνται βάσεις δεδομένων για την αποθήκευση πληροφοριών. Η λειτουργία γνωστών τοποθεσιών όπως το Yahoo, το Amazon και το Ebay εξαρτάται σε μεγάλο βαθμό από την αξιοπιστία των βάσεων δεδομένων που αποθηκεύουν τεράστιες ποσότητες πληροφοριών. Φυσικά, η υποστήριξη βάσεων δεδομένων δεν είναι μόνο προς όφελος των γιγάντων εταιρειών - οι προγραμματιστές ιστού έχουν στη διάθεσή τους αρκετές ισχυρές υλοποιήσεις βάσεων δεδομένων, που διανέμονται με σχετικά χαμηλό κόστος (ή ακόμα και δωρεάν).

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

Το κεφάλαιο ξεκινά με μια λεπτομερή περιγραφή της ανάκτησης και της ενημέρωσης δεδομένων στο MySQL, ίσως το πιο δημοφιλές DBMS που χρησιμοποιείται στην PHP (http://www.mysql.com). Χρησιμοποιώντας τη MySQL ως παράδειγμα, θα δείξουμε πώς τα δεδομένα στη βάση δεδομένων φορτώνονται και ενημερώνονται στην PHP. Θα εξετάσουμε τα βασικά εργαλεία αναζήτησης και ταξινόμησης που χρησιμοποιούνται σε πολλές εφαρμογές Ιστού. Στη συνέχεια, θα προχωρήσουμε στην υποστήριξη της PHP για το ODBC (Open Data Base Connectivity), μια γενική διεπαφή που μπορεί να χρησιμοποιηθεί για σύνδεση σε διαφορετικά DBMS ταυτόχρονα. Η υποστήριξη ODBC στην PHP θα αποδειχθεί με τη σύνδεση και την ανάκτηση δεδομένων από μια βάση δεδομένων της Microsoft Access. Το κεφάλαιο ολοκληρώνεται με ένα έργο που χρησιμοποιεί PHP και MySQL για να δημιουργήσει έναν ιεραρχικό κατάλογο που περιέχει πληροφορίες σχετικά με τους αγαπημένους ιστότοπους. Κατά την προσθήκη νέων τοποθεσιών στον κατάλογο, ο χρήστης τους εκχωρεί σε μία από τις τυπικές κατηγορίες που ορίζει ο διαχειριστής του ιστότοπου.

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

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

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

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

Ρύζι. 11.1.Παράδειγμα σχεσιακής βάσης δεδομένων

Όπως φαίνεται από το Σχ. 11.1, κάθε πίνακας αποτελείται από γραμμές (εγγραφές) και στήλες (πεδία). Σε κάθε πεδίο εκχωρείται ένα μοναδικό (εντός του πίνακα) όνομα. Παρατηρήστε τη σχέση μεταξύ του πελάτη και των πινάκων παραγγελιών, που υποδεικνύεται με ένα βέλος. Στις πληροφορίες παραγγελίας περιλαμβάνεται ένα σύντομο αναγνωριστικό πελάτη, το οποίο αποφεύγει την περιττή αποθήκευση του ονόματος και άλλων στοιχείων του πελάτη. Υπάρχει μια ακόμη σχέση στη βάση δεδομένων που εμφανίζεται - μεταξύ των πινάκων παραγγελιών και προϊόντων. Αυτή η σύνδεση δημιουργείται χρησιμοποιώντας το πεδίο prod_id, το οποίο αποθηκεύει το αναγνωριστικό του προϊόντος που παραγγέλθηκε από αυτόν τον πελάτη (που ορίζεται από το πεδίο custjd). Η ύπαρξη αυτών των συνδέσεων καθιστά εύκολη την αναφορά πλήρων δεδομένων πελατών και προϊόντων χρησιμοποιώντας απλά αναγνωριστικά. Μια σωστά οργανωμένη βάση δεδομένων γίνεται ένα ισχυρό εργαλείο για την οργάνωση και την αποτελεσματική αποθήκευση δεδομένων με ελάχιστο πλεονασμό. Θυμηθείτε αυτή τη βάση δεδομένων, θα αναφερθώ συχνά σε αυτήν σε περαιτέρω παραδείγματα.

Πώς εκτελούνται λοιπόν οι λειτουργίες σχεσιακής βάσης δεδομένων; Για να γίνει αυτό, η SQL έχει ένα ειδικό σύνολο γενικών εντολών - όπως SELECT, INSERT, UPDATE και DELETE. Για παράδειγμα, εάν πρέπει να λάβετε τη διεύθυνση email ενός πελάτη με ID 2001cu (βλ. Εικόνα 11.1), πρέπει απλώς να εκτελέσετε την ακόλουθη εντολή SQL:

SELECT cust_email FROM πελάτες WHERE custjd = "2001cu"

Όλα είναι πολύ λογικά, έτσι δεν είναι; Συνοπτικά, η εντολή μοιάζει με αυτό:

SELECT field_name FROM table_name [ WHERE συνθήκη ]

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

ΕΠΙΛΕΞΤΕ cust_email ΑΠΟ πελάτες

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

INSERT στα προϊόντα VALUES ("1009pr", "Red Tomatoes", "1,43");

Εάν αργότερα χρειαστεί να διαγράψετε αυτά τα δεδομένα, χρησιμοποιήστε την ακόλουθη εντολή:

ΔΙΑΓΡΑΦΗ ΑΠΟ προϊόντα ΠΟΥ prod_id = 1009r";

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

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

Εφόσον διαβάζετε αυτό το βιβλίο, πιθανώς αναρωτιέστε πώς να εργαστείτε με βάσεις δεδομένων στον Ιστό; Κατά κανόνα, πρώτα, χρησιμοποιώντας μερικά

ή μια γλώσσα διεπαφής (PHP, Java ή Perl), δημιουργείται μια σύνδεση με τη βάση δεδομένων, μετά την οποία το πρόγραμμα έχει πρόσβαση στη βάση δεδομένων με ερωτήματα χρησιμοποιώντας ένα τυπικό σύνολο εργαλείων. Μια γλώσσα διεπαφής μπορεί να θεωρηθεί ως ένα είδος «κόλλας» που συνδέει τη βάση δεδομένων με τον Ιστό. Γυρίζω στην αγαπημένη μου γλώσσα front-end - PHP.