Απλά ερωτήματα SQL - σύντομη βοήθεια και παραδείγματα. Παραδείγματα ερωτημάτων SQL στο MariaDB (MySQL)

Αυτο 16.07.2019
Επισκόπηση προγράμματος Η έκδοση υπολογιστή του Microsoft Excel Viewer θα επιτρέψει...

Chercher

Αυτο Σύνταξη:* Οπου πεδία 1— το όνομα του πίνακα από τον οποίο εξάγουμε δεδομένα· συνθήκες— συνθήκες δειγματοληψίας· πεδία 2— πεδίο ή πεδία διαχωρισμένα με κόμματα με τα οποία γίνεται η ταξινόμηση. μετρώ— αριθμός γραμμών για μεταφόρτωση.
* Το ερώτημα σε αγκύλες δεν απαιτείται για την ανάκτηση δεδομένων.

Απλά παραδείγματα χρήσης επιλογής

1. Κανονική δειγματοληψία δεδομένων:

> ΕΠΙΛΟΓΗ * ΑΠΟ χρήστες

2. Δειγματοληψία δεδομένων με ένωση δύο πινάκων (JOIN):

SELECT u.name, r.* FROM users u JOIN users_rights r ON r.user_id=u.id

* σε αυτό το παράδειγμα, γίνεται δειγματοληψία δεδομένων με ενωμένους πίνακες χρήστεςΚαι δικαιώματα_χρήστη. Τους ενώνουν χωράφια ταυτότητα χρήστη(στον πίνακα user_rights) και ταυτότητα(χρήστες). Το πεδίο ονόματος ανακτάται από τον πρώτο πίνακα και όλα τα πεδία από τον δεύτερο.

3. Δειγματοληψία με χρονικά διαστήματα και/ή ημερομηνία

α) το σημείο εκκίνησης και ένα ορισμένο χρονικό διάστημα είναι γνωστά:

* Θα επιλεγούν δεδομένα για την τελευταία ώρα (πεδίο ημερομηνία).

β) η ημερομηνία έναρξης και η ημερομηνία λήξης είναι γνωστές:

25.10.2017 Και 25.11.2017 .

γ) οι ημερομηνίες έναρξης και λήξης + η ώρα είναι γνωστές:

* επιλέξτε δεδομένα μεταξύ 25/03/2018 0 ώρες 15 λεπτάΚαι 25/04/2018 15 ώρες 33 λεπτά και 9 δευτερόλεπτα.

δ) εξάγει δεδομένα για συγκεκριμένο μήνα και έτος:

* εξαγωγή δεδομένων όπου βρίσκεται στο πεδίο ημερομηνίαυπάρχουν τιμές για Απρίλιος 2018της χρονιάς.

4. Δειγματοληψία μέγιστων, ελάχιστων και μέσων τιμών:

> ΕΠΙΛΟΓΗ μέγ.(περιοχή), ελάχ.(περιοχή), μέση(περιοχή) ΑΠΟ χώρα

* Μέγιστη— μέγιστη τιμή· ελάχ- ελάχιστο μέσος όρος- μέση τιμή.

5. Χρήση μήκους συμβολοσειράς:

* αυτό το ερώτημα πρέπει να εμφανίζει όλους τους χρήστες των οποίων το όνομα αποτελείται από 5 χαρακτήρες.

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

1. Συνένωση με ομαδοποίηση επιλεγμένων δεδομένων σε μία σειρά (GROUP_CONCAT):

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

2. Ομαδοποίηση δεδομένων κατά δύο ή περισσότερα πεδία:

> ΕΠΙΛΟΓΗ * ΑΠΟ χρήστες GROUP BY CONCAT(τίτλος, "::", γέννηση)

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

3. Αποτελέσματα συγχώνευσης από δύο πίνακες (UNION):

> (ΕΠΙΛΟΓΗ αναγνωριστικού, fio, διεύθυνση, "Χρήστες" ως τύποι χρήστες FROM)
ΕΝΩΣΗ
(ΕΠΙΛΟΓΗ αναγνωριστικού, fio, διεύθυνση, "Πελάτες" ως τύποι πελάτες FROM)

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

4. Δείγμα μέσων όρων ομαδοποιημένων για κάθε ώρα:

ΕΠΙΛΟΓΗ μέσης (θερμοκρασία), DATE_FORMAT (ημερομηνία-ενημέρωση, "%Y-%m-%d %H") ως ώρα_ημερομηνίας ώρας από την αρχειοθέτηση GROUP BY DATE_FORMAT(ημερομηνία ενημέρωσης, "%Y-%m-%d %H")

*εδώ εξάγουμε τη μέση τιμή του πεδίου θερμοκρασίααπό το τραπέζι αρχείοκαι ομάδα ανά πεδίο ενημερωμένη ημερομηνία ώρας(με διαίρεση χρόνου για κάθε ώρα).

ΕΙΣΑΓΕΤΕ

Σύνταξη 1:

> INSERT INTO

() ΑΞΙΕΣ ( )

Σύνταξη 2:

> INSERT INTO

ΑΞΙΕΣ ( )

Αυτο πεδία 1— το όνομα του πίνακα στον οποίο εισάγουμε τα δεδομένα· χωράφια— πεδία λίστας διαχωρισμένα με κόμμα.αξίες— καταχώριση τιμών διαχωρισμένων με κόμμα.
* η πρώτη επιλογή θα σας επιτρέψει να εισαγάγετε μόνο τα πεδία που αναφέρονται - τα υπόλοιπα θα λάβουν προεπιλεγμένες τιμές. Η δεύτερη επιλογή θα απαιτεί εισαγωγή για όλα τα πεδία.

Παραδείγματα χρήσης ένθετου

1. Εισαγωγή πολλαπλών σειρών με ένα ερώτημα:

> ΕΙΣΑΓΩΓΗ ΣΤΙΣ πόλεις ("όνομα", "χώρα") ΑΞΙΕΣ ("Μόσχα", "Ρωσία"), ("Παρίσι", "Γαλλία"), ("Funafuti" , "Tuvalu");

* Σε αυτό το παράδειγμα θα προσθέσουμε 3 εγγραφές σε ένα ερώτημα SQL.

2. Εισαγωγή από άλλο πίνακα (αντιγραφή σειρών, INSERT + SELECT):

* εξαγάγετε όλες τις εγγραφές από τον πίνακα πόλεις, των οποίων τα ονόματα αρχίζουν με "Μ" και τα εισάγετε στον πίνακα πόλεις-νέες.

Ενημέρωση (UPDATE)

Chercher

Αυτο πεδία 1— όνομα πίνακα· πεδίο— το πεδίο για το οποίο θα αλλάξουμε την τιμή. αξία- νέα έννοια. συνθήκες— κατάσταση (χωρίς αυτό, η ενημέρωση είναι επικίνδυνη - μπορείτε να αντικαταστήσετε όλα τα δεδομένα σε ολόκληρο τον πίνακα).

Ενημέρωση με χρήση αντικατάστασης (ΑΝΤΙΚΑΤΑΣΤΑΣΗ):

ΕΚΣΥΓΧΡΟΝΙΖΩ

ΣΕΙΡΑ = ΑΝΤΙΚΑΤΑΣΤΑΣΗ( , "<что меняем>", "<на что>");

ΕΝΗΜΕΡΩΣΗ πόλεων SET name = REPLACE(όνομα, "Maskva", "Moscow");

Αν θέλουμε να το παίξουμε με ασφάλεια, μπορούμε πρώτα να ελέγξουμε το αποτέλεσμα της αντικατάστασης χρησιμοποιώντας το SELECT:

Διαγραφή (ΔΙΑΓΡΑΦΗ)

Chercher

Αυτο πεδία 1— όνομα πίνακα· συνθήκες— κατάσταση (όπως στην περίπτωση του UPDATE, η χρήση του DELETE χωρίς προϋπόθεση είναι επικίνδυνη - το DBMS δεν θα ζητήσει επιβεβαίωση, αλλά απλώς θα διαγράψει όλα τα δεδομένα).

Δημιουργία πίνακα

Chercher

> ΔΗΜΙΟΥΡΓΙΑ ΤΡΑΠΕΖΙΟΥ

( , )

> ΔΗΜΙΟΥΡΓΗΣΤΕ ΠΙΝΑΚΑ ΕΑΝ ΔΕΝ ΥΠΑΡΧΕΙ `δικαιώματα_χρήστη` (
`id` int(10) ανυπόγραφο NOT NULL,
`user_id` int(10) ανυπόγραφο NOT NULL,
`rights` int(10) ανυπόγραφο NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Αυτο πεδία 1— όνομα πίνακα (στο παράδειγμα δικαιώματα_χρήστη); πεδίο1, πεδίο2— όνομα των πεδίων (στο παράδειγμα, δημιουργούνται 3 πεδία — id, user_id, δικαιώματα); επιλογές 1, επιλογές 2— παράμετροι πεδίου (στο παράδειγμα int(10) ανυπόγραφο NOT NULL); επιλογές τραπεζιού— γενικές παράμετροι πίνακα (στο παράδειγμα ENGINE=InnoDB DEFAULT CHARSET=utf8).

Χρήση αιτημάτων στην PHP

Σύνδεση στη βάση δεδομένων:

mysql_connect("localhost", "login", "password") ή die("Σφάλμα σύνδεσης MySQL");
mysql_select_db("db_name");
mysql_query("SET NAMES "utf8"");

* όπου η σύνδεση γίνεται σε μια βάση δεδομένων σε έναν τοπικό διακομιστή ( localhost) διαπιστευτήρια σύνδεσης - ΣύνδεσηΚαι Κωδικός πρόσβασης(αντίστοιχα, σύνδεση και κωδικός πρόσβασης). χρησιμοποιείται ως βάση db_name; κωδικοποίηση που χρησιμοποιείται UTF-8.

Μπορείτε επίσης να δημιουργήσετε μια μόνιμη σύνδεση:

mysql_pconnect("localhost", "login", "password") ή die("Σφάλμα σύνδεσης MySQL");

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

Πλήρης σύνδεση:

* στην PHP εκτελείται αυτόματα, εκτός από τις μόνιμες συνδέσεις (mysql_pconnect).

Ένα ερώτημα στη MySQL (Mariadb) στην PHP γίνεται με τη συνάρτηση mysql_query() και η ανάκτηση δεδομένων από το ερώτημα γίνεται με τη mysql_fetch_array():

$result = mysql_query("SELECT * FROM users");
ενώ ($mass = mysql_fetch_array($result)) (
ηχώ $μάζα . "
";
}

* σε αυτό το παράδειγμα έγινε ένα ερώτημα στον πίνακα χρήστες. Το αποτέλεσμα του ερωτήματος τοποθετείται σε μια μεταβλητή $result. Στη συνέχεια χρησιμοποιείται ο βρόχος ενώ, κάθε επανάληψη του οποίου ανακτά έναν πίνακα δεδομένων και τον τοποθετεί σε μια μεταβλητή $μάζα— σε κάθε επανάληψη εργαζόμαστε με μία σειρά της βάσης δεδομένων.

Η συνάρτηση mysql_fetch_array() που χρησιμοποιείται επιστρέφει έναν συσχετιστικό πίνακα, με τον οποίο είναι βολικό να εργαστεί κανείς, αλλά υπάρχει επίσης μια εναλλακτική - η mysql_fetch_row(), η οποία επιστρέφει έναν κανονικό αριθμημένο πίνακα.

Θωράκιση

Εάν πρέπει να συμπεριλάβετε έναν ειδικό χαρακτήρα στη συμβολοσειρά ερωτήματος, για παράδειγμα, %, πρέπει να χρησιμοποιήσετε το escaping χρησιμοποιώντας τον χαρακτήρα ανάστροφης κάθετο - \

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

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

Αυτό είναι όλο. Εάν χρειάζεστε βοήθεια για την ολοκλήρωση ενός αιτήματος, στείλτε μου email

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

  • Οι λέξεις-κλειδιά πληκτρολογούνται με κεφαλαία.
  • Η SQL και άλλοι ειδικοί όροι περικλείονται σε αγκύλες και πληκτρολογούνται με πλάγιους χαρακτήρες.(< και >)
  • Προαιρετικά μέρη εντολών περικλείονται σε αγκύλες ().
  • Μια έλλειψη (...) υποδηλώνει ότι το προηγούμενο μέρος της εντολής μπορεί να επαναληφθεί πολλές φορές.
  • Μια κάθετη γραμμή (|) σημαίνει ότι ό,τι προηγείται μπορεί να αντικατασταθεί από αυτό που ακολουθεί.
  • Οι σγουρές αγκύλες ((και)) υποδεικνύουν ότι τα πάντα μέσα τους πρέπει να αντιμετωπίζονται ως ακέραιος προκειμένου να αξιολογηθούν άλλοι χαρακτήρες (όπως κάθετες γραμμές ή ελλείψεις).
  • Τα διπλά άνω και κάτω τελεία και τα ίσα (:: =) σημαίνουν ότι αυτό που ακολουθεί είναι ο ορισμός του τι προηγείται.

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

    ΠΑΡΑΚΑΛΩ ΣΗΜΕΙΩΣΤΕ: Η ορολογία που χρησιμοποιούμε εδώ δεν είναι επίσημη ορολογία ANSI. Η επίσημη ορολογία μπορεί να είναι πολύ μπερδεμένη, οπότε την έχουμε απλοποιήσει κάπως.

    Για αυτόν τον λόγο, μερικές φορές χρησιμοποιούμε συνθήκες διαφορετικές από το ANSI ή χρησιμοποιούμε τις ίδιες συνθήκες αλλά με ελαφρώς διαφορετικό τρόπο. Για παράδειγμα, ο ορισμός μας είναι< predicate >διαφέρει από τον συνδυασμό τυπικού ορισμού ANSI< predicate >Με< search condition >.

    ΣΤΟΙΧΕΙΑ SQL

    Αυτή η ενότητα ορίζει τα στοιχεία των εντολών SQL. Χωρίζονται σε δύο κατηγορίες: Βασικά στοιχεία της γλώσσας, Και Λειτουργικά στοιχεία της γλώσσας.

    Βασικά στοιχεία- αυτά είναι δημιουργημένα μπλοκ γλώσσας. Όταν η SQL εξετάζει μια εντολή, πρώτα αξιολογεί κάθε χαρακτήρα στο κείμενο της εντολής ως προς αυτά τα στοιχεία. Διαχωριστές< separator >Διαχωρίστε ένα μέρος της ομάδας από το άλλο. ό,τι βρίσκεται ανάμεσα στους διαχωριστές< separator >επεξεργάζεται ως ενότητα. Με βάση αυτή τη διαίρεση, η SQL ερμηνεύει την εντολή.

    Λειτουργικά στοιχείαείναι διάφορα άλλα πράγματα εκτός από λέξεις-κλειδιά που μπορούν να ερμηνευθούν ως ενότητες. Αυτά είναι τα μέρη μιας εντολής που χωρίζονται με οριοθέτες< separator >, που έχουν ιδιαίτερη σημασία στην SQL. Ορισμένες από αυτές είναι ειδικές για ορισμένες εντολές και θα περιγραφούν μαζί με αυτές τις εντολές αργότερα σε αυτό το παράρτημα. Τα στοιχεία που παρατίθενται εδώ είναι κοινά σε όλες τις εντολές που περιγράφονται. Τα λειτουργικά στοιχεία μπορούν να οριστούν μεταξύ τους ή ακόμη και με τους δικούς τους όρους. Για παράδειγμα, το κατηγόρημα< predicate >, η τελευταία και πιο δύσκολη περίπτωση μας, περιέχει ένα κατηγόρημα μέσα στον δικό του ορισμό. Αυτό συμβαίνει γιατί το κατηγόρημα< predicate >Η χρήση AND ή OR μπορεί να περιέχει οποιοδήποτε αριθμό κατηγορημάτων< predicate >που μπορεί να λειτουργήσει αυτόνομα. Σας παρουσιάσαμε το κατηγόρημα< predicate >σε ξεχωριστή ενότητα σε αυτό το παράρτημα, λόγω της διαφορετικότητας και της πολυπλοκότητας αυτού του λειτουργικού στοιχείου της γλώσσας. Θα είναι συνεχώς παρών όταν συζητά άλλα λειτουργικά μέρη των ομάδων.

    ΣΤΟΙΧΕΙΑ ΤΗΣ ΒΑΣΙΚΗΣ ΓΛΩΣΣΑΣ

    ΟΡΙΣΜΟΣ ΣΤΟΙΧΕΙΟΥ< separator > < comment > | < space > | < newline > < comment > --< string > < newline > < space >χώρος< newline >καθορισμένο από την υλοποίηση τέλος συμβολοσειράς χαρακτήρων< identifier > < letter >[{< letter or digit > | < underscore}... ] < ИМЕЙТЕ ВВИДУ: Следу строгому стандарту ANSI, символы должны быть набраны в верхнем регистра, а идентификатор < identifier >δεν πρέπει να είναι μεγαλύτερος από 18 χαρακτήρες. ΟΡΙΣΜΟΣ ΣΤΟΙΧΕΙΟΥ< underscore > - < percent sign > % < delimiter >οποιοδήποτε από τα ακόλουθα: , ()< > . : = + " - | <> > = < = или < string > < string >[οποιοδήποτε δακτυλογραφημένο κείμενο σε μονά εισαγωγικά] Σημείωση: In< string >, δύο διαδοχικά μονά εισαγωγικά (" ") ερμηνεύονται ως ένα (").< SQL term >τελειώνει ανάλογα με την κύρια γλώσσα. (*μόνο ένθετο*)

    ΛΕΙΤΟΥΡΓΙΚΑ ΣΤΟΙΧΕΙΑ

    Ο παρακάτω πίνακας δείχνει τα λειτουργικά στοιχεία των εντολών SQL και τους ορισμούς τους: ΟΡΙΣΜΟΣ ΣΤΟΙΧΕΙΟΥ< query >ρήτρα SELECT< subquery >Μια ρήτρα SELECT που περικλείεται σε παρένθεση μέσα σε μια άλλη πρόταση που, στην πραγματικότητα, αξιολογείται ξεχωριστά για κάθε υποψήφια γραμμή της άλλης ρήτρας.< value expression > < primary > | < primary > < operator > < primary > | < primary > < operator > < value expression > < operator >οποιοδήποτε από τα ακόλουθα: + - / *< primary > < column name > | < literal > | < aggregate function > | < built-in constant > | < nonstandard function > < literal > < string > | < mathematical expressio ЭЛЕМЕНТ ОПРЕДЕЛЕНИЕ < built-in constant >ΧΡΗΣΤΗΣ |< implementation-dehned constant > < table name > < identifier > < column spec > [< table name > | < alias >.]< column name > < grouping column > < column spec > | < integer > < ordering column > < column spec > | < integer > < colconstraint >ΟΧΙ ΜΗΧΑΝΟ | ΜΟΝΑΔΙΚΟ | ΕΛΕΓΧΟΣ (< predicate >) | ΚΥΡΙΟ ΚΛΕΙΔΙ | ΒΙΒΛΙΟΓΡΑΦΙΚΕΣ ΑΝΑΦΟΡΕΣ< table name >[(< column name >)] < tabconstraint >ΜΟΝΑΔΙΚΟ (< column list >) | ΕΛΕΓΧΟΣ (< predicate >) | ΠΡΩΤΕΥΩΝ ΚΛΕΙΔΙ (< column list >) | ΞΕΝΟ ΚΛΕΙΔΙ (< column list >) ΒΙΒΛΙΟΓΡΑΦΙΚΕΣ ΑΝΑΦΟΡΕΣ< table name >[(< column list >)] < defvalue >ΠΡΟΕΠΙΛΟΓΗ ΤΙΜΗ =< value expression > < data type >Έγκυρος τύπος δεδομένων (Δείτε το Παράρτημα Β για περιγραφή των τύπων που παρέχονται από το ANSI ή το Παράρτημα Γ για άλλους συνήθεις τύπους.)< size >Η τιμή εξαρτάται από< data type >(Βλ. Παράρτημα Β.)< cursor name > < identifier > < index name > < identifier > < synonym > < identifier >(*μη τυπικό*)< owner > < Authorization ID > < column list > < column spec > .,.. < value list > < value expression > .,.. < table reference > { < table name > [< alias >] } .,..

    ΠΡΟΓΡΑΜΜΑΤΑ

    Τα παρακάτω ορίζουν μια λίστα διαφορετικών τύπων κατηγορημάτων< predicate >περιγράφεται στις ακόλουθες σελίδες:

    < predicate > ::=

    { < comparison predicate > | < in predicate > | < null predicate > | < between predicate > | < like predicate > | < quantified predicate > | < exists predicate > } < predicate >είναι μια έκφραση που μπορεί να είναι αληθής, ψευδής ή άγνωστη, εκτός< exists predicate >Και< null predicate >, το οποίο μπορεί να είναι μόνο αληθές ή ψευδές.

    Θα ληφθεί ένα άγνωστο εάν οι τιμές NULL εμποδίζουν την έξοδο της ληφθείσας απάντησης. Αυτό θα συμβεί κάθε φορά που μια τιμή NULL συγκρίνεται με οποιαδήποτε τιμή. Οι τυπικοί τελεστές Boole - AND, OR και NOT - μπορούν να χρησιμοποιηθούν με κατηγόρημα. ΟΧΙ αληθής = ψευδής, ΟΧΙ ψευδής = αληθής, και ΟΧΙ άγνωστος = άγνωστος. Τα αποτελέσματα των AND και OR σε συνδυασμό με κατηγορήματα φαίνονται στους παρακάτω πίνακες:

    ΚΑΙ ΚΑΙ Σωστό Λάθος Άγνωστο Αληθινό Σωστό Λάθος Άγνωστο Λάθος Λάθος Λάθος Λάθος Άγνωστο άγνωστο λάθος άγνωστο Ή Ή Σωστό Λάθος Άγνωστο

    Αυτοί οι πίνακες διαβάζονται με τρόπο παρόμοιο με έναν πίνακα πολλαπλασιασμού: συνδυάζετε τις αληθείς, ψευδείς ή άγνωστες τιμές από τις σειρές με τις στήλες τους για να λάβετε το αποτέλεσμα στο στόχαστρο. Σε έναν πίνακα ΚΑΙ, για παράδειγμα, η τρίτη στήλη (Άγνωστο) και η πρώτη σειρά (Αληθής) στην τομή στην επάνω δεξιά γωνία δίνουν το αποτέλεσμα - άγνωστο, με άλλα λόγια: Αληθές ΚΑΙ Άγνωστο = άγνωστο. Η σειρά των υπολογισμών καθορίζεται με παρένθεση. Δεν συστήνονται κάθε φορά. Το NOT αξιολογείται πρώτα, ακολουθούμενο από AND και OR. Διαφορετικοί τύποι κατηγορημάτων< predicate >συζητούνται χωριστά στην επόμενη ενότητα.

    < comparison predicate >(συγκριτικό κατηγόρημα)

    Σύνταξη

    < value expresslon > < relational op > < value expresslon > |
    < subquery >
    < relatlonal op > :: =
    =
    | <
    | >
    | <
    | >=
    | < >

    Εάν ένα από τα δύο< value expression >= NULL, ή< comparison predicate >= άγνωστο; Με άλλα λόγια, είναι αληθές εάν η σύγκριση είναι αληθής ή ψευδής εάν η σύγκριση είναι ψευδής.
    < relational op >έχει τυπικές μαθηματικές σημασίες για αριθμητικές τιμές. για άλλους τύπους τιμών, αυτές οι τιμές είναι συγκεκριμένες για την υλοποίηση.
    Και τα δυο< value expression >πρέπει να έχει συγκρίσιμους τύπους δεδομένων. Αν το υποερώτημα< subquery >χρησιμοποιείται, πρέπει να περιέχει μία έκφραση< value expression >στον όρο SELECT της οποίας η τιμή θα αντικαταστήσει τη δεύτερη παράσταση< value expression >σε συγκριτικό κατηγόρημα< comparision predicate >, κάθε φορά που< subquery >πραγματικά εκπληρώνεται.

    < between predicate >

    Σύνταξη

    < value expression >ΜΕΤΑΞΥ< value expression >
    ΚΑΙ< value expression >

    < between predicate >- A ΜΕΤΑΞΥ Β ΚΑΙ Γ , έχει την ίδια σημασία με< predicate >- (Α >= Β ΚΑΙ< = C). < between predicate >για τα οποία το Α ΔΕΝ ΜΕΤΑΞΥ Β ΚΑΙ Γ έχει την ίδια σημασία με το ΔΕΝ (ΜΕΤΑΞΥ Β ΚΑΙ Γ).< value expression >μπορεί να συναχθεί χρησιμοποιώντας ένα μη τυπικό ερώτημα< subquery >(*μη τυπικό*).

    < in prediicate >

    Σύνταξη

    < value expression >ΣΕ< value list > | < subquery >

    Κατάλογος αξιών< value list >θα αποτελείται από μία ή περισσότερες τιμές που αναφέρονται σε παρένθεση και χωρίζονται με κόμματα που έχουν συγκρίσιμα< value expression >Τύπος δεδομένων. Εάν χρησιμοποιείται υποερώτημα< subquery >, πρέπει να περιέχει μόνο μία έκφραση< value expression >στον όρο SELECT (πιθανόν περισσότερο, αλλά αυτό θα είναι εκτός του προτύπου ANSI). Υποερώτημα< subquery >στην πραγματικότητα, εκτελείται χωριστά για κάθε υποψήφια σειρά του κύριου ερωτήματος και οι τιμές που θα εξάγει θα σχηματίσουν μια λίστα τιμών< value list >για αυτή τη γραμμή. Σε κάθε περίπτωση, το κατηγόρημα< in predicate >θα ισχύει αν η έκφραση< value expression >αντιπροσωπεύονται σε μια λίστα τιμών< value list >, εάν ΔΕΝ προσδιορίζεται. Η φράση Α ΔΕΝ ΣΕ (Β, Γ) είναι ισοδύναμη με τη φράση ΔΕΝ (Α ΣΕ (Β, Γ)).

    < like predicate >

    Σύνταξη

    < charvalue >ΑΡΕΣΕΙ< pattern >

    < charvalue >είναι οποιαδήποτε *μη τυπική* έκφραση< value expression >αλφαριθμητικό τύπο.< charvalue >ίσως, σύμφωνα με το πρότυπο, μόνο μια συγκεκριμένη στήλη< column spec >. Δείγμα< pattern >αποτελείται από μια συμβολοσειρά που θα ελεγχθεί για αντιστοίχιση με< charvalue >. Σύμβολο τέλους< escapechar >είναι ένας μόνο αλφαριθμητικός χαρακτήρας. Μια αντιστοίχιση θα προκύψει εάν ισχύουν οι ακόλουθες συνθήκες:

  • Για κάθε υπογράμμιση< underscore >στο δείγμα< pattern >του οποίου δεν προηγείται χαρακτήρας τερματισμού< escapechar >, υπάρχει ένα αντίστοιχο σύμβολο< charvalue >.
  • Για κάθε< percent sign >στο δείγμα< pattern >, που δεν προηγείται< escapechar >, υπάρχουν μηδέν ή περισσότεροι χαρακτήρες που ταιριάζουν< charvalue >.
  • Για κάθε< escapechar >V< pattern >που δεν προηγείται ενός άλλου< escapechar >, δεν υπάρχει αντίστοιχος χαρακτήρας< charvalue >.
  • Για κάθε άλλο χαρακτήρα μέσα< pattern >, το ίδιο σύμβολο έχει οριστεί στην αντίστοιχη ένδειξη in< charvalue >.

    Εάν συμβεί ένα ταίριασμα,< like predicate >- αληθές εάν ΔΕΝ προσδιορίστηκε. Η φράση NOT LIKE "text" ισοδυναμεί με NOT (A LIKE "text").

    < null predicate >

    Σύνταξη

    < column spec >ΕΙΝΑΙ ΜΗΧΑΝΟ

    < column spec >= IS NULL εάν υπάρχει μια τιμή NULL σε αυτήν τη στήλη. Θα κάνει< null predicate >αληθές εάν δεν έχει καθοριστεί NULL. Φράση< column spec >ΔΕΝ ΕΙΝΑΙ NULL, έχει το ίδιο αποτέλεσμα με το NOT (< column spec >ΕΙΝΑΙ ΜΗΧΑΝΟ).

    < quantified predicate >

    Σύνταξη

    < value expression > < relational op >
    < quantifier > < subquery >
    < quantifier >::= ΟΠΟΙΑΔΗΠΟΤΕ | ΟΛΑ | ΜΕΡΙΚΟΙ

    Υποερώτημα SELECT< subquery >πρέπει να περιέχει μία και μόνο έκφραση τιμής< value expression >. Όλες οι τιμές επιστράφηκαν από το υποερώτημα< subquery >συνθέτουν ένα σύνολο αποτελεσμάτων< result set >. < value expression >σε σύγκριση με τη χρήση φορέα< relational operator >, με κάθε μέλος του συνόλου αποτελεσμάτων< result set >. Η σύγκριση αυτή αξιολογείται ως εξής:

  • Αν< quantifier >= ALL, και κάθε μέλος του συνόλου αποτελεσμάτων< result set >κάνει αυτή τη σύγκριση αληθινή,< quantified predicate >- αλήθεια.
  • Αν< quantifier >= ΟΠΟΙΟΔΗΠΟΤΕ και υπάρχει τουλάχιστον ένα μέλος από το σύνολο αποτελεσμάτων< result set >, που κάνει αυτή τη σύγκριση αληθινή, λοιπόν< quantified predicate >είναι σωστό.
  • Αν το αποτέλεσμα οριστεί< result set >άδειο λοιπόν< quantified predicate >αλήθεια αν< quantifier >= ALL , και false αν είναι διαφορετικά.
  • Αν< quantifier >= ΜΕΡΙΚΑ, το αποτέλεσμα είναι το ίδιο όπως για ΟΠΟΙΟΔΗΠΟΤΕ.
  • Αν< quantified predicate >ούτε αληθινός ούτε άπιστος, είναι άγνωστος.

    < exists predicate >

    Σύνταξη:

    ΥΠΑΡΧΕΙ (< subquery >)

    Αν το υποερώτημα< subquery >εκτυπώνει μία ή περισσότερες γραμμές εξόδου,< exists predicate >- πιστός και λανθασμένο αν είναι διαφορετικά.

    ΕΝΤΟΛΕΣ SQL

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

    KEEP IN MIND Οι εντολές που ξεκινούν με τη λέξη - EXEC SQL, καθώς και οι εντολές ή οι προτάσεις που τελειώνουν με τη λέξη - μπορούν να χρησιμοποιηθούν μόνο σε ένθετη SQL.

    ΕΝΑΡΞΗ ΔΗΛΩΣΗΣ ΕΝΟΤΗΤΑΣ

    Σύνταξη

    ΕΝΟΤΗΤΑ EXEC SQL BEGIN DECLARE< SQL term > < host-language variable declarations >EXEC SQL END DECLARE SECTION< SQL term >

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

    ΚΛΕΙΣΙΜΟ ΔΡΟΜΕΑ

    Σύνταξη

    EXEC SQL CLOSE CURSOR< cursor name > < SQL term >;

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

    ΔΕΣΜΕΥΣΗ (ΕΡΓΑΣΙΑ)

    Σύνταξη

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

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

    (*ΜΗ ΤΥΠΙΚΟ*)

    Σύνταξη

    ΔΗΜΙΟΥΡΓΙΑ ΕΥΡΕΤΗΡΙΟΥ< Index name >
    ΕΠΙ< table name > (< column list >);

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

    ΔΗΜΙΟΥΡΓΙΑ ΣΥΝΩΝΥΜΟΥ (*ΜΗ ΤΥΠΙΚΟ*)
    (ΔΗΜΙΟΥΡΓΙΑ ΣΥΝΩΝΥΜΟΥ) (*ΜΗ ΤΥΠΙΚΟ*)

    Σύνταξη

    ΔΗΜΙΟΥΡΓΙΑ ΣΥΝΩΝΥΜΟΥ IPUBLICl< synonym >ΓΙΑ
    < owner >.< table name >;

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

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

    Σύνταξη

    ΔΗΜΙΟΥΡΓΙΑ ΤΡΑΠΕΖΙΟΥ< table name >
    ({< column name > < data type >[< size >]
    [< colconstralnt > . . .]
    [< defvalue >]} . , . . < tabconstraint > . , . .);

    Η εντολή δημιουργεί έναν πίνακα στη βάση δεδομένων. Αυτός ο πίνακας θα ανήκει στον δημιουργό του. Οι στήλες θα ληφθούν υπόψη κατά σειρά ονόματος.< data type >- καθορίζει τον τύπο δεδομένων που θα περιέχει η στήλη. Πρότυπο< data type >περιγράφεται στο Παράρτημα Β. όλους τους άλλους τύπους δεδομένων που χρησιμοποιούνται< data type >, συζητείται στο Παράρτημα Γ . Τιμή μεγέθους< size >εξαρτάται από τον τύπο δεδομένων< data type >.
    < colconstraint >Και< tabconstraint >επιβάλλουν περιορισμούς στις τιμές που μπορούν να εισαχθούν σε μια στήλη.
    < defvalue >καθορίζει την (προεπιλεγμένη) τιμή που θα εισαχθεί αυτόματα εάν δεν έχει καθοριστεί άλλη τιμή για αυτήν τη σειρά. (Δείτε το Κεφάλαιο 17 για λεπτομέρειες σχετικά με την ίδια την εντολή CREATE TABLE και το Κεφάλαιο 18 ΚΑΙ για λεπτομέρειες σχετικά με τους περιορισμούς και< defvalue >).

    ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΒΟΛΗ

    Σύνταξη

    ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΒΟΛΗ< table name >
    ΟΠΩΣ ΚΑΙ< query >
    ;

    Η προβολή αντιμετωπίζεται όπως οποιοσδήποτε πίνακας στις εντολές SQL. Όταν μια εντολή αναφέρεται σε όνομα πίνακα< table name >, αίτηση< query >εκτελείται και η έξοδος του ταιριάζει με τα περιεχόμενα του πίνακα που καθορίζεται σε αυτήν την εντολή.
    Ορισμένες προβολές μπορούν να τροποποιηθούν, πράγμα που σημαίνει ότι οι εντολές τροποποίησης μπορούν να εκτελεστούν σε αυτές τις προβολές και να περάσουν στον πίνακα που αναφέρθηκε στο ερώτημα< query >. Εάν έχει καθοριστεί ΕΠΙΛΟΓΗ ΜΕ ΕΠΙΛΟΓΗ ΕΛΕΓΧΟΥ, αυτή η τροποποίηση πρέπει επίσης να ικανοποιεί την κατηγορούμενη συνθήκη< predicate >στο αίτημα< query >.

    ΔΗΛΩΣΤΕ ΔΡΟΜΕΡΑ

    Σύνταξη

    EXEC SQL DECLARE< cursor name >ΔΡΟΜΕΑΣ ΓΙΑ
    < query >< SQL term >

    Αυτή η εντολή τα συνδέει με τον κέρσορα< cursor name >, με αίτημα< query >. Όταν ο δρομέας είναι ανοιχτός (βλ. ΑΝΟΙΓΜΑ ΔΕΡΜΟΤΗΡΑ), το αίτημα< query >εκτελείται και το αποτέλεσμά του μπορεί να ληφθεί (με την εντολή FETCH) για έξοδο. Εάν ο δρομέας είναι τροποποιήσιμος, ο πίνακας που αναφέρεται από το ερώτημα< query >, μπορεί να λάβει μια αλλαγή στο περιεχόμενο χρησιμοποιώντας μια λειτουργία τροποποίησης στον κέρσορα (Βλ. Κεφάλαιο 25 σχετικά με τους τροποποιήσιμους δρομείς).

    ΔΙΑΓΡΑΦΩ

    Σύνταξη

    ΔΙΑΓΡΑΦΗ ΑΠΟ< table name >
    { ; }
    | ΟΠΟΥ ΤΡΕΧΟΝ ΤΗΣ< cursorname >< SQL term >

    Εάν λείπει η ρήτρα WHERE, ΟΛΕΣ οι σειρές στον πίνακα διαγράφονται. Αν η πρόταση WHERE χρησιμοποιεί κατηγόρημα< predicate >, σειρές που ικανοποιούν την συνθήκη αυτού του κατηγορήματος< predicate >διαγράφονται. Εάν η πρόταση WHERE έχει όρισμα CURRENT OF στο όνομα του δρομέα< cursor name >, σειρά από τραπέζι< table name >επί του παρόντος αναφέρεται από το όνομα του δρομέα< cursor name >θα διαγραφεί. Η φόρμα WHERE CURRENT μπορεί να χρησιμοποιηθεί μόνο σε ένθετη SQL και μόνο με τροποποιήσιμους δρομείς.

    EXEC SQL

    Σύνταξη

    EXEC SQL< embedded SQL command > < SQL term >

    Το EXEC SQL χρησιμοποιείται για να υποδείξει την αρχή όλων των εντολών SQL που είναι ένθετες σε άλλη γλώσσα.

    ΦΕΡΩ

    Σύνταξη

    EXEC SQL FETCH< cursorname >
    ΣΕ< host-varlable llst >< SQL term >

    Το FETCH λαμβάνει έξοδο από την τρέχουσα συμβολοσειρά ερωτήματος< query >, το εισάγει στη λίστα των κύριων μεταβλητών< host-variable list >και μετακινεί τον κέρσορα στην επόμενη γραμμή. Λίστα< host-variable list >μπορεί να περιλαμβάνει μια μεταβλητή δείκτη ως μεταβλητή στόχο (Βλ. Κεφάλαιο 25.)

    ΕΠΙΧΟΡΗΓΗΣΗ (ΔΙΚΑΙΩΜΑΤΑ ΜΕΤΑΒΙΒΑΣΗΣ)

    Σύνταξη (τυπική)

    ΧΟΡΗΓΗΣΤΕ ΟΛΟΥΣ
    | (ΕΠΙΛΕΓΩ
    | ΕΙΣΑΓΕΤΕ
    | ΔΙΑΓΡΑΦΩ
    | ΕΝΗΜΕΡΩΣΗ [(< column llst >)]
    | ΒΙΒΛΙΟΓΡΑΦΙΚΕΣ ΑΝΑΦΟΡΕΣ [(< column llst >) λ ) . , . .
    ΕΠΙ< table name > . , . .
    ΠΡΟΣ ΔΗΜΟΣΙΟ |< Authorization ID > . , . .
    ;

    Το όρισμα ALL, με ή χωρίς ΠΡΟΝΟΜΙΑ, περιλαμβάνει κάθε δικαίωμα στη λίστα των προνομίων. Το PUBLIC περιλαμβάνει όλους τους υπάρχοντες χρήστες και όλους αυτούς που θα δημιουργηθούν στο μέλλον. Αυτή η εντολή σάς επιτρέπει να μεταφέρετε δικαιώματα για την εκτέλεση ενεργειών σε έναν πίνακα με καθορισμένο όνομα. REFERENCES σάς επιτρέπει να δίνετε δικαιώματα χρήσης στηλών στη λίστα στηλών< column list >ως γονικό κλειδί για ένα ξένο κλειδί. Άλλα προνόμια αποτελούνται από το δικαίωμα εκτέλεσης εντολών για τις οποίες τα δικαιώματα υποδεικνύονται με το όνομά τους στον πίνακα. Το UPDATE είναι παρόμοιο με το REFERENCES και μπορεί να επιβάλει περιορισμούς σε ορισμένες στήλες. Η ΕΠΙΛΟΓΗ GRANT καθιστά δυνατή τη μεταφορά αυτών των προνομίων σε άλλους χρήστες.

    Σύνταξη (μη τυπική)

    GRANT DBA
    | ΠΟΡΟΣ
    | ΣΥΝΔΕΩ-ΣΥΩΔΕΟΜΑΙ... .
    ΠΡΟΣ ΤΗΝ< Authorization ID > . , . .
    | < privilege > . , . . }
    ΑΠΟ ( ΚΟΙΝ
    | < Authorization ID > . , . . };

    Προνόμιο< privelege >μπορεί να είναι οποιοδήποτε από αυτά που καθορίζονται στην εντολή GRANT. Ο χρήστης που δίνει το REVOKE πρέπει να έχει τα ίδια δικαιώματα με τον χρήστη που δίνει το GRANT. Η ρήτρα ON μπορεί να χρησιμοποιηθεί όταν ένα προνόμιο ειδικού τύπου χρησιμοποιείται σε ένα ειδικό αντικείμενο.

    ΕΠΙΤΡΟΠΗ (ΕΡΓΑΣΙΑ)
    (ΕΠΙΣΤΡΟΦΗ) (ΣΥΝΑΛΛΑΓΕΣ)

    Σύνταξη

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

    ΕΠΙΛΕΓΩ

    Σύνταξη

    ΕΠΙΛΟΓΗ ( ΔΙΑΚΟΣΤΟΣ | ΟΛΑ]< value expression > . , . . } / *
    ΑΠΟ< table reference > . , . .

    . , . . ];

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

  • Εάν δεν καθορίζονται ούτε ALL ούτε DISTINCT, θεωρείται ALL.
  • Εκφραση< value expression >περιλαμβάνει< column spec >, αθροιστική συνάρτηση< aggregate funct >, μη τυπική λειτουργία< nonstandard fu nction >, σταθερό< constant >, ή οποιονδήποτε συνδυασμό τους με τελεστές σε έγκυρες εκφράσεις.
  • Πίνακας αναφοράς< table reference >, αποτελείται από το όνομα του πίνακα, συμπεριλαμβανομένου του προθέματος κατόχου εάν ο τρέχων χρήστης δεν είναι ο κάτοχος, ή ένα συνώνυμο (μη τυπικό) για τον πίνακα. Ο πίνακας μπορεί να είναι είτε βασικός πίνακας είτε προβολή. Κατ 'αρχήν, ένα ψευδώνυμο μπορεί να υποδεικνύει ποιο ψευδώνυμο χρησιμοποιείται για έναν πίνακα μόνο για τη διάρκεια της τρέχουσας εντολής. Το όνομα ή το συνώνυμο του πίνακα πρέπει να διαχωρίζεται από το ψευδώνυμο με έναν ή περισσότερους οριοθέτες< separator >.
  • Εάν χρησιμοποιείται GROUP BY, όλες οι στήλες< column spec >που χρησιμοποιείται στον όρο SELECT θα πρέπει να χρησιμοποιηθεί ως ομάδα στηλών< grouping column >, εάν δεν περιέχονται στη συγκεντρωτική συνάρτηση< aggregate funct >. Ολόκληρη η ομάδα στηλών< grouping column >πρέπει να αντιπροσωπεύεται μεταξύ των εκφράσεων< value expressions >που καθορίζεται στην ρήτρα SELECT. Για κάθε διακριτό συνδυασμό τιμών ομάδας στηλών< grouping column >, θα υπάρχει μία και μόνο γραμμή εξόδου.
  • Αν χρησιμοποιείται HAVING, το κατηγόρημα< predicate >εφαρμόζεται σε κάθε σειρά που παράγεται από τον όρο GROUP BY και οι σειρές που κάνουν αυτό το κατηγόρημα αληθές θα εκτυπωθούν.
  • Εάν χρησιμοποιείται ORDER BY, η έξοδος έχει μια συγκεκριμένη σειρά. Αναγνωριστικό κάθε στήλης< column identifer >αναφέρεται στο καθορισμένο< value expression >στον όρο SELECT. Εάν αυτό< value expression >είναι η καθορισμένη στήλη< column spec >, < co lumn identifier >θα μπορούσε να είναι το ίδιο με< column spec >. Σε διαφορετική περίπτωση< co lumn identifier >μπορεί να είναι ένας θετικός ακέραιος αριθμός που δείχνει την τοποθεσία όπου< value expression >στην ακολουθία της ρήτρας SELECT. Η έξοδος θα δημιουργηθεί για να ταιριάζει στις τιμές που περιέχονται< column identifier >σε αύξουσα σειρά εάν δεν προσδιορίζεται DESC. Όνομα αναγνωριστικού στήλης< column identifier >αυτό που έρχεται πρώτο στον όρο ORDER BY θα προηγείται των επόμενων ονομάτων στον ορισμό της ακολουθίας εξόδου.

    Ο όρος SELECT αξιολογεί κάθε υποψήφια γραμμή ενός πίνακα στον οποίο οι σειρές εμφανίζονται ανεξάρτητα. Η υποψήφια συμβολοσειρά ορίζεται ως εξής:

  • Εάν υπάρχει μόνο ένας πίνακας αναφοράς< table reference >περιλαμβάνεται, κάθε γραμμή σε αυτόν τον πίνακα είναι με τη σειρά του μια υποψήφια γραμμή.
  • Εάν αναφέρονται περισσότεροι από ένας πίνακες< table reference >ενεργοποιημένη, κάθε γραμμή κάθε πίνακα πρέπει να συνδυαστεί με τη σειρά με κάθε συνδυασμό σειρών από όλους τους άλλους πίνακες. Κάθε τέτοιος συνδυασμός θα είναι με τη σειρά του μια υποψήφια συμβολοσειρά.

    Κάθε υποψήφια σειρά παράγει τιμές που κάνουν το κατηγόρημα< predicate >στην πρόταση WHERE είναι αληθής, ψευδής ή άγνωστη. Εάν δεν χρησιμοποιείται GROUP BY, το καθένα< value expression >εφαρμόζεται με τη σειρά σε κάθε υποψήφια συμβολοσειρά της οποίας η τιμή καθιστά αληθές το κατηγόρημα και το αποτέλεσμα αυτής της λειτουργίας είναι η έξοδος.
    Εάν χρησιμοποιείται GROUP BY, οι υποψήφιες σειρές συνδυάζονται χρησιμοποιώντας συναρτήσεις συγκεντρωτικών στοιχείων. Αν δεν υπάρχει κατηγόρημα< predicate >δεν έχει οριστεί, κάθε έκφραση< value expression >ισχύει για κάθε υποψήφια σειρά ή ομάδα. Εάν έχει καθοριστεί DISTINCT, οι διπλές σειρές θα αφαιρεθούν από την έξοδο.

    ΕΝΩΣΗ

    Σύνταξη

    < query >(ΕΝΩΣΗ< query > } . . . ;

    Έξοδος δύο ή περισσότερων ερωτημάτων< query >θα συγχωνευθούν. Κάθε αίτημα< query >πρέπει να περιέχει τον ίδιο αριθμό< value expression >στον όρο SELECT και με τέτοια σειρά ώστε 1.. n από το καθένα να είναι συμβατό με τύπο δεδομένων< data type >και μέγεθος< size >με 1.. ν όλα τα άλλα.

    ΕΚΣΥΓΧΡΟΝΙΖΩ

    Σύνταξη

    ΕΚΣΥΓΧΡΟΝΙΖΩ< table name >
    ΣΕΤ (< column name > = < value expression > } . , . .
    ([ ΟΠΟΥ< predlcate >]; }
    | {
    < SQL term >]}

    Η UPDATE αλλάζει τις τιμές σε κάθε στήλη με το όνομα< column name >στην αντίστοιχη τιμή< value expression >. Αν η πρόταση WHERE χρησιμοποιεί κατηγόρημα< predicate >, τότε μόνο σειρές πίνακα των οποίων οι τρέχουσες τιμές καθιστούν αυτό το κατηγόρημα< predicate >σωστό, υπόκειται σε αλλαγές. Εάν το WHERE χρησιμοποιεί τον όρο CURRENT OF, τότε οι τιμές στη σειρά του πίνακα με το όνομα< table name >βρίσκεται στον κέρσορα με το όνομα< cursor name >αλλάζουν. WHERE CURRENT OF είναι κατάλληλο μόνο για χρήση σε ένθετη SQL και μόνο με τροποποιήσιμους δρομείς. Εάν δεν υπάρχει όρος WHERE, όλες οι σειρές αλλάζουν.

    ΟΠΟΤΕ (ΚΑΘΕ ΦΟΡΑ)

    Σύνταξη

    EXEC SQL ΟΠΟΤΕ< SQLcond > < actlon > < SQL term >
    < SQLcond >::=SQLERROR | ΔΕΝ ΒΡΕΘΗΚΕ | SQLΠΡΟΕΙΔΟΠΟΙΗΣΗ
    (το τελευταίο είναι μη τυπικό)
    < action >::=ΣΥΝΕΧΕΙΑ | ΠΑΩ ΣΕ< target >| ΠΑΩ ΣΕ< target >
    < target >:: = εξαρτάται από τη γλώσσα υποδοχής

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

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

    Ταξινόμηση εντολών SQL

    Όλα τα τυπικά μπορούν να εξεταστούν με βάση τον σκοπό τους. Τα ακόλουθα σύνολα μπορούν να ληφθούν ως βάση για την άτυπη ταξινόμηση:

      Εντολές για δημιουργία ερωτημάτων.

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

      Εντολές για ενεργοποιητές και πίνακες συστήματος.

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

      Εντολές για εργασία με δεδομένα και πίνακες.

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

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

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

    Χρήση SQL στο MicrosoftAccess

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

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

    Ας δούμε ένα συγκεκριμένο παράδειγμα:

    SELECT Pe_Surname

    WHERE Pe_Name = "Mary";

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

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

    Χρήση εντολών SQL στην Oracle

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

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

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

    SELECTCONCAT(CONCAT(CONCAT('Υπάλληλος', όνομα), CONCAT(SUBSTR(fname, 0, 1), SUBSTR(otch, 0, 1)), CONCAT('δεκτός', αποδεκτή ημερομηνία)) FROM εργαζόμενοι WHERE αποδεκτή ημερομηνία > έως_ημερομηνία ( «01.01.80», «ηη.μμ.εεεε»);

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

    Χρήση SQL στο Διαδίκτυο

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

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

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

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

    $link = mysqli_connect("localhost", "root", "", "tester");

    if (!$link) die("Σφάλμα");

    $query = "δημιουργία χρηστών πίνακα(

    είσοδος VARCHAR(20),

    κωδικός πρόσβασης VARCHAR(20)

    if (mysqli_query($link, $query)) echo "Ο πίνακας δημιουργήθηκε.";

    elseecho "Ο πίνακας δεν δημιουργήθηκε: ".mysqli_error();

    mysqli_close($link);

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

    Η σύνταξη έχει τροποποιηθεί για το Web, αλλά βασίζεται σε εντολές MicrosoftSQLServer.

    Δημιουργία ερωτημάτων MicrosoftSQLServer

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

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

    Επιλέξτε * από το πρόσωπο

    Όπου P_BerthDay >= '01/01/2016' και P_BerthDay<= ‘03/01/2016’

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

    SelectP_Name - όνομα

    Π_Επώνυμο - επώνυμο

    Π_Πατρώνυμο - πατρώνυμο

    Όπου P_BerthDay >= '01/01/2016' και P_BerthDay<= ‘03/01/2016’

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

    Βασικές εντολές SQL για αλλαγή δεδομένων

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

      Ένθετο (μετβ. Εισαγωγή).

      Ενημέρωση (μετβ. Ενημέρωση).

      Διαγραφή (μετβ. Διαγραφή).

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

    Κατά κανόνα, πριν χρησιμοποιήσετε τέτοιες εντολές MSSQL, πρέπει να το σκεφτείτε και να λάβετε υπόψη όλες τις πιθανές συνέπειες της εκτέλεσής τους.

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

    Εισαγωγή εντολής

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

    Η εντολή Εισαγωγή προορίζεται για την εισαγωγή νέων δεδομένων σε έναν πίνακα και σας επιτρέπει να προσθέσετε ένα πλήρες σύνολο και επιλεκτικά.

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

    Εισαγάγετε στο πρόσωπο

    Επιλέξτε «Γκριγκόριεφ», «Βιτάλι», «Πέτροβιτς», «01/01/1988»

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

    Insertintoperson(P_Name, P_SurName,P_BerthDay)

    Τιμές ('David', 'Hook', '02/11/1986')

    Μια τέτοια εντολή θα γεμίσει μόνο τα καθορισμένα κελιά και όλα τα άλλα θα έχουν την τιμή null.

    Εντολή για αλλαγή δεδομένων

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

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

    Ορίστε P_BerthDay = '02/10/1986' όπου P_ID = 5

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

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

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

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

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

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

    ΔΗΜΙΟΥΡΓΙΑ ΔΙΑΔΙΚΑΣΙΑPrintPerson

    @DBsmalldatetime

    @DE smalldatetime

    ΕΠΙΛΟΓΗ * από το πρόσωπο

    FROM Human Resources.vEmployeeDepartmentHistory

    WHERE P_BerthDay >= @DB και P_BerthDay<= @DE

    ANDEndDateISNULL;

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

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

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

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

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

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

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

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

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

    δήλωση @ID int. @Date smalldatetime @nID int. @nDatesmalldatetime

    Δηλώστε τον κέρσορα C1 για επιλέξτε P_ID, P_BerthDay από Inserted

    Δήλωση δρομέα C2 για επιλεγμένο P_ID, P_BerthDay από διαγράφηκε

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

    εάν @ID = @nID και @nDate = "01/01/2016"

    sMasseges "Η λειτουργία δεν μπορεί να εκτελεστεί. Η ημερομηνία δεν είναι κατάλληλη"

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

    altertablePERSONdisabletriggerall - για να απενεργοποιήσετε όλους τους κανόνες ετικέτας που δημιουργήθηκαν για αυτόν τον πίνακα και, κατά συνέπεια, altertablePERSONenabletriggerall - για να τους ενεργοποιήσετε.

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

    συμπέρασμα

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

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

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

    Η γλώσσα 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 εφαρμόζει μια συγκεντρωτική συνάρτηση στο πεδίο. Για παράδειγμα, εάν έπρεπε να εκτελέσετε ένα ερώτημα για να λάβετε τον αριθμό των διευθύνσεων email για κάθε εταιρεία, η ρήτρα 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, βλ

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

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

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

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

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

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

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

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

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

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

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

    Μέση_τιμή

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

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

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

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

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



    Συνιστούμε να διαβάσετε

    Μπλουζα