Εκφράσεις πίνακα. Τρεις μαγικές λέξεις. Βασικές εντολές SQL για αλλαγή δεδομένων

Καθένας από εμάς συναντά και χρησιμοποιεί τακτικά διάφορες βάσεις δεδομένων. Όταν επιλέγουμε διεύθυνση ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ, εργαζόμαστε με μια βάση δεδομένων. Χρήση βάσεων δεδομένων υπηρεσίες αναζήτησης, τράπεζες για την αποθήκευση δεδομένων πελατών κ.λπ.

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

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

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

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

Στήλη και γραμμή- Όλοι έχουμε δουλέψει με υπολογιστικά φύλλα, τα οποία έχουν επίσης γραμμές και στήλες. Οποιος σχεσιακή βάσηΤα δεδομένα λειτουργούν με πίνακες με παρόμοιο τρόπο. Οι σειρές μερικές φορές ονομάζονται εγγραφές.

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

Τι είναι η SQL;

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

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

  • δημιουργία βάσεων δεδομένων και πινάκων.
  • δειγματοληψία δεδομένων·
  • προσθήκη εγγραφών.
  • τροποποίηση και διαγραφή πληροφοριών.

Τύποι δεδομένων SQL

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

Δημιουργούμε πίνακες και βάσεις δεδομένων

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

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

Μια νέα βάση δεδομένων δημιουργείται από τον χειριστή ΔΗΜΙΟΥΡΓΙΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ<наименование базы данных>; . Όπως μπορείτε να δείτε, η σύνταξη είναι απλή και συνοπτική.

Δημιουργούμε πίνακες μέσα στη βάση δεδομένων χρησιμοποιώντας την πρόταση CREATE TABLE με τις ακόλουθες παραμέτρους:

  • όνομα πίνακα
  • ονόματα στηλών και τύποι δεδομένων

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

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

ΔΗΜΙΟΥΡΓΙΑ ΕΠΙΤΡΑΠΕΖΙΟΥ Εμπορεύματος

(commodity_id CHAR(15) NOT NULL,

vendor_id CHAR(15) NOT NULL,

commodity_name CHAR(254) NULL,

commodity_price DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

Ο πίνακας αποτελείται από πέντε στήλες. Μετά το όνομα ακολουθεί ο τύπος δεδομένων, οι στήλες χωρίζονται με κόμμα. Η τιμή της στήλης μπορεί να δεχθεί κενές τιμές (NULL) ή πρέπει να συμπληρωθεί (NOT NULL), και αυτό καθορίζεται όταν δημιουργείται ο πίνακας.

Ανάκτηση δεδομένων από πίνακα

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

ΕΠΙΛΟΓΗ_όνομα_εμπόρευμα ΑΠΟ εμπόρευμα

Μετά την πρόταση SELECT καθορίζουμε το όνομα της στήλης για να λάβουμε πληροφορίες και το FROM ορίζει τον πίνακα.

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

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

SELECT commodity_id, commodity_name, commodity_price FROM Commodity

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

ΕΠΙΛΟΓΗ * ΑΠΟ εμπόρευμα

  • Επιπλέον, το SELECT υποστηρίζει:
  • Ταξινόμηση δεδομένων (ORDER BY operator)
  • Επιλογή σύμφωνα με τις προϋποθέσεις (ΠΟΥ)
  • Όρος ομαδοποίησης (GROUP BY)

Προσθέστε μια γραμμή

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

  • προσθέστε μια νέα ολόκληρη γραμμή.
  • μέρος κορδόνι?
  • αποτελέσματα ερωτημάτων.

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

INSERT INTO Commodity VALUES("106", "50", "Coca-Cola", "1.68", "Χωρίς αλκοόλη ,)

Παράδειγμα προστίθεται στον πίνακα καινουργιο ΠΡΟΪΟΝ. Οι τιμές παρατίθενται μετά τις VALUES για κάθε στήλη. Εάν δεν υπάρχει αντίστοιχη τιμή για τη στήλη, τότε πρέπει να καθοριστεί NULL. Οι στήλες συμπληρώνονται με τιμές με τη σειρά που καθορίστηκε κατά τη δημιουργία του πίνακα.

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

INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

VALUES("106", "50", "Coca-Cola")

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

Προσθήκη αποτελεσμάτων ερωτήματος

Το INSERT χρησιμοποιείται κυρίως για την προσθήκη σειρών, αλλά μπορεί επίσης να χρησιμοποιηθεί για την προσθήκη των αποτελεσμάτων μιας πρότασης SELECT.

Αλλαγή δεδομένων

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

  • Όλες οι σειρές στον πίνακα ενημερώνονται.
  • Μόνο για μια συγκεκριμένη γραμμή.

Το UPDATE αποτελείται από τρία κύρια στοιχεία:

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

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

ΕΝΗΜΕΡΩΣΗ ΣΕΤ Εμπορευμάτων commodity_price = "3.2" WHERE commodity_id = "106"

Καθορίσαμε το όνομα του πίνακα, στην περίπτωσή μας Commodity, όπου θα γίνει η ενημέρωση, μετά το SET - τη νέα τιμή της στήλης και βρήκαμε την επιθυμητή εγγραφή ορίζοντας την απαιτούμενη τιμή ID στο WHERE.

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

ΕΝΗΜΕΡΩΣΗ ΣΕΤ Εμπορευμάτων commodity_name='Fanta', commodity_price = "3.2" WHERE commodity_id = "106"

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

ΕΝΗΜΕΡΩΣΗ ΣΕΤ Εμπορευμάτων commodity_desc = NULL WHERE commodity_id = "106"

Αφαίρεση σειρών

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

  • Ορισμένες σειρές στον πίνακα διαγράφονται.
  • Όλες οι σειρές στον πίνακα διαγράφονται.

Ένα παράδειγμα διαγραφής μιας γραμμής από έναν πίνακα:

DELETE FROM Commodity WHERE commodity_id = "106"

Μετά το DELETE FROM υποδεικνύουμε το όνομα του πίνακα στον οποίο θα διαγραφούν οι σειρές. Ο όρος WHERE περιέχει την συνθήκη με την οποία οι σειρές θα επιλεγούν για διαγραφή. Στο παράδειγμα, διαγράφουμε τη σειρά προϊόντων με ID=106. Το να προσδιορίσετε το WHERE είναι πολύ σημαντικό γιατί Η παράλειψη αυτής της δήλωσης θα διαγράψει όλες τις σειρές στον πίνακα. Αυτό ισχύει και για την αλλαγή της τιμής των πεδίων.

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

Χρήση SQL στη Microsoft Access

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

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

Επεκτάσεις SQL

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

Οι πιο κοινές διάλεκτοι της γλώσσας:

  • Oracle Database - PL/SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL/pgSQL.

SQL στο Διαδίκτυο

Το MySQL DBMS διανέμεται υπό τη δωρεάν άδεια GNU General Public License. Υπάρχει εμπορική άδεια με δυνατότητα ανάπτυξης προσαρμοσμένων μονάδων. Πως συστατικόπεριλαμβάνεται στις πιο δημοφιλείς συγκροτήσεις διακομιστών Internet, όπως XAMPP, WAMP και LAMP, και είναι το πιο δημοφιλές DBMS για την ανάπτυξη εφαρμογών στο Διαδίκτυο.

Αναπτύχθηκε από την Sun Microsystems και επί του παρόντος υποστηρίζεται από την Oracle Corporation. Υποστηρίζονται βάσεις δεδομένων μεγέθους έως 64 terabyte, πρότυπο σύνταξης SQL:2003, αναπαραγωγή βάσεων δεδομένων και υπηρεσίες cloud.

Έτσι, στη βάση δεδομένων του φόρουμ μας υπάρχουν τρεις πίνακες: χρήστες (χρήστες), θέματα (θέματα) και αναρτήσεις (μηνύματα). Και θέλουμε να δούμε τι δεδομένα περιέχουν. Υπάρχει ένας τελεστής για αυτό στην SQL ΕΠΙΛΕΓΩ. Η σύνταξη για τη χρήση του είναι η εξής:

SELECT what_select FROM where_select;


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

Ας δούμε πρώτα όλες τις στήλες από τον πίνακα χρηστών:

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

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

ΕΠΙΛΕΞΤΕ id_user ΑΠΟ χρήστες.

Λοιπόν, αν θέλουμε να δούμε, για παράδειγμα, τα ονόματα και τα e-mail των χρηστών μας, τότε θα παραθέσουμε τις στήλες ενδιαφέροντος διαχωρισμένες με κόμματα:

ΕΠΙΛΕΞΤΕ όνομα, email ΑΠΟ χρήστες.

Ομοίως, μπορείτε να δείτε ποια δεδομένα περιέχουν οι άλλοι πίνακες μας. Ας δούμε τι θέματα έχουμε:

ΕΠΙΛΟΓΗ * ΑΠΟ ΘΕΜΑΤΑ.

Τώρα έχουμε μόνο 4 θέματα, αλλά τι γίνεται αν υπάρχουν 100 από αυτά; Θα ήθελα να εμφανίζονται, για παράδειγμα, με αλφαβητική σειρά. Υπάρχει μια λέξη-κλειδί για αυτό στην SQL ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑακολουθούμενο από το όνομα της στήλης με την οποία θα γίνει η ταξινόμηση. Η σύνταξη έχει ως εξής:

ΕΠΙΛΟΓΗ_όνομα_στήλης ΑΠΟ όνομα_πίνακα ΤΑΞΗ ΚΑΤΑ sort_column_name;



Από προεπιλογή η ταξινόμηση είναι σε αύξουσα σειρά, αλλά αυτή μπορεί να αλλάξει προσθέτοντας μια λέξη-κλειδί DESC

Τώρα τα δεδομένα μας ταξινομούνται με φθίνουσα σειρά.

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

Συγκρίνετε το αποτέλεσμα με το αποτέλεσμα του προηγούμενου ερωτήματος.

Πολύ συχνά δεν χρειαζόμαστε όλες τις πληροφορίες από τον πίνακα. Για παράδειγμα, θέλουμε να μάθουμε ποια θέματα δημιουργήθηκαν από τον χρήστη sveta (id=4). Υπάρχει μια λέξη-κλειδί για αυτό στην SQL ΟΠΟΥ, η σύνταξη για ένα τέτοιο αίτημα είναι η εξής:

Για το παράδειγμά μας, η συνθήκη είναι το αναγνωριστικό χρήστη, δηλ. Χρειαζόμαστε μόνο αυτές τις σειρές των οποίων η στήλη id_author περιέχει 4 (user ID sveta):

Ή θέλουμε να μάθουμε ποιος δημιούργησε το θέμα "ποδήλατα":

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

Χειριστής Περιγραφή
= (ίσο) Επιλέγονται τιμές ίσες με την καθορισμένη τιμή

Παράδειγμα:

ΕΠΙΛΟΓΗ * ΑΠΟ ΘΕΜΑΤΑ WHERE id_author=4;

Αποτέλεσμα:

> (περισσότερα) Επιλέγονται τιμές μεγαλύτερες από τις καθορισμένες

Παράδειγμα:

ΕΠΙΛΟΓΗ * ΑΠΟ θέματα WHERE id_author>2;

Αποτέλεσμα:

< (меньше) Επιλέγονται τιμές μικρότερες από τις καθορισμένες

Παράδειγμα:

ΕΠΙΛΟΓΗ * ΑΠΟ θέματα WHERE id_author
Αποτέλεσμα:

>= (μεγαλύτερο ή ίσο με) Επιλέγονται τιμές μεγαλύτερες και ίσες με την καθορισμένη τιμή

Παράδειγμα:

ΕΠΙΛΟΓΗ * ΑΠΟ θέματα WHERE id_author>=2;

Αποτέλεσμα:

<= (меньше или равно) Επιλέγονται τιμές μικρότερες και ίσες με την καθορισμένη τιμή

Παράδειγμα:

ΕΠΙΛΟΓΗ * ΑΠΟ θέματα WHERE id_author
Αποτέλεσμα:

!= (όχι ίσο) Επιλέγονται τιμές που δεν είναι ίσες με την καθορισμένη τιμή

Παράδειγμα:

ΕΠΙΛΟΓΗ * ΑΠΟ θέματα WHERE id_author!=1;

Αποτέλεσμα:

ΔΕΝ ΕΙΝΑΙ ΜΗΧΑΝΟ Επιλέγει σειρές που έχουν τιμές στο καθορισμένο πεδίο

Παράδειγμα:

ΕΠΙΛΟΓΗ * ΑΠΟ ΘΕΜΑΤΑ ΟΠΟΥ το id_author ΔΕΝ ΕΙΝΑΙ NULL.

Αποτέλεσμα:

ΕΙΝΑΙ ΜΗΧΑΝΟ Επιλέγει σειρές που δεν έχουν αξία στο καθορισμένο πεδίο

Παράδειγμα:

ΕΠΙΛΕΞΤΕ * ΑΠΟ ΘΕΜΑΤΑ ΠΟΥ το id_author ΕΙΝΑΙ NULL.

Αποτέλεσμα:

Κενό σύνολο - δεν υπάρχουν τέτοιες γραμμές.

ΜΕΣΑ (μεταξύ) Επιλέγονται οι τιμές μεταξύ των καθορισμένων τιμών

Παράδειγμα:

ΕΠΙΛΟΓΗ * ΑΠΟ ΘΕΜΑΤΑ WHERE id_author BETWEEN 1 AND 3;

Αποτέλεσμα:

IN (περιέχεται η τιμή) Επιλέγονται τιμές που αντιστοιχούν στις καθορισμένες τιμές

Παράδειγμα:

ΕΠΙΛΟΓΗ * ΑΠΟ θέματα WHERE id_author IN (1, 4);

Αποτέλεσμα:

NOT IN (η τιμή δεν περιλαμβάνεται) Επιλέγονται τιμές άλλες από αυτές που καθορίζονται

Παράδειγμα:

ΕΠΙΛΟΓΗ * ΑΠΟ ΘΕΜΑΤΑ WHERE id_author NOT IN (1, 4);

Αποτέλεσμα:

LIKE (ταίριασμα) Επιλέγονται τιμές που ταιριάζουν με το μοτίβο

Παράδειγμα:

ΕΠΙΛΕΞΤΕ * ΑΠΟ ΘΕΜΑΤΑ ΟΠΟΥ το όνομα_του θέματος LIKE "led%";

Αποτέλεσμα:

Οι πιθανοί μεταχαρακτήρες για τον τελεστή LIKE θα συζητηθούν παρακάτω.

ΔΕΝ ΑΡΕΣΕΙ (δεν ταιριάζει) Επιλέγονται τιμές που δεν ταιριάζουν με το μοτίβο

Παράδειγμα:

ΕΠΙΛΟΓΗ * ΑΠΟ ΘΕΜΑΤΑ ΟΠΟΥ το όνομα_του θέματος ΔΕΝ ΑΡΕΣΕΙ στο "led%";

Αποτέλεσμα:

ΣΑΝ μεταχαρακτήρες χειριστή

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

Ο πιο συνηθισμένος μεταχαρακτήρας είναι % . Σημαίνει οποιαδήποτε σύμβολα. Για παράδειγμα, αν θέλουμε να βρούμε λέξεις που ξεκινούν με τα γράμματα "vel", τότε θα γράψουμε LIKE "vel%", και αν θέλουμε να βρούμε λέξεις που περιέχουν τους χαρακτήρες "club", τότε θα γράψουμε LIKE "% Λέσχη%". Για παράδειγμα:

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

Δώστε προσοχή στο διάστημα μεταξύ του μεταχαρακτήρα και του «ψαριού», εάν το παραλείψετε, το αίτημα δεν θα λειτουργήσει, επειδή μεταχαρακτήρας _ σημαίνει ακριβώς έναν χαρακτήρα και ένα διάστημα είναι επίσης χαρακτήρας.

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

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

Γι' αυτό ετοιμάσαμε μια σύντομη περιήγηση στα βασικά της SQL. Ας αρχίσουμε!

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

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

Ας δημιουργήσουμε έναν απλό πίνακα με το όνομα μήνας. Αποτελείται από 3 στήλες:

  • ταυτότητα– Αριθμός μήνα στο ημερολογιακό έτος (ακέραιος).
  • όνομα– Όνομα μήνα (συμβολοσειρά, έως 10 χαρακτήρες).
  • ημέρες– Αριθμός ημερών αυτού του μήνα (ακέραιος).

Έτσι θα μοιάζει το αντίστοιχο ερώτημα SQL:

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑΣ μήνες (αναγνωριστικό int, όνομα varchar(10), ημέρες int)

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

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ μηνών (αναγνωριστικό int, όνομα varchar(10), ημέρες int, ΚΥΡΙΑ ΚΛΕΙΔΙ (όνομα));

ημερομηνία και ώρα
Τύπος δεδομένωνΠεριγραφή
ΗΜΕΡΟΜΗΝΙΑΤιμές ημερομηνίας
ΗΜΕΡΟΜΗΝΙΑ ΩΡΑΟι τιμές ημερομηνίας και ώρας είναι ακριβείς ανά λεπτό
ΧΡΟΝΟΣΧρονικές αξίες

2. Εισαγωγή σειρών

Τώρα ας συμπληρώσουμε τον πίνακα μας μήνεςΧΡΗΣΙΜΕΣ ΠΛΗΡΟΦΟΡΙΕΣ. Η προσθήκη εγγραφών σε έναν πίνακα γίνεται χρησιμοποιώντας την πρόταση INSERT. Υπάρχουν δύο τρόποι για να γράψετε αυτήν την οδηγία.

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

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

Εδώ είναι η πρώτη τιμή στη λίστα ΑΞΙΕΣταιριάζει με το όνομα της πρώτης καθορισμένης στήλης κ.λπ.

3. Εξαγωγή δεδομένων από πίνακες

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

Η απλούστερη χρήση της πρότασης SELECT είναι ένα ερώτημα που επιστρέφει όλες τις στήλες και τις σειρές από έναν πίνακα (για παράδειγμα, πίνακες με όνομα χαρακτήρες):

ΕΠΙΛΟΓΗ * ΑΠΟ "χαρακτήρες"

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

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

SELECT id, όνομα ΑΠΟ μήνα

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

ΕΠΙΛΟΓΗ αναγνωριστικού, όνομα ΑΠΟ μήνα ΤΑΞΗ ΑΝΑ Όνομα DESC

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

4. Φιλτράρισμα δεδομένων

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

Σε αυτό το ερώτημα επιλέγουμε μόνο αυτούς τους μήνες από τον πίνακα μήνας, στις οποίες υπάρχουν περισσότερες από 30 ημέρες χρησιμοποιώντας τον τελεστή μεγαλύτερο από (>).

SELECT ID, όνομα ΑΠΟ μήνα WHERE ημέρες > 30

5. Προηγμένο φιλτράρισμα δεδομένων. τελεστές AND και OR

Προηγουμένως, χρησιμοποιούσαμε φιλτράρισμα δεδομένων χρησιμοποιώντας ένα μόνο κριτήριο. Για πιο σύνθετο φιλτράρισμα δεδομένων, μπορείτε να χρησιμοποιήσετε τους τελεστές AND και OR και τους τελεστές σύγκρισης (=,<,>,<=,>=,<>).

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


ΕΠΙΛΟΓΗ * ΑΠΟ άλμπουμ WHERE είδος = "rock" ΚΑΙ πωλήσεις_σε_εκατομμύρια<= 50 ORDER BY released

6. In/Between/Like

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

  • IN – χρησιμεύει για να υποδείξει μια σειρά από συνθήκες, οποιαδήποτε από τις οποίες μπορεί να εκπληρωθεί
  • BETWEEN – ελέγχει εάν μια τιμή βρίσκεται εντός του καθορισμένου εύρους
  • LIKE – αναζητά συγκεκριμένα μοτίβα

Για παράδειγμα, αν θέλουμε να επιλέξουμε άλμπουμ με κρότοςΚαι ψυχήμουσική, μπορούμε να χρησιμοποιήσουμε IN("value1","value2") .

ΕΠΙΛΟΓΗ * ΑΠΟ άλμπουμ WHERE IN ("pop","soul");

Αν θέλουμε να κυκλοφορήσουμε όλα τα άλμπουμ μεταξύ 1975 και 1985, πρέπει να γράψουμε:

ΕΠΙΛΟΓΗ * ΑΠΟ άλμπουμ WHERE που κυκλοφόρησε Μεταξύ 1975 ΚΑΙ 1985.

7. Λειτουργίες

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

  • COUNT() – επιστρέφει τον αριθμό των σειρών
  • SUM() - επιστρέφει το συνολικό άθροισμα μιας αριθμητικής στήλης
  • AVG() - επιστρέφει τον μέσο όρο ενός συνόλου τιμών
  • MIN() / MAX() – Λαμβάνει την ελάχιστη/μέγιστη τιμή από μια στήλη

Για να λάβουμε το πιο πρόσφατο έτος στον πίνακά μας, πρέπει να γράψουμε το ακόλουθο ερώτημα SQL:

SELECT MAX (κυκλοφόρησε) ΑΠΟ άλμπουμ.

8. Υποερωτήματα

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

Γνωρίζουμε πώς να λάβουμε αυτές τις συγκεκριμένες στήλες:

ΕΠΙΛΟΓΗ καλλιτέχνη, άλμπουμ, που κυκλοφόρησε ΑΠΟ άλμπουμ.

Ξέρουμε επίσης πώς να αποκτήσουμε το νωρίτερο έτος:

ΕΠΙΛΟΓΗ MIN (κυκλοφόρησε) ΑΠΟ άλμπουμ.

Το μόνο που χρειάζεται τώρα είναι να συνδυάσετε τα δύο ερωτήματα χρησιμοποιώντας WHERE:

ΕΠΙΛΟΓΗ καλλιτέχνη,άλμπουμ,κυκλοφόρησε ΑΠΟ άλμπουμ WHERE κυκλοφορήσει = (ΕΠΙΛΟΓΗ MIN(κυκλοφόρησε) FROM άλμπουμ);

9. Συνένωση τραπεζιών

Σε πιο σύνθετες βάσεις δεδομένων, υπάρχουν πολλοί πίνακες που σχετίζονται μεταξύ τους. Για παράδειγμα, παρακάτω είναι δύο πίνακες σχετικά με βιντεοπαιχνίδια ( βιντεοπαιχνίδια) και προγραμματιστές βιντεοπαιχνιδιών ( game_developers).


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

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

ΕΠΙΛΟΓΗ video_games.name, video_games.genre, game_developers.name, game_developers.country ΑΠΟ video_games Εσωτερική συμμετοχή στο game_developers ON video_games.developer_id = game_developers.id;

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

10. Ψευδώνυμα

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

Μπορούμε επίσης να συντομεύσουμε το ερώτημα με το ψευδώνυμο των ονομάτων του πίνακα: βιντεοπαιχνίδιαας καλέσουμε Παιχνίδια, game_developers - προγραμματιστές:

ΕΠΙΛΕΞΤΕ games.name, games.genre, devs.name AS προγραμματιστής, devs.country ΑΠΟ video_games AS παιχνίδια ΕΣΩΤΕΡΙΚΟΣ ΕΓΓΡΑΦΗ game_developers AS προγραμματιστές ON games.developer_id = devs.id;

11. Ενημέρωση δεδομένων

Συχνά χρειάζεται να αλλάξουμε τα δεδομένα σε ορισμένες σειρές. Στην SQL αυτό γίνεται χρησιμοποιώντας την πρόταση UPDATE. Η δήλωση UPDATE αποτελείται από:

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

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

Δεδομένα πίνακα tv_series UPDATE tv_series SET genre = "drama" WHERE id = 2;

12. Διαγραφή δεδομένων

Η διαγραφή μιας γραμμής πίνακα χρησιμοποιώντας SQL είναι μια πολύ απλή διαδικασία. Το μόνο που χρειάζεται να κάνετε είναι να επιλέξετε τον πίνακα και τη σειρά που θέλετε να διαγράψετε. Ας διαγράψουμε την τελευταία σειρά στον πίνακα από το προηγούμενο παράδειγμα Τηλεοπτική σειρά. Αυτό γίνεται χρησιμοποιώντας την εντολή >ΔΙΑΓΡΑΦΗ.

ΔΙΑΓΡΑΦΗ ΑΠΟ tv_series WHERE id = 4

Να είστε προσεκτικοί όταν γράφετε τη δήλωση DELETE και να βεβαιωθείτε ότι υπάρχει η ρήτρα WHERE, διαφορετικά όλες οι σειρές στον πίνακα θα διαγραφούν!

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

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

TRUNCATE TABLE table_name;

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

DOP TABLE table_name;

Να είστε πολύ προσεκτικοί με αυτές τις εντολές. Δεν μπορούν να ακυρωθούν!/p>

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

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

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

Καλύπτονται τα ακόλουθα θέματα:

Υποστηριζόμενη σύνταξη SQL

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

Γενική σύνταξη SQL

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

Οδηγίες Επεξεργασίας Δεδομένων

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

ΕΠΙΛΕΓΩ

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

Sql-statement::= SELECT αποτέλεσμα * ] αποτέλεσμα::= αποτέλεσμα-στήλη [, αποτέλεσμα-στήλη]* αποτέλεσμα-στήλη::= * | τραπέζι-όνομα * | expr [ string] table-list::= πίνακας [ join-op table join-args ]* table::= table-name | (επιλογή) join-op::= , | JOIN join-args::= compound-op::= UNION | ΕΝΩΣΗ ΟΛΟΙ | ΤΜΗΜΑ | EXCEPT sort-expr-list::= expr [, expr ]* sort-order::= collation-name::= ΔΥΑΔΙΚΟ | ΝΟΚΑΣΕ

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

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

Το ερώτημα εκτελείται σε έναν ή περισσότερους πίνακες που καθορίζονται μετά τη λέξη-κλειδί FROM. Εάν πολλά ονόματα πινάκων διαχωρίζονται με κόμμα, το ερώτημα χρησιμοποιεί μια σταυρωτή ένωση των διαφορετικών πινάκων. Η σύνταξη JOIN μπορεί επίσης να χρησιμοποιηθεί για να καθορίσετε πώς θα ενωθούν οι πίνακες. Ο υποστηριζόμενος τύπος εξωτερικής σύνδεσης είναι LEFT OUTER JOIN. Η έκφραση του όρου ON στο join-args πρέπει να έχει ως αποτέλεσμα μια τιμή boolean. Το υποερώτημα σε παρένθεση μπορεί να χρησιμοποιηθεί ως πίνακας στον όρο FROM. Ο όρος FROM μπορεί να παραλειφθεί εντελώς, οπότε το αποτέλεσμα θα είναι μια ξεχωριστή σειρά τιμών στη λίστα των εκφράσεων αποτελεσμάτων.

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

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

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

Η ρήτρα ORDER BY προκαλεί την ταξινόμηση των σειρών εξόδου. Το όρισμα sort-expr-list στον όρο ORDER BY είναι μια λίστα παραστάσεων που χρησιμοποιούνται ως κλειδί για τη λίστα. Οι εκφράσεις δεν χρειάζεται να αποτελούν μέρος του αποτελέσματος μιας απλής πρότασης SELECT, αλλά σε μια σύνθετη πρόταση SELECT (ΕΠΙΛΟΓΗ χρησιμοποιώντας έναν από τους τελεστές σύνθετης λειτουργίας), κάθε έκφραση ταξινόμησης πρέπει να ταιριάζει ακριβώς με μία από τις στήλες αποτελεσμάτων. Μετά από κάθε έκφραση ταξινόμησης, μπορείτε να χρησιμοποιήσετε μια ρήτρα σειράς ταξινόμησης (προαιρετικό), που αποτελείται από τη λέξη-κλειδί COLLATE και το όνομα της συνάρτησης ταξινόμησης που χρησιμοποιείται για την ταξινόμηση του κειμένου ή/και τη λέξη-κλειδί ASC ή DESC για να καθορίσετε τη σειρά ταξινόμησης (αύξουσα ή φθίνουσα). Η ρήτρα ταξινόμησης μπορεί να παραλειφθεί και να χρησιμοποιηθεί η προεπιλεγμένη τιμή (αύξουσα σειρά). Για τον ορισμό της ρήτρας COLLATE και των συναρτήσεων ταξινόμησης, βλ.

Η ρήτρα LIMIT θέτει ένα ανώτερο όριο στον αριθμό των σειρών που επιστρέφονται στο αποτέλεσμα. Μια αρνητική τιμή LIMIT υποδηλώνει ότι δεν υπάρχει ανώτατο όριο. Η προαιρετική δήλωση OFFSET μετά το LIMIT καθορίζει τον αριθμό των σειρών που πρέπει να παραβλεφθούν στην αρχή του συνόλου αποτελεσμάτων. Σε ένα σύνθετο ερώτημα SELECT, μια πρόταση LIMIT μπορεί να ακολουθεί μόνο την τελική πρόταση SELECT και το όριο ισχύει για ολόκληρο το ερώτημα. Σημειώστε ότι όταν χρησιμοποιείτε τη λέξη-κλειδί OFFSET στον όρο LIMIT, η οριακή τιμή είναι ο πρώτος ακέραιος και η μετατόπιση είναι ο δεύτερος ακέραιος. Εάν χρησιμοποιείτε κόμμα αντί για τη λέξη-κλειδί OFFSET, η μετατόπιση είναι ο πρώτος αριθμός και το όριο είναι ο δεύτερος αριθμός. Αυτή η εξωτερική αντίφαση είναι σκόπιμη: σας επιτρέπει να επιτύχετε τη μέγιστη συμβατότητα με ξεπερασμένα συστήματαΒάσεις δεδομένων SQL.

Μια σύνθετη πρόταση SELECT σχηματίζεται από μία ή περισσότερες προτάσεις SELECT που ενώνονται με έναν από τους τελεστές UNION, UNION ALL, INTERSECT ή EXCEPT. Σε μια σύνθετη πρόταση SELECT, όλες οι προτάσεις της SELECT πρέπει να προσδιορίζουν τον ίδιο αριθμό στηλών αποτελεσμάτων. Μπορεί να υπάρχει μόνο μία ρήτρα ORDER BY μετά την τελική δήλωση SELECT (και πριν από μια ξεχωριστή ρήτρα LIMIT, εάν έχει καθοριστεί). Οι προτάσεις UNION και UNION ALL συνδυάζουν τα αποτελέσματα των προηγούμενων και των επόμενων δηλώσεων SELECT σε έναν ενιαίο πίνακα. Η διαφορά είναι ότι στο UNION όλες οι σειρές αποτελεσμάτων είναι διαφορετικές, αλλά στο UNION είναι δυνατές ΟΛΕΣ οι επαναλήψεις. Ο τελεστής INTERSECT παίρνει την τομή των αποτελεσμάτων των προηγούμενων και των επόμενων δηλώσεων SELECT. Το EXCEPT αποδέχεται το αποτέλεσμα της προηγούμενης πρότασης SELECT μετά την αφαίρεση των αποτελεσμάτων της επόμενης δήλωσης SELECT. Όταν τρεις ή περισσότερες προτάσεις SELECT συνδυάζονται για να σχηματίσουν μια σύνθετη πρόταση, ομαδοποιούνται από την πρώτη έως την τελευταία.

Για ορισμούς επιτρεπόμενων εκφράσεων, βλ

ΕΙΣΑΓΕΤΕ

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

Sql-statement::= INSERT INTO πίνακα-όνομα [(στήλη-λίστα)] ΤΙΜΕΣ (value-list) | INSERT INTO πίνακα-όνομα [(στήλη-λίστα)] επιλογή-δήλωση ΑΝΤΙΚΑΤΑΣΤΑΣΗ ΣΤΟ όνομα πίνακα [(στήλη-λίστα)] ΤΙΜΕΣ (λίστα τιμών) | REPLACE INTO table-name [(στήλη-λίστα)] επιλογή-δήλωση

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

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

Δύο μορφές διδασκαλίας - REPLACE INTO - είναι ισοδύναμες με τη χρήση τυπικές οδηγίες INSERT με τον αλγόριθμο διένεξης REPLACE (δηλαδή, μια μορφή INSERT OR REPLACE...).

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

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

Sql-statement::= ΕΝΗΜΕΡΩΣΗ πίνακα-όνομα ανάθεσης SET [, ανάθεση]* σύγκρουση-αλγόριθμος::= ROLLBACK | ΑΠΟΤΡΟΦΗ | ΑΠΟΤΥΧΙΑ | ΑΓΝΟΗ | REPLACE assignment::= στήλη-όνομα = εκφρ

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

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

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

ΔΙΑΓΡΑΦΩ

Η εντολή delete χρησιμοποιείται για τη διαγραφή εγγραφών από έναν πίνακα.

Sql-statement::= DELETE FROM table-name

Η εντολή αποτελείται από τις λέξεις-κλειδιά ΔΙΑΓΡΑΦΗ ΑΠΟ, ακολουθούμενες από το όνομα του πίνακα από τον οποίο θέλετε να διαγράψετε εγγραφές.

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

Οδηγίες ορισμού δεδομένων

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

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

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

Sql-statement::= CREATE TABLE table-name (column-def [, column-def]* [, constraint]*) sql-statement::= CREATE TABLE table-name AS select-statement column-def::= name [ στήλη-περιορισμός]* type::= typename | όνομα τύπου(αριθμός) | typename (αριθμός, αριθμός) στήλη-περιορισμός::= NOT NULL [conflict-clause ] | ΚΥΡΙΟ ΚΛΕΙΔΙ [ ρήτρα σύγκρουσης ] | ΜΟΝΑΔΙΚΟ | ΕΛΕΓΧΟΣ (expr) | DEFAULT προεπιλεγμένη τιμή | ΣΥΓΚΕΚΡΙΜΕΝΟΣ περιορισμός collation-name::= ΠΡΩΤΟΓΡΑΦΙΚΟ ΚΛΕΙΔΙ (στήλη-λίστα) | ΜΟΝΑΔΙΚΟ (στήλη-λίστα) | Έλεγχος (expr) σύγκρουση-ρήτρα::= ON CONFLICT σύγκρουση-αλγόριθμος σύγκρουση-αλγόριθμος::= ROLLBACK | ΑΠΟΤΡΟΦΗ | ΑΠΟΤΥΧΙΑ | ΑΓΝΟΗ | REPLACE default-value::= NULL | χορδή | αριθμός | CURRENT_TIME | CURRENT_DATE | CURRENT_TIMESTAMP σειρά ταξινόμησης::= ASC | DESC collation-name::= ΔΥΑΔΙΚΟ | NOCASE στήλη-λίστα::= όνομα στήλης [, όνομα στήλης]*

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

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

Ένας ΜΟΝΑΔΙΚΟΣ περιορισμός προκαλεί τη δημιουργία ενός ευρετηρίου στην καθορισμένη στήλη ή στήλες. Αυτό το ευρετήριο πρέπει να περιέχει μοναδικά κλειδιά — καμία δύο σειρές δεν μπορούν να περιέχουν την ίδια τιμή ή συνδυασμό τιμών για μια δεδομένη στήλη ή στήλες. Μια πρόταση CREATE TABLE μπορεί να έχει πολλαπλούς περιορισμούς UNIQUE, συμπεριλαμβανομένων πολλαπλών στηλών με περιορισμό UNIQUE στον ορισμό της στήλης ή/και πολλαπλούς περιορισμούς UNIQUE σε επίπεδο πίνακα.

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

Ο όρος COLLATE στον ορισμό της στήλης καθορίζει τη συνάρτηση ταξινόμησης κειμένου που θα χρησιμοποιηθεί στη σύγκριση καταχωρήσεις κειμένουγια τη στήλη. Η προεπιλεγμένη συνάρτηση ταξινόμησης είναι ΔΥΑΔΙΚΗ. Για λεπτομέρειες σχετικά με τον όρο COLLATE και τις συναρτήσεις ταξινόμησης, ανατρέξτε στο .

Ο περιορισμός DEFAULT καθορίζει την προεπιλεγμένη τιμή που χρησιμοποιείται κατά την εκτέλεση ενός INSERT. Η τιμή μπορεί να είναι NULL, μια σταθερά συμβολοσειράς ή ένας αριθμός. Η προεπιλεγμένη τιμή μπορεί επίσης να είναι η ειδική λέξη-κλειδί χωρίς διάκριση πεζών-κεφαλαίων CURRENT_TIME, CURRENT_DATE ή CURRENT_TIMESTAMP. Εάν η τιμή είναι NULL, μια σταθερά συμβολοσειράς ή ένας αριθμός, εισάγεται κυριολεκτικά στη στήλη, εκτός εάν μια τιμή για τη στήλη καθορίζεται από την πρόταση INSERT. Εάν χρησιμοποιείται CURRENT_TIME, CURRENT_DATE ή CURRENT_TIMESTAMP, η στήλη εισάγεται Η τρέχουσα ημερομηνίαή/και ώρα σε μορφή UTC. Το CURRENT_TIME έχει οριστεί σε μορφή ΩΩ:ΛΛ:ΔΣ. Για CURRENT_DATE, η μορφή είναι ΕΕΕΕ-ΜΜ-ΗΗ. Η μορφή για CURRENT_TIMESTAMP είναι ΕΕΕΕ-ΜΜ-ΗΗ ΩΩ:ΜΛ:ΔΔ .

Ο καθορισμός του ΠΡΩΤΕΥΟΥ ΚΛΕΙΔΙΟΥ δημιουργεί συνήθως ένα ΜΟΝΑΔΙΚΟ ευρετήριο στην αντίστοιχη στήλη ή στήλες. Επιπλέον, εάν ο περιορισμός PRIMARY KEY ισχύει για ξεχωριστή στήλη με τύπο ΑΚΕΡΑΙΩΝ δεδομένων, τότε η στήλη χρησιμοποιείται εσωτερικά ως το πραγματικό πρωτεύον κλειδί για τον πίνακα. Αυτό σημαίνει ότι η στήλη μπορεί να περιέχει μόνο μοναδικές ακέραιες τιμές. Εάν ο πίνακας δεν έχει στήλη ΑΚΕΡΑΙΟ ΚΥΡΙΟ ΚΛΕΙΔΙ, θα δημιουργηθεί αυτόματα ένα ακέραιο κλειδί κατά την εισαγωγή της σειράς. Μπορείτε πάντα να έχετε πρόσβαση στο πρωτεύον κλειδί μιας σειράς χρησιμοποιώντας ένα από τα ειδικά ονόματα ROWID, OID ή _ROWID_. Αυτά τα ονόματα μπορούν να χρησιμοποιηθούν ανεξάρτητα από το αν το ρητά δηλωμένο ΑΚΕΡΑΙΟ ΠΡΩΤΕΪΚΟ ΚΛΕΙΔΙ είναι κλειδί ή τιμή που δημιουργείται εσωτερικά. Η στήλη ΑΚΕΡΑΙΟ ΚΥΡΙΟ ΚΛΕΙΔΙ μπορεί επίσης να περιλαμβάνει τη λέξη-κλειδί AUTOINCREMENT. Όταν χρησιμοποιείται η λέξη-κλειδί AUTOINCREMENT, η βάση δεδομένων δημιουργεί αυτόματα και εισάγει ένα αυξητικό ακέραιο κλειδί στη στήλη INTEGER PRIMARY KEY όταν εκδίδεται μια δήλωση INSERT.

Μπορεί να υπάρχει μόνο ένας περιορισμός ΠΡΩΤΙΚΟΥ ΚΛΕΙΔΙ σε μια πρόταση CREATE TABLE. Μπορεί να είναι μέρος ενός ορισμού μεμονωμένης στήλης ή ενός περιορισμού PRIMARY KEY σε επίπεδο πίνακα. Η στήλη του πρωτεύοντος κλειδιού είναι σιωπηρά ΔΕΝ ΜΗΝΟΥ.

Μια προαιρετική ρήτρα διένεξης μετά από πολλούς περιορισμούς σάς επιτρέπει να καθορίσετε έναν εναλλακτικό προεπιλεγμένο αλγόριθμο επίλυσης διενέξεων περιορισμών για αυτόν τον περιορισμό. Η προεπιλογή είναι ABORT. Για διαφορετικούς περιορισμούς στον ίδιο πίνακα είναι δυνατό διαφορετικούς αλγόριθμουςπροεπιλεγμένη επίλυση διενέξεων. Εάν η πρόταση INSERT ή UPDATE καθορίζει έναν διαφορετικό αλγόριθμο επίλυσης διένεξης, χρησιμοποιείται αντί για τον αλγόριθμο που καθορίζεται στην πρόταση CREATE TABLE. Για περισσότερες πληροφορίες, βλ.

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

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

Εάν έχει καθοριστεί το προαιρετικό πρόθεμα ονόματος βάσης δεδομένων, ο πίνακας δημιουργείται σε μια βάση δεδομένων με όνομα (η βάση δεδομένων συνδέεται με την παρουσία SQLConnection καλώντας τη μέθοδο attach() με το καθορισμένο όνομα βάσης δεδομένων). Είναι σφάλμα να προσδιορίσετε το πρόθεμα ονόματος βάσης δεδομένων και τη λέξη-κλειδί TEMP εάν το πρόθεμα ονόματος βάσης δεδομένων δεν είναι temp . Εάν το όνομα της βάσης δεδομένων δεν έχει καθοριστεί και υπάρχει η λέξη-κλειδί TEMP, τότε ο πίνακας δημιουργείται στην κύρια βάση δεδομένων (η βάση δεδομένων που συνδέεται με την παρουσία SQLConnection χρησιμοποιώντας τη μέθοδο open() ή openAsync()).

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

Η φόρμα CREATE TABLE AS ορίζει έναν πίνακα ως το σύνολο αποτελεσμάτων ενός ερωτήματος. Τα ονόματα στηλών του πίνακα είναι τα ονόματα των στηλών στο αποτέλεσμα.

Εάν υπάρχει ο προαιρετικός όρος IF NOT EXISTS και υπάρχει ήδη ένας άλλος πίνακας με το ίδιο όνομα, η βάση δεδομένων παραλείπει την εντολή CREATE TABLE.

Ένας πίνακας μπορεί να απορριφθεί χρησιμοποιώντας τη δήλωση DROP TABLE και περιορισμένες αλλαγές μπορούν να γίνουν χρησιμοποιώντας τη δήλωση ALTER TABLE.

ALTER TABLE

Η εντολή ALTER TABLE επιτρέπει στο χρήστη να μετονομάσει μια στήλη ή να προσθέσει μια νέα στήλη σε έναν υπάρχοντα πίνακα. Η στήλη δεν μπορεί να αφαιρεθεί από τον πίνακα.

Sql-statement::= ALTER TABLE τροποποίηση αλλαγής ονόματος πίνακα::= ΜΕΤΟΝΟΜΑΣΙΑ ΣΕ νέα αλλαγή ονόματος πίνακα::= ΠΡΟΣΘΗΚΗ στήλης-def

Η σύνταξη RENAME TO χρησιμοποιείται για τη μετονομασία του πίνακα που ορίζεται από το table-name σε new-table-name . Αυτή η εντολή δεν μπορεί να χρησιμοποιηθεί για τη μετακίνηση ενός πίνακα μεταξύ συνδεδεμένων βάσεων δεδομένων - χρησιμεύει μόνο για τη μετονομασία ενός πίνακα σε μία βάση δεδομένων.

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

Η σύνταξη ADD χρησιμοποιείται για την προσθήκη μιας νέας στήλης σε έναν υπάρχοντα πίνακα. Νέα στήληπροστίθεται πάντα στο τέλος της λίστας των υπαρχουσών στηλών. Ο όρος στήλης-def μπορεί να λάβει οποιαδήποτε μορφή επιτρέπεται σε μια δήλωση CREATE TABLE, με τους ακόλουθους περιορισμούς:

  • Μια στήλη δεν μπορεί να έχει περιορισμούς ΚΥΡΙΟ ΚΛΕΙΔΙ ή ΜΟΝΑΔΙΚΟ.
  • Η στήλη δεν μπορεί να έχει τις προεπιλεγμένες τιμές CURRENT_TIME, CURRENT_DATE ή CURRENT_TIMESTAMP.
  • Εάν έχει καθοριστεί περιορισμός NOT NULL, η στήλη πρέπει να έχει μια προεπιλεγμένη τιμή διαφορετική από NULL.

Ο όγκος των δεδομένων στον πίνακα δεν επηρεάζει το χρόνο εκτέλεσης της πρότασης ALTER TABLE.

ΠΤΡΑΠΕΖΙ ΠΤΩΣΗΣ

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

Sql-statement::= DOP TABLE table-name

Από προεπιλογή, η πρόταση DROP TABLE δεν μειώνει το μέγεθος του αρχείου της βάσης δεδομένων. Ο κενός χώρος στη βάση δεδομένων αποθηκεύεται και χρησιμοποιείται σε επόμενες λειτουργίες INSERT. Για να αφαιρέσετε τον κενό χώρο στη βάση δεδομένων, χρησιμοποιήστε τη μέθοδο SQLConnection.clean(). Εάν το autoClean οριστεί σε true κατά την αρχική δημιουργία της βάσης δεδομένων, ο χώρος ανακτάται αυτόματα.

Ο προαιρετικός όρος IF EXISTS καταστέλλει το σφάλμα που θα προέκυπτε κανονικά εάν ο πίνακας δεν υπάρχει.

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

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

Sql-statement::= CREATE INDEX index-name ON table-name (column-name [, column-name]*) column-name::= name

Κάθε όνομα στήλης πρέπει να ακολουθείται από τη λέξη-κλειδί ASC ή DESC για να υποδείξει τη σειρά ταξινόμησης, αλλά ο προσδιορισμός της σειράς ταξινόμησης αγνοείται από το χρόνο εκτέλεσης. Η ταξινόμηση εκτελείται πάντα με αύξουσα σειρά.

Η ρήτρα COLLATE μετά το όνομα κάθε στήλης καθορίζει τη συρραφή που θα εφαρμοστεί στις τιμές κειμένου σε αυτήν τη στήλη. Η προεπιλεγμένη ταξινόμηση είναι η ταξινόμηση που ορίζεται για αυτήν τη στήλη στην πρόταση CREATE TABLE. Εάν δεν έχει καθοριστεί ταξινόμηση, χρησιμοποιείται η δυαδική ταξινόμηση. Για τον ορισμό της ρήτρας COLLATE και των συναρτήσεων ταξινόμησης, βλ.

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

ΔΕΙΚΤΗΣ ΠΤΩΣΗΣ

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

Sql-statement::= DROP INDEX index-name

Από προεπιλογή, η πρόταση DROP INDEX δεν μειώνει το μέγεθος του αρχείου της βάσης δεδομένων. Ο κενός χώρος στη βάση δεδομένων αποθηκεύεται και χρησιμοποιείται σε επόμενες λειτουργίες INSERT. Για να αφαιρέσετε τον κενό χώρο στη βάση δεδομένων, χρησιμοποιήστε τη μέθοδο SQLConnection.clean(). Εάν το autoClean οριστεί σε true κατά την αρχική δημιουργία της βάσης δεδομένων, ο χώρος ανακτάται αυτόματα.

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

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

Sql-statement::= ΔΗΜΙΟΥΡΓΙΑ VIEW VIEW-name AS select-statement

Εάν η λέξη-κλειδί TEMP ή TEMPORARY εμφανίζεται μεταξύ CREATE και VIEW , η προβολή που δημιουργείται θα είναι ορατή μόνο στην παρουσία SQLConnection που άνοιξε τη βάση δεδομένων και θα διαγραφεί όταν κλείσει η βάση δεδομένων.

Εάν έχει καθοριστεί, η προβολή δημιουργείται σε μια βάση δεδομένων με όνομα (η βάση δεδομένων είναι συνδεδεμένη στην παρουσία SQLConnection χρησιμοποιώντας τη μέθοδο attach() με το καθορισμένο όρισμα ονόματος). Θα ήταν επίσης σφάλμα να καθορίσετε τη λέξη-κλειδί TEMP εάν δεν είναι temp. Εάν το όνομα της βάσης δεδομένων δεν έχει καθοριστεί και υπάρχει η λέξη-κλειδί TEMP, η προβολή δημιουργείται στην υποκείμενη βάση δεδομένων (η βάση δεδομένων που συνδέεται με την παρουσία SQLConnection χρησιμοποιώντας τη μέθοδο open() ή openAsync()).

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

Για να αφαιρέσετε μια προβολή από τη βάση δεδομένων, χρησιμοποιήστε τη δήλωση DROP VIEW.

ΑΠΟΣΤΟΛΗ ΠΡΟΒΟΛΗ

Η δήλωση DROP VIEW διαγράφει μια προβολή που δημιουργήθηκε χρησιμοποιώντας τη δήλωση CREATE VIEW.

Sql-statement::= DROP VIEW view-name

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

ΔΗΜΙΟΥΡΓΙΑ ΣΚΑΝΔΙΣΤΗΣ

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

Sql-statement::= CREATE TRIGGER trigger-name database-event ON table-name trigger-action sql-statement::= CREATE TRIGGER trigger-name ΑΝΤΙ ΤΗΣ βάσης δεδομένων-συμβάν ON view-name trigger-action database-event::= ΔΙΑΓΡΑΦΗ | ΕΙΣΑΓΩΓΗ | ΕΝΗΜΕΡΩΣΗ | ΕΝΗΜΕΡΩΣΗ ΕΝΗΜΕΡΩΣΗΣ ΕΝΑΡΞΗΣ-ΔΡΑΣΗΣ λίστας στήλης::= ΕΝΑΡΞΗ ενεργοποίησης-βήματος ; [ trigger-step ; ]* ΤΕΛΟΣ trigger-step::= ενημέρωση-δήλωση | ένθετο-δήλωση | διαγραφή-δήλωση | select-statement στήλη-list::= στήλη-όνομα [, στήλη-όνομα]*

Ένας κανόνας ετικέτας ενεργοποιείται όταν συμβεί ένα συμβάν DELETE, INSERT ή UPDATE συγκεκριμένο πίνακαβάσης δεδομένων ή κατά την ενημέρωση μιας ή περισσότερων καθορισμένων στηλών πίνακα χρησιμοποιώντας μια δήλωση UPDATE. Οι κανόνες ετικέτας είναι επίμονοι, εκτός εάν χρησιμοποιηθεί η λέξη-κλειδί TEMP ή TEMPORARY. Σε αυτήν την περίπτωση, η ενεργοποίηση διαγράφεται όταν κλείσει η σύνδεση με την κύρια βάση δεδομένων της παρουσίας SQLConnection. Εάν δεν έχει καθοριστεί χρόνος (ΠΡΙΝ ή ΜΕΤΑ), η προεπιλογή ενεργοποιείται σε ΠΡΙΝ .

Υποστηρίζονται μόνο ενεργοποιητές FOR EACH ROW, επομένως το κείμενο ΓΙΑ ΚΑΘΕ ΣΕΙΡΑ είναι προαιρετικό. Με έναν κανόνα ετικέτας ΓΙΑ ΚΑΘΕ ΣΕΙΡΑ, εκτελούνται δηλώσεις βήματος ενεργοποίησης για κάθε γραμμή βάσης δεδομένων που εισάγεται, ενημερώνεται ή διαγράφεται από τη δήλωση, προκαλώντας την ενεργοποίηση του κανόνα ετικέτας εάν η έκφραση του όρου WHEN αξιολογηθεί ως true .

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

Στο σώμα του trigger (ρήτρα trigger-action), οι τιμές πριν και μετά την αλλαγή του επηρεαζόμενου πίνακα είναι διαθέσιμες χρησιμοποιώντας τα ειδικά ονόματα πίνακα ΠΑΛΙΟ και ΝΕΟ. Η δομή του ΠΑΛΑΙΟΥ και του ΝΕΟΥ πίνακα ταιριάζει με τη δομή του πίνακα για τον οποίο έχει δημιουργηθεί το έναυσμα. Ο πίνακας OLD περιέχει οποιεσδήποτε σειρές που τροποποιήθηκαν ή διαγράφηκαν από τη δήλωση ενεργοποίησης και την κατάστασή τους πριν από τις λειτουργίες της δήλωσης ενεργοποίησης. Ο ΝΕΟΣ πίνακας περιέχει οποιεσδήποτε σειρές τροποποιημένες ή δημιουργημένες από τη δήλωση ενεργοποίησης και την κατάστασή τους μετά τις λειτουργίες της δήλωσης ενεργοποίησης. Τόσο η πρόταση WHEN όσο και οι εντολές trigger-step μπορούν να έχουν πρόσβαση σε τιμές από εισαγόμενες, διαγραμμένες ή ενημερωμένες σειρές χρησιμοποιώντας αναφορές της μορφής NEW.column-name και OLD.column-name , όπου το όνομα στήλης είναι το όνομα της στήλης από ο πίνακας με τον οποίο συσχετίζεται το έναυσμα . Η διαθεσιμότητα των ΠΑΛΑΙΩΝ και ΝΕΩΝ αναφορών πίνακα εξαρτάται από τον τύπο συμβάντος βάσης δεδομένων που επεξεργάζεται η ενεργοποίηση:

Ο καθορισμένος χρόνος (ΠΡΙΝ, ΜΕΤΑ ή ΑΝΤΙ ΓΙΑ) καθορίζει το χρόνο εκτέλεσης των εντολών ενεργοποίησης βήματος σχετικά με την εισαγωγή, τροποποίηση ή διαγραφή σχετική συμβολοσειρά. Ο όρος ON CONFLICT μπορεί να καθοριστεί ως μέρος μιας δήλωσης UPDATE ή INSERT σε ένα βήμα ενεργοποίησης. Ωστόσο, εάν η ρήτρα ON CONFLICT ορίζεται ως μέρος της δήλωσης που προκαλεί την ενεργοποίηση του κανόνα ετικέτας, τότε χρησιμοποιείται η πολιτική επίλυσης διενέξεων.

Εκτός από τους κανόνες ετικέτας, μπορείτε να δημιουργήσετε έναν κανόνα ετικέτας ΑΝΤΙ ΓΙΑ μια προβολή. Εάν σε μια αναλυτική προβολή ορίζονται ένας ή περισσότεροι κανόνες ετικέτας ΑΝΤΙ ΕΙΣΑΓΩΓΗΣ , ΑΝΤΙ ΔΙΑΓΡΑΦΗΣ ή ΑΝΤΙ ΕΝΗΜΕΡΩΣΗΣ, η εκτέλεση του συσχετισμένου τύπου δήλωσης στην προβολή δεν θα θεωρείται σφάλμα (ΕΙΣΑΓΩΓΗ , ΔΙΑΓΡΑΦΗ και ΕΝΗΜΕΡΩΣΗ ). Σε αυτήν την περίπτωση, η εκτέλεση INSERT , DELETE ή UPDATE στην προβολή προκαλεί την ενεργοποίηση των σχετικών κανόνων. Επειδή ο κανόνας ετικέτας είναι ένας κανόνας ΑΝΤΙ ΓΙΑ, οι πίνακες στην υποκείμενη προβολή δεν τροποποιούνται από τη δήλωση που ενεργοποιεί τον κανόνα ετικέτας. Σε αυτήν την περίπτωση, οι σκανδαλισμοί μπορούν να χρησιμοποιηθούν για την εκτέλεση λειτουργιών τροποποίησης σε βασικούς πίνακες.

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

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

Συνάρτηση RAISE().

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

Αύξηση-συνάρτηση::= ΑΝΥΨΗΞΗ (ΑΒΟΡΑ, μήνυμα σφάλματος) | RAISE (ΑΠΟΤΥΧΙΑ, μήνυμα σφάλματος) | RAISE (ΕΠΙΣΤΡΟΦΗ, μήνυμα σφάλματος) | ΑΝΥΨΩΣΗ (ΑΓΝΟΗ)

Μία από τις τρεις φόρμες καλείται όταν εκτελείται η ενεργοποίηση, εκτελείται η καθορισμένη ενέργεια επεξεργασίας ON CONFLICT (ABORT , FAIL ή ROLLBACK) και τρέχουσα οδηγίασταματά. Το ROLLBACK θεωρείται σφάλμα εκτέλεσης δήλωσης, επομένως το στιγμιότυπο SQLStatement του οποίου η μέθοδος execute() εκτελέστηκε δημιουργεί ένα συμβάν σφάλματος (SQLErrorEvent.ERROR). Το αντικείμενο SQLError στην ιδιότητα σφάλματος του συμβάντος που εκπέμπεται από το αντικείμενο έχει μια ιδιότητα λεπτομερειών με την τιμή μήνυμα σφάλματος που έχει οριστεί στη συνάρτηση RAISE().

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

ΣΚΑΝΔΙΣΤΗΣ ΠΡΟΣΤΑΣΗΣ

Η πρόταση DROP TRIGGER καταργεί έναν κανόνα που δημιουργήθηκε με τη δήλωση CREATE TRIGGER.

Sql-statement::= DROP TRIGGER trigger-name

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

Ειδικές οδηγίες και προσφορές

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

ΑΝΤΙΠΑΡΑΒΑΛΛΩ

Ο όρος COLLATE χρησιμοποιείται στις προτάσεις SELECT, CREATE TABLE και CREATE INDEX για να καθορίσετε τον αλγόριθμο σύγκρισης που θα χρησιμοποιηθεί κατά τη σύγκριση ή την ταξινόμηση τιμών.

Sql-statement::= COLLATE collation-name collation-name::= ΔΥΑΔΙΚΟ | ΝΟΚΑΣΕ

Για στήλες, ο προεπιλεγμένος τύπος ταξινόμησης είναι ΔΥΑΔΙΚΟς. Κατά τη χρήση ΔΥΑΔΙΚΗΣ ταξινόμησης με τιμές κλάσης αποθήκευσης TEXT, η δυαδική ταξινόμηση εκτελείται συγκρίνοντας τα byte στη μνήμη που αντιπροσωπεύουν την τιμή, ανεξάρτητα από την κωδικοποίηση κειμένου.

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

Οι συλλογές δεν χρησιμοποιούνται για κλάσεις αποθήκευσης τύπου NULL, BLOB, INTEGER ή REAL.

Για να χρησιμοποιήσετε έναν τύπο σελιδοποίησης διαφορετικό από το ΔΥΑΔΙΚΟ σε μια στήλη, πρέπει να καθορίσετε έναν όρο ΣΥΓΚΡΟΤΗΜΑ ως μέρος του ορισμού της στήλης στη δήλωση CREATE TABLE. Κάθε φορά που συγκρίνονται δύο τιμές TEXT, η ταξινόμηση χρησιμοποιείται για τον προσδιορισμό των αποτελεσμάτων της σύγκρισης σύμφωνα με τους ακόλουθους κανόνες:

  • Στην περίπτωση δυαδικών τελεστών σύγκρισης (=,< , > , <= и >=) εάν ένας από τους τελεστές είναι στήλη, τότε ο προεπιλεγμένος τύπος ταξινόμησης της στήλης καθορίζει τη ταξινόμηση που χρησιμοποιείται για σύγκριση. Εάν και οι δύο τελεστές είναι στήλες, τότε ο τύπος ταξινόμησης για τον αριστερό τελεστή καθορίζει τη συρραφή που χρησιμοποιείται. Εάν κανένας από τους τελεστές δεν είναι στήλη, τότε χρησιμοποιείται η ΔΥΑΔΙΚΗ συρραφή.
  • Ο τελεστής BETWEEN...AND είναι ισοδύναμος με τη χρήση δύο παραστάσεων με τους τελεστές >= και<= . Например, выражение x BETWEEN y AND z эквивалентно x >= y ΚΑΙ x<= z . Таким образом, оператор BETWEEN...AND следует описанному правилу для определения параметров сортировки.
  • Ο τελεστής IN συμπεριφέρεται όπως ο τελεστής = για να καθορίσει ποια ταξινόμηση θα χρησιμοποιηθεί. Για παράδειγμα, η ταξινόμηση που χρησιμοποιείται για την έκφραση x IN (y, z) αντιπροσωπεύει τον προεπιλεγμένο τύπο ταξινόμησης για το x εάν το x είναι στήλη. Διαφορετικά, εφαρμόζεται ΔΥΑΔΙΚΗ ταξινόμηση.
  • Σε μια πρόταση ORDER BY που αποτελεί μέρος μιας δήλωσης SELECT μπορεί να εκχωρηθεί ρητά οι συλλογές που χρησιμοποιούνται για τη λειτουργία ταξινόμησης. Σε αυτήν την περίπτωση, χρησιμοποιούνται πάντα ρητές επιλογές ταξινόμησης. Αντίθετα, εάν η έκφραση που ταξινομείται με τον όρο ORDER BY είναι στήλη, τότε ο προεπιλεγμένος τύπος ταξινόμησης για τη στήλη χρησιμοποιείται για τον προσδιορισμό της σειράς ταξινόμησης. Εάν η έκφραση δεν είναι στήλη, τότε χρησιμοποιείται η ΔΥΑΔΙΚΗ συγκρότηση.

ΕΞΗΓΩ

Ο τροποποιητής εντολών EXPLAIN είναι μια μη τυπική επέκταση SQL.

Sql-statement::= ΕΞΗΓΗΣΤΕ sql-statement

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

ON CONFLICT (αλγόριθμοι σύγκρουσης)

Ο όρος ON CONFLICT δεν είναι ξεχωριστή εντολή SQL. Αυτή είναι μια μη τυπική ρήτρα που μπορεί να χρησιμοποιηθεί σε πολλές άλλες εντολές SQL.

Conflict-clause::= ON CONFLICT σύγκρουση-αλγόριθμος σύγκρουση-ρήτρα::= Ή σύγκρουση-αλγόριθμος σύγκρουση-αλγόριθμος::= RELLBACK | ΑΠΟΤΡΟΦΗ | ΑΠΟΤΥΧΙΑ | ΑΓΝΟΗ | ΑΝΤΙΚΑΘΙΣΤΩ

Η πρώτη μορφή της ρήτρας ON CONFLICT με τη λέξη-κλειδί ON CONFLICT χρησιμοποιείται στην πρόταση CREATE TABLE. Για μια πρόταση INSERT ή UPDATE, χρησιμοποιείται η δεύτερη φόρμα, όπου ON CONFLICT αντικαθίσταται από OR για να δώσει μια πιο φυσική σύνταξη. Για παράδειγμα, η πρόταση INSERT OR IGNORE χρησιμοποιείται αντί για INSERT ON CONFLICT IGNORE. Παρά τις διαφορετικές λέξεις-κλειδιά, το νόημα της πρότασης δεν αλλάζει και στις δύο μορφές.

Η ρήτρα ON CONFLICT καθορίζει τον αλγόριθμο που χρησιμοποιείται για την επίλυση διενέξεων περιορισμών. Υπάρχουν πέντε αλγόριθμοι: ROLLBACK, ABORT, FAIL, IGNORE και REPLACE. Ο προεπιλεγμένος αλγόριθμος είναι ABORT. Ακολουθεί μια περιγραφή των πέντε αλγορίθμων σύγκρουσης:

  • ΑΝΤΙΣΤΡΟΦΗ. Όταν συμβαίνει μια παραβίαση περιορισμών, πραγματοποιείται αμέσως ΕΠΑΝΤΡΟΦΗ, τερματίζοντας την τρέχουσα συναλλαγή. Η εντολή τερματίζεται και η παρουσία SQLStatement εκδίδει ένα συμβάν σφάλματος. Εάν δεν υπάρχει καμία ενεργή συναλλαγή (εκτός από την υπονοούμενη συναλλαγή που δημιουργήθηκε για κάθε εντολή), τότε αυτός ο αλγόριθμος λειτουργεί το ίδιο με το ABORT.
  • ΑΜΒΛΩΝΩ. Όταν παρουσιάζεται παραβίαση περιορισμών, η εντολή απορρίπτει τυχόν προηγούμενες αλλαγές που μπορεί να έχουν γίνει και η παρουσία SQLStatement εκδίδει ένα συμβάν σφάλματος. Το ROLLBACK δεν εκτελείται, επομένως οι αλλαγές που έγιναν από προηγούμενες εντολές στη συναλλαγή διατηρούνται. Το ABORT είναι η προεπιλεγμένη συμπεριφορά.
  • ΑΠΟΤΥΓΧΑΝΩ. Όταν παρουσιάζεται παραβίαση περιορισμών, η εκτέλεση εντολών σταματά και το SQLStatement εκδίδει ένα συμβάν σφάλματος. Σε αυτήν την περίπτωση, τυχόν αλλαγές στη βάση δεδομένων που έγιναν από την εντολή πριν από την παραβίαση περιορισμών αποθηκεύονται και δεν ακυρώνονται. Για παράδειγμα, εάν μια δήλωση UPDATE αντιμετωπίσει παραβίαση περιορισμού στην 100η σειρά που επιχειρεί να ενημερώσει, τότε διατηρούνται μόνο οι πρώτες 99 σειρές και δεν γίνονται αλλαγές στην 100η σειρά ή στις επόμενες σειρές.
  • ΑΓΝΟΩ. Όταν παρουσιάζεται παραβίαση περιορισμού, η σειρά που παραβιάζει τον περιορισμό δεν εισάγεται ή τροποποιείται. Παρόλο που αυτή η γραμμή παραλείπεται, η εντολή συνεχίζει να εκτελείται κανονικά. Οι άλλες σειρές πριν και μετά τη σειρά που παραβίασαν τον περιορισμό εισάγονται και ενημερώνονται περαιτέρω κανονικά. Το σφάλμα δεν επιστρέφεται.
  • ΑΝΤΙΚΑΘΙΣΤΩ. Όταν παρουσιάζεται μια ΜΟΝΑΔΙΚΗ παραβίαση περιορισμών, οι προηγούμενες σειρές που προκαλούν την παραβίαση περιορισμών διαγράφονται πριν εισαχθεί ή ενημερωθεί η τρέχουσα σειρά. Επομένως, γίνονται πάντα εισαγωγές ή ενημερώσεις και η εντολή συνεχίζει να εκτελείται κανονικά. Το σφάλμα δεν επιστρέφεται. Όταν παρουσιάζεται παραβίαση περιορισμού NOT NULL, η τιμή NULL αντικαθίσταται με την προεπιλεγμένη τιμή για αυτήν τη στήλη. Εάν η στήλη δεν έχει προεπιλεγμένη τιμή, χρησιμοποιείται ο αλγόριθμος ABORT. Εάν παρουσιαστεί παραβίαση περιορισμού CHECK, χρησιμοποιείται ο αλγόριθμος IGNORE. Όταν οι σειρές διαγράφονται από αυτήν τη στρατηγική επίλυσης διενέξεων για την ικανοποίηση ενός περιορισμού, οι κανόνες ετικέτας διαγραφής σε αυτές τις σειρές δεν αυξάνονται.

Ο αλγόριθμος που καθορίζεται στην πρόταση OR μιας πρότασης INSERT ή UPDATE υπερισχύει οποιουδήποτε αλγόριθμου που καθορίζεται στη δήλωση CREATE TABLE. Εάν δεν καθορίζεται αλγόριθμος στη δήλωση CREATE TABLE ή στην εκτελούμενη πρόταση INSERT ή UPDATE, χρησιμοποιείται ο αλγόριθμος ABORT.

REINDEX

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

Sql-statement::= REINDEX collation-name sql-statement::= REINDEX (όνομα πίνακα | όνομα ευρετηρίου)

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

Σχόλια

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

Σχόλιο::= μονογραμμή-σχόλιο | block-comment single-line-comment::= -- single-line block-comment::= /* πολλαπλές γραμμές ή μπλοκ [*/]

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

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

Εκφράσεις

Οι εκφράσεις είναι υποεντολές μέσα σε άλλα μπλοκ SQL. Τα παρακάτω περιγράφουν την έγκυρη σύνταξη έκφρασης σε μια πρόταση SQL:

Expr::= expr binary-op expr | expr like-op expr | unary-op expr | (expr) | στήλη-όνομα | όνομα πίνακα.όνομα στήλης | database-name.table-name.column-name | κυριολεκτική αξία | παράμετρος | function-name(expr-list | *) | expr ISNULL | expr NOTNULL | expr ΜΕΤΑΞΥ expr ΚΑΙ expr | expr IN (λίστα τιμών) | expr IN (επιλογή-δήλωση) | expr IN πίνακα-όνομα | (επιλογή-δήλωση) | ΠΕΡΙΠΤΩΣΗ (ΟΤΑΝ expr ΤΟΤΕ expr)+ ΤΕΛΟΣ | CAST (expr AS τύπος) | expr COLLATE collation-name like-op::= LIKE | GLOB binary-op::= δείτε unary-op::= δείτε την παράμετρο::= :param-name | @param-name | ? value-list::= literal-value [, literal-value]* literal-value::= literal-string | κυριολεκτικός αριθμός | κυριολεκτικά-boolean | κυριολεκτικά-blob | literal-null literal-string::= "τιμή συμβολοσειράς" literal-number::= ακέραιος | αριθμός literal-boolean::= true | false literal-blob::= X"δεκαεξαδική συμβολοσειρά δεδομένων" literal-null::= NULL

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

Σε ορισμένες περιπτώσεις (σε μια ρήτρα WHERE, μια ρήτρα HAVING, μια ρήτρα ON σε μια πρόταση JOIN και μια ρήτρα CHECK), μια έκφραση πρέπει να αξιολογηθεί σε μια τιμή Boole. Οι ακόλουθοι τύποι εκφράσεων ικανοποιούν αυτήν την προϋπόθεση:

Κυριολεκτικές αξίες

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

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

Ένα boolean literal συμβολίζεται με την τιμή true ή false. Οι κυριολεκτικές τιμές Boolean χρησιμοποιούνται με τον τύπο δεδομένων στήλης Boolean.

Το BLOB literal είναι μια κυριολεκτική συμβολοσειρά με δεκαεξαδικά δεδομένα και ένα x ή X στην αρχή, για παράδειγμα: X"53514697465" .

Η τιμή ενός literal μπορεί επίσης να είναι ένα διακριτικό NULL.

Όνομα στήλης

Το όνομα της στήλης μπορεί να είναι οποιοδήποτε όνομα που ορίζεται στη δήλωση CREATE TABLE ή ένα από τα ακόλουθα ειδικά αναγνωριστικά: ROWID, OID ή _ROWID_. Όλα αυτά τα ειδικά αναγνωριστικά περιγράφουν ένα μοναδικό, αυθαίρετο ακέραιο κλειδί ("κλειδί σειράς") που σχετίζεται με κάθε σειρά κάθε πίνακα. Τα ειδικά αναγνωριστικά ισχύουν για ένα κλειδί γραμμής μόνο εάν η δήλωση CREATE TABLE δεν ορίζει μια υπάρχουσα στήλη με το ίδιο όνομα. Τα πλήκτρα σειρών λειτουργούν το ίδιο με τις στήλες μόνο για ανάγνωση. Ένα κλειδί γραμμής μπορεί να χρησιμοποιηθεί όπου θα μπορούσε να χρησιμοποιηθεί μια κανονική στήλη, αλλά η τιμή ενός κλειδιού σειράς δεν μπορεί να αλλάξει σε μια πρόταση UPDATE ή INSERT. Η πρόταση πίνακα SELECT * FROM δεν περιέχει το κλειδί γραμμής στο σύνολο αποτελεσμάτων.

Δήλωση SELECT

Η πρόταση SELECT μπορεί να εμφανιστεί σε μια έκφραση ως ο δεξιός τελεστής ενός τελεστή IN, μια κλιμακωτή ποσότητα (μια μοναδική τιμή αποτελέσματος) ή ένας τελεστής ενός τελεστή EXISTS. Όταν χρησιμοποιείται ως βαθμωτή ποσότητα ή τελεστής του τελεστή IN, το αποτέλεσμα ενός SELECT μπορεί να έχει μόνο μία στήλη. Επιτρέπεται μια σύνθετη πρόταση SELECT (που ενώνεται με τις λέξεις-κλειδιά UNION ή EXCEPT). Με τον τελεστή EXISTS, οι στήλες στο σύνολο αποτελεσμάτων SELECT παραλείπονται και η παράσταση επιστρέφει TRUE εάν υπάρχουν μία ή περισσότερες σειρές και FALSE εάν το σύνολο αποτελεσμάτων είναι κενό. Εάν καμία συνθήκη στην έκφραση SELECT δεν αναφέρεται σε μια τιμή στο ερώτημα που περιέχει, η έκφραση αξιολογείται μία φορά πριν από οποιαδήποτε άλλη επεξεργασία και το αποτέλεσμα επαναχρησιμοποιείται όπως απαιτείται. Εάν η έκφραση SELECT δεν περιέχει μεταβλητές από το εξωτερικό ερώτημα, γνωστό ως συσχετισμένο υποερώτημα, το SELECT επαναξιολογείται κάθε φορά που απαιτείται.

Εάν το SELECT είναι ο δεξιός τελεστής ενός τελεστή IN, ο τελεστής IN επιστρέφει TRUE εάν το αποτέλεσμα του αριστερού τελεστή είναι ίσο με οποιαδήποτε από τις τιμές στο σύνολο αποτελεσμάτων της δήλωσης SELECT. Ο τελεστής IN μπορεί να προηγείται από τη λέξη-κλειδί NOT για αλλαγή της τιμής της δοκιμής.

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

Έκφραση CAST
Πρόσθετα στοιχεία έκφρασης

Οι ακόλουθες ενότητες περιγράφουν πρόσθετα στοιχεία SQL που μπορείτε να χρησιμοποιήσετε σε εκφράσεις:

Ενσωματωμένες λειτουργίες

Οι ενσωματωμένες λειτουργίες χωρίζονται σε τρεις κύριες κατηγορίες:

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

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

Στατικές λειτουργίες

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

AVG(X) Εμφανίζει τον μέσο όρο όλων των μη NULL X στην ομάδα. Οι τιμές συμβολοσειράς και BLOB που δεν μοιάζουν με αριθμούς αντιμετωπίζονται ως 0. Το αποτέλεσμα της AVG() είναι πάντα μια τιμή κινητής υποδιαστολής, ακόμα κι αν όλες οι τιμές εισόδου είναι ακέραιοι.
Η πρώτη φόρμα επιστρέφει πόσες φορές το X δεν είναι NULL στην ομάδα. Η δεύτερη φόρμα (με το όρισμα *) επιστρέφει τον συνολικό αριθμό σειρών στην ομάδα.
MAX(X) Επιστρέφει τη μέγιστη τιμή όλων των τιμών σε μια ομάδα. Η κανονική σειρά ταξινόμησης χρησιμοποιείται για τον προσδιορισμό της μέγιστης τιμής.
ΣΟΥΣΟΥΡΑΔΑ) Επιστρέφει την ελάχιστη μη NULL τιμή όλων των τιμών στην ομάδα. Η κανονική σειρά ταξινόμησης χρησιμοποιείται για τον προσδιορισμό της ελάχιστης τιμής. Εάν όλες οι τιμές στην ομάδα είναι NULL, επιστρέφεται NULL.
Επιστρέφει το άθροισμα των αριθμών όλων των μη NULL τιμών στην ομάδα. Εάν όλες οι τιμές είναι NULL, τότε η SUM() επιστρέφει NULL και η TOTAL() επιστρέφει 0,0. Το αποτέλεσμα της TOTAL() είναι πάντα μια τιμή κινητής υποδιαστολής. Το αποτέλεσμα της SUM() είναι μια ακέραια τιμή εάν όλες οι τιμές εισόδου που δεν είναι NULL είναι ακέραιοι. Εάν οποιαδήποτε τιμή εισόδου στο SUM() δεν είναι ακέραιος και όχι NULL, η SUM() επιστρέφει μια τιμή κινητής υποδιαστολής. Αυτή η τιμή μπορεί να είναι κατά προσέγγιση της σωστής ποσότητας.

Σε οποιαδήποτε από τις προηγούμενες στατικές συναρτήσεις που λαμβάνουν ένα μόνο όρισμα, μπορείτε να χρησιμοποιήσετε τη λέξη-κλειδί DISTINCT πριν από αυτό το όρισμα. Σε αυτήν την περίπτωση, τα διπλά στοιχεία φιλτράρονται πριν περάσουν στη στατική συνάρτηση. Για παράδειγμα, η κλήση του COUNT(DISTINCT x) επιστρέφει τον αριθμό των ανόμοιων τιμών στη στήλη X, αντί του συνολικού αριθμού μη NULL τιμών στη στήλη x.

Σκαλιστικές συναρτήσεις

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

ABS(X) Επιστρέφει την απόλυτη τιμή του ορίσματος X.
COALESCE (X, Y, ...) Επιστρέφει ένα αντίγραφο του πρώτου ορίσματος που δεν είναι NULL. Εάν όλα τα ορίσματα είναι NULL, επιστρέφεται NULL. Απαιτεί τουλάχιστον δύο επιχειρήματα.
GLOB(X, Y) Αυτή η συνάρτηση υλοποιεί τη σύνταξη X GLOB Y.
IFNULL(X, Y) Επιστρέφει ένα αντίγραφο του πρώτου ορίσματος που δεν είναι NULL. Εάν και τα δύο ορίσματα είναι NULL, επιστρέφεται NULL. Αυτή η συνάρτηση λειτουργεί όπως η COALESCE() .
HEX(X) Το όρισμα αντιμετωπίζεται ως τιμή τύπου αποθήκευσης BLOB. Το αποτέλεσμα είναι μια δεκαεξαδική εμφάνιση των περιεχομένων αυτής της τιμής.
LAST_INSERT_ROWID() Επιστρέφει το αναγνωριστικό (δημιουργημένο πρωτεύον κλειδί) της τελευταίας σειράς που εισήχθη στη βάση δεδομένων μέσω της τρέχουσας παρουσίας SQLConnection. Αυτή η τιμή είναι ίδια με την τιμή που επιστρέφεται από την ιδιότητα SQLConnection.lastInsertRowID.
LENGTH(X) Επιστρέφει το μήκος της συμβολοσειράς X σε χαρακτήρες.
LIKE(X, Y [, Z]) Αυτή η συνάρτηση υλοποιεί τη σύνταξη SQL X LIKE Y. Εάν υπάρχει ο προαιρετικός όρος ESCAPE, η συνάρτηση καλείται με τρία ορίσματα. Διαφορετικά καλείται με δύο μόνο ορίσματα.
LOWER(X) Επιστρέφει ένα αντίγραφο της συμβολοσειράς X με όλους τους χαρακτήρες να έχουν μετατραπεί σε πεζούς.
Επιστρέφει μια συμβολοσειρά με τα κενά στα αριστερά του X έχουν αφαιρεθεί. Εάν έχει καθοριστεί ένα όρισμα Y, η συνάρτηση αφαιρεί τυχόν χαρακτήρες στο Y στα αριστερά του X .
MAX(X, Y, ...) Επιστρέφει το όρισμα με τη μέγιστη τιμή. Τα ορίσματα μπορούν να είναι συμβολοσειρές που προσαρτώνται σε αριθμούς. Η μέγιστη τιμή καθορίζεται από την καθορισμένη σειρά ταξινόμησης. Πρέπει να σημειωθεί ότι η συνάρτηση MAX() είναι απλή όταν έχει 2 ή περισσότερα ορίσματα, αλλά με ένα όρισμα είναι στατική συνάρτηση.
MIN (X, Y, ...) Επιστρέφει το όρισμα με την ελάχιστη τιμή. Τα ορίσματα μπορούν να είναι συμβολοσειρές που προσαρτώνται σε αριθμούς. Η ελάχιστη τιμή καθορίζεται από την καθορισμένη σειρά ταξινόμησης. Πρέπει να σημειωθεί ότι η συνάρτηση MIN() είναι απλή όταν έχει 2 ή περισσότερα ορίσματα, αλλά με ένα όρισμα είναι στατική συνάρτηση.
NULLIF(X, Y) Επιστρέφει το πρώτο όρισμα εάν τα ορίσματα είναι διαφορετικά. διαφορετικά επιστρέφει NULL.
QUOTE(X) Αυτή η ρουτίνα επιστρέφει μια συμβολοσειρά που αντιπροσωπεύει την τιμή του ορίσματός της, κατάλληλη για εισαγωγή σε μια άλλη πρόταση SQL. Οι συμβολοσειρές περικλείονται σε μονά εισαγωγικά, με χαρακτήρες διαφυγής στα εσωτερικά εισαγωγικά όπως απαιτείται. Οι τάξεις αποθήκευσης BLOB κωδικοποιούνται σε δεκαεξαδικά κυριολεκτικά. Αυτή η λειτουργία είναι χρήσιμη κατά τη σύνταξη κανόνων για την υλοποίηση συναρτήσεων αναίρεσης ή επανάληψης.
ΤΥΧΑΙΟΣ(*) Επιστρέφει έναν ψευδοτυχαίο ακέραιο από το εύρος -9223372036854775808 - 9223372036854775807. Αυτή είναι μια τυχαία τιμή Δενείναι ανθεκτικό στην κρυπτογράφηση.
RANDOMBLOB(N) Επιστρέφει N byte ενός αντικειμένου BLOB με ψευδοτυχαία byte. Το N πρέπει να είναι θετικός ακέραιος. Αυτή είναι μια τυχαία τιμή Δενείναι ανθεκτικό στην κρυπτογράφηση. Εάν το N είναι αρνητικό, επιστρέφεται ένα byte.
Στρογγυλοποιεί τον αριθμό X στα Y θέσεις στα δεξιά της υποδιαστολής. Εάν το όρισμα Y παραλειφθεί, χρησιμοποιείται 0.
Επιστρέφει μια συμβολοσειρά με τα κενά στα αριστερά του X έχουν αφαιρεθεί. Εάν έχει καθοριστεί ένα όρισμα Y, η συνάρτηση αφαιρεί τυχόν χαρακτήρες στο Y στα δεξιά του X .
SUBSTR(X, Y, Z) Επιστρέφει μια υποσυμβολοσειρά της συμβολοσειράς εισόδου X που ξεκινά με τον χαρακτήρα Y των χαρακτήρων μήκους Z. Ο αριστερός χαρακτήρας X αντιπροσωπεύει τη θέση του δείκτη 1. Εάν το Y είναι αρνητικό, ο πρώτος χαρακτήρας της υποσυμβολοσειράς βρίσκεται μετρώντας από τα δεξιά και όχι από τα αριστερά.
Επιστρέφει μια συμβολοσειρά με τα κενά στα αριστερά και δεξιά του X έχουν αφαιρεθεί. Εάν δοθεί ένα όρισμα Y, η συνάρτηση αφαιρεί τυχόν χαρακτήρες στο Y στα αριστερά και δεξιά του X.
TYPEOF(X) Επιστρέφει τον τύπο της έκφρασης X . Οι πιθανές τιμές επιστροφής είναι "null", "integer", "real", "text" και "blob". Για περισσότερες πληροφορίες σχετικά με τους τύπους δεδομένων, ανατρέξτε στο .
UPPER(X) Επιστρέφει ένα αντίγραφο της συμβολοσειράς εισόδου X με όλους τους χαρακτήρες να έχουν μετατραπεί σε κεφαλαία.
ZERO BLOB(N) Επιστρέφει ένα BLOB με N 0x00 byte.

Δυνατότητες μορφοποίησης ημερομηνίας και ώρας

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

ΗΜΕΡΟΜΗΝΙΑ (Τ, ...) Η συνάρτηση DATE() επιστρέφει μια συμβολοσειρά που περιέχει την ημερομηνία στην ακόλουθη μορφή: ΕΕΕΕ-ΜΜ-ΗΗ. Η πρώτη παράμετρος (T) καθορίζει τη συμβολοσειρά χρόνου μορφής που βρίσκεται στην ενότητα. Μπορείτε να καθορίσετε οποιονδήποτε αριθμό τροποποιητών μετά τη γραμμή χρόνου. Οι τροποποιητές βρίσκονται στην ενότητα.
TIME (T, ...) Η συνάρτηση TIME() επιστρέφει μια συμβολοσειρά που περιέχει την ώρα στη μορφή ΩΩ:ΛΛ:ΔΔ. Η πρώτη παράμετρος (T) καθορίζει τη συμβολοσειρά χρόνου μορφής που βρίσκεται στην ενότητα. Μπορείτε να καθορίσετε οποιονδήποτε αριθμό τροποποιητών μετά τη γραμμή χρόνου. Οι τροποποιητές βρίσκονται στην ενότητα.
DATETIME(T, ...) Η συνάρτηση DATETIME() επιστρέφει μια συμβολοσειρά που περιέχει την ημερομηνία και την ώρα στη μορφή ΕΕΕΕ-ΜΜ-ΗΗ ΩΩ:ΜΛ:ΔΣ. Η πρώτη παράμετρος (T) καθορίζει τη συμβολοσειρά χρόνου μορφής που βρίσκεται στην ενότητα. Μπορείτε να καθορίσετε οποιονδήποτε αριθμό τροποποιητών μετά τη γραμμή χρόνου. Οι τροποποιητές βρίσκονται στην ενότητα.
JULIANDAY (T, ...) Η συνάρτηση JULIANDAY() επιστρέφει έναν αριθμό που υποδεικνύει τον αριθμό των ημερών από το μεσημέρι GMT στις 24 Νοεμβρίου 4714 π.Χ. και την καθορισμένη ημερομηνία. Η πρώτη παράμετρος (T) καθορίζει τη συμβολοσειρά χρόνου μορφής που βρίσκεται στην ενότητα. Μπορείτε να καθορίσετε οποιονδήποτε αριθμό τροποποιητών μετά τη γραμμή χρόνου. Οι τροποποιητές βρίσκονται στην ενότητα.
STRFTIME(F, T, ...) Η ρουτίνα STRFTIME() επιστρέφει την ημερομηνία που δόθηκε η συμβολοσειρά μορφής ως πρώτο όρισμα στο F . Η συμβολοσειρά μορφής υποστηρίζει τους ακόλουθους χαρακτήρες μπαλαντέρ:

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

Μορφές ώρας

Η μορφή συμβολοσειράς ώρας μπορεί να είναι οποιοδήποτε από τα ακόλουθα:

ΕΕΕΕ-ΜΜ-ΗΗ 2007-06-15
ΕΕΕΕ-ΜΜ-ΗΗ ΩΩ:ΜΜ 2007-06-15 07:30
ΕΕΕΕ-ΜΜ-ΗΗ ΩΩ:ΜΜ:ΔΔ 2007-06-15 07:30:59
ΕΕΕΕ-ΜΜ-ΗΗ ΩΩ:ΜΛ:ΔΔ,ΔΔΣ 2007-06-15 07:30:59.152
ΕΕΕΕ-ΜΜ-ΗΗΗΩ:ΜΜ 2007-06-15T07:30
ΕΕΕΕ-ΜΜ-ΗΗΗΩ:ΜΜ:ΔΔ 2007-06-15T07:30:59
ΕΕΕΕ-ΜΜ-ΗΗΗΩ:ΜΜ:ΔΔ,ΔΔΣ 2007-06-15T07:30:59.152
ΩΩ: ΜΜ 07:30 (ημερομηνία: 01-01-2000)
ΩΩ:ΜΜ:ΔΣ 07:30:59 (ημερομηνία: 01-01-2000)
ΩΩ:ΜΛ:ΣΔ,ΣΣΣ 07:30:59:152 (ημερομηνία: 01-01-2000)
τώρα Τρέχουσα ημερομηνία και ώρα σε μορφή UTC.
DDDD.DDDD Ιουλιανή ημέρα ως αριθμός κινητής υποδιαστολής

Σύμβολο Τσε αυτές τις μορφές, αντιπροσωπεύει τον αλφαβητικό χαρακτήρα "T" που χωρίζει την ημερομηνία και την ώρα. Οι μορφές μόνο για ώρα προϋποθέτουν ημερομηνία 01-01-2001.

Τροποποιητές

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

ημέρες NNN Ο αριθμός των ημερών που προστέθηκαν στον χρόνο.
ώρες NNN Ο αριθμός των ωρών που προστέθηκαν στον χρόνο.
λεπτά NNN Ο αριθμός των λεπτών που προστέθηκαν στον χρόνο.
NNN,NNNN δευτερόλεπτα Ο αριθμός των δευτερολέπτων ή των χιλιοστών του δευτερολέπτου που προστέθηκαν στον χρόνο.
NNN μήνες Ο αριθμός των μηνών που προστέθηκαν στον χρόνο.
χρόνια NNN Ο αριθμός των ετών που προστέθηκαν στον χρόνο.
αρχή του μήνα Μετατοπίζει τον χρόνο πίσω στην αρχή του μήνα.
αρχή του έτους Μετατοπίζει τον χρόνο πίσω στην αρχή του έτους.
έναρξη της ημέρας Μετατοπίζει τον χρόνο πίσω στην αρχή της ημέρας.
ημέρα της εβδομάδας Ν Μετατοπίζει την ώρα προς τα εμπρός κατά την καθορισμένη ημέρα της εβδομάδας. (0 = Κυριακή, 1 = Δευτέρα, κ.λπ.)
Τοπική ώρα Μετατροπή ημερομηνίας σε τοπική ώρα
utc Μετατροπή ημερομηνίας σε μορφή UTC

χειριστές

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

Κοινοί χειριστές

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

|| * / % + - << >> & | < <= > >= = == != <>ΣΕ ΚΑΙ Ή

Υποστηρίζονται τελεστές Unary προθέματος:

- ! ~ΟΧΙ

Ο τελεστής COLLATE μπορεί να θεωρηθεί ως ένας μοναδικός τελεστής postfix. Ο τελεστής COLLATE έχει την υψηλότερη προτεραιότητα. Έχει πάντα πιο σφιχτό δέσιμο από το πρόθεμα unary τελεστή ή οποιονδήποτε δυαδικό τελεστή.

Πρέπει να σημειωθεί ότι υπάρχουν δύο τύποι τελεστών ισότητας και ανισότητας. Η ισότητα μπορεί να πάρει τη μορφή = ή == . Ο τελεστής ανισότητας μπορεί να είναι της μορφής != ή<> .

Χειριστής || είναι ένας τελεστής συνένωσης συμβολοσειρών - συνενώνει δύο συμβολοσειρές των τελεστών του.

Ο τελεστής % δίνει το υπόλοιπο όταν ο δεξιός τελεστής διαιρείται με τον αριστερό τελεστή.

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

Δηλώσεις SQL

ΑΡΕΣΕΙ

Ο τελεστής LIKE εκτελεί αντιστοίχιση προτύπων.

Expr::= (όνομα στήλης | expr) LIKE μοτίβο μοτίβου::= "[ συμβολοσειρά | % | _ ]"

Ο τελεστής στα δεξιά του τελεστή LIKE περιέχει το μοτίβο και ο αριστερός τελεστής περιέχει τη συμβολοσειρά για να ταιριάζει με το μοτίβο. Το ποσοστό χαρακτήρα (%) στο μοτίβο είναι μπαλαντέρ και ταιριάζει με οποιαδήποτε ακολουθία χαρακτήρων (ή έλλειψη χαρακτήρων) στη συμβολοσειρά. Ο χαρακτήρας υπογράμμισης (_) στο μοτίβο ταιριάζει με οποιονδήποτε μεμονωμένο χαρακτήρα στη συμβολοσειρά. Οποιοσδήποτε άλλος χαρακτήρας ταιριάζει με τον εαυτό του ή με ισοδύναμο πεζό/κεφαλαίο χαρακτήρα, που σημαίνει ότι οι αντιστοιχίσεις καθορίζονται ανεξάρτητα από την περίπτωση. (Σημείωση: Η μηχανή βάσης δεδομένων κατανοεί μόνο κεφαλαία/πεζά 7-bit λατινικούς χαρακτήρες. Επομένως, ο τελεστής LIKE έχει διάκριση πεζών-κεφαλαίων για χαρακτήρες iso8859 ή UTF-8 8 bit. Για παράδειγμα, η έκφραση "a" LIKE "A" είναι ΑΛΗΘΕΙΑ αλλά " æ" ΣΑΝ "Æ" - ΛΑΘΟΣ). Η ευαισθησία πεζών-κεφαλαίων των λατινικών χαρακτήρων μπορεί να αλλάξει χρησιμοποιώντας την ιδιότητα SQLConnection.caseSensitiveLike.

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

GLOB

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

ΣΕ

Ο τελεστής IN αξιολογεί εάν ο αριστερός του τελεστής είναι ίσος με μία από τις τιμές του δεξιού τελεστή του (το σύνολο τιμών σε παρένθεση).

In-expr::= expr IN (value-list) | expr IN (επιλογή-δήλωση) | expr IN table-name value-list::= literal-value [, literal-value]*

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

ΑΝΑΜΕΣΑ ΚΑΙ

Ο τελεστής BETWEEN...AND είναι ισοδύναμος με τη χρήση δύο παραστάσεων με τους τελεστές >= και<= . Например, выражение x BETWEEN y AND z эквивалентно x >= y ΚΑΙ x<= z .

ΔΕΝ

Ο τελεστής NOT είναι τελεστής άρνησης. Οι τελεστές GLOB, LIKE και IN μπορούν να προηγούνται από τη λέξη-κλειδί NOT για να αντιστρέψετε την τιμή δοκιμής (με άλλα λόγια, για να ελέγξετε ότι η τιμή Δενταιριάζει με το καθορισμένο μοτίβο).

Επιλογές

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

Μη υποστηριζόμενες δυνατότητες SQL

  • Περιορισμοί ΕΞΩΤΕΡΙΚΟΥ ΚΛΕΙΔΙΟΥ. Οι περιορισμοί Ξένων Κλειδιών αναλύονται, αλλά δεν επιβάλλονται.
  • Ενεργοποιητές. Οι κανόνες ετικέτας ΓΙΑ ΚΑΘΕ ΔΗΛΩΣΗ δεν υποστηρίζονται (όλα τα εναύσματα πρέπει να είναι ΓΙΑ ΚΑΘΕ ΣΕΙΡΑ). Οι κανόνες ετικέτας ΑΝΤΙ ΓΙΑ δεν υποστηρίζονται σε πίνακες (μόνο οι κανόνες ετικέτας ΑΝΤΙ ΓΙΑ προβολές επιτρέπονται). Οι επαναλαμβανόμενες ενεργοποιήσεις (που καλούν τον εαυτό τους) δεν υποστηρίζονται.
  • ALTER TABLE. Υποστηρίζονται μόνο οι παραλλαγές RENAME TABLE και ADD COLUMN της εντολής ALTER TABLE. Άλλοι τύποι λειτουργιών ALTER TABLE, όπως DROP COLUMN, ALTER COLUMN, ADD CONSTRAINT, κ.λπ. παραλείπονται.
  • Ένθετες συναλλαγές. Επιτρέπεται μόνο μία ενεργή συναλλαγή.
  • ΔΕΞΙΑ και ΠΛΗΡΗΣ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ. Η ΔΕΞΙΑ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ ή η ΠΛΗΡΗΣ ΕΞΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ δεν υποστηρίζονται.
  • ΠΡΟΒΟΛΗ ενημέρωσης. Η προβολή είναι μόνο για ανάγνωση. Η προβολή δεν μπορεί να εκδώσει δήλωση DELETE, INSERT ή UPDATE. Το έναυσμα ΑΝΤΙ ΓΙΑ, το οποίο ενεργοποιείται κατά την προσπάθεια εκτέλεσης DELETE, INSERT ή UPDATE σε μια προβολή, υποστηρίζεται και μπορεί να χρησιμοποιηθεί για την ενημέρωση βοηθητικών πινάκων στο σώμα της σκανδάλης.
  • ΧΟΡΗΓΗΣΗ και ΑΝΑΚΛΗΣΗ. Η βάση δεδομένων είναι ένα απλό αρχείο στο δίσκο. Τα μόνα δικαιώματα πρόσβασης που ισχύουν είναι τα κανονικά δικαιώματα αρχείων στο υποκείμενο λειτουργικό σύστημα. Οι εντολές GRANT και REVOKE, που υπάρχουν συνήθως σε σχεσιακά DBMS πελάτη/διακομιστή, δεν υλοποιούνται.

Τα ακόλουθα στοιχεία SQL και δυνατότητες SQLite υποστηρίζονται σε ορισμένες υλοποιήσεις SQLite αλλά δεν υποστηρίζονται στο Adobe AIR. Το μεγαλύτερο μέρος αυτής της λειτουργικότητας είναι διαθέσιμο μέσω μεθόδων της κλάσης SQLConnection.

  • Στοιχεία SQL που σχετίζονται με συναλλαγές (BEGIN, END, COMMIT, ROLLBACK): Οι ακόλουθες λειτουργίες είναι διαθέσιμες μέσω μεθόδων που σχετίζονται με συναλλαγές της κλάσης SQLConnection: SQLConnection.begin(), SQLConnection.commit() και SQLConnection.rollback().
  • ΑΝΑΛΥΕΙ SQLConnection.analyze() .
  • ΣΥΝΔΕΩ: Αυτή η δυνατότητα είναι διαθέσιμη μέσω της μεθόδου SQLConnection.attach().
  • ΑΝΤΙΓΡΑΦΟ
  • ΔΗΜΙΟΥΡΓΗΣΤΕ ΕΙΚΟΝΙΚΟ ΤΡΑΠΕΖΙ: Αυτή η οδηγία δεν υποστηρίζεται.
  • ΑΠΟΣΠΩ: Αυτή η δυνατότητα είναι διαθέσιμη μέσω της μεθόδου SQLConnection.detach().
  • ΠΡΑΓΜΑ: Αυτή η οδηγία δεν υποστηρίζεται.
  • ΚΕΝΟ: Αυτή η δυνατότητα είναι διαθέσιμη μέσω της μεθόδου SQLConnection.compact().
  • Δεν υπάρχει πρόσβαση στον πίνακα συστήματος. Οι πίνακες συστήματος, συμπεριλαμβανομένου του sqlite_master και άλλων πινάκων με το πρόθεμα "sqlite_", δεν είναι διαθέσιμοι σε δηλώσεις SQL. Το περιβάλλον χρόνου εκτέλεσης περιλαμβάνει ένα API σχήματος, το οποίο παρέχει έναν αντικειμενοστραφή τρόπο πρόσβασης σε δεδομένα σχήματος. Για περισσότερες πληροφορίες, ανατρέξτε στη μέθοδο SQLConnection.loadSchema().
  • Συνάρτηση SQLITE_VERSION().: Η συνάρτηση sqlite_version() δεν είναι διαθέσιμη για χρήση σε δηλώσεις SQL.
  • Συναρτήσεις κανονικής έκφρασης (MATCH() και REGEX()). Αυτές οι συναρτήσεις δεν είναι διαθέσιμες σε δηλώσεις SQL.

Τα ακόλουθα χαρακτηριστικά διαφέρουν μεταξύ των διαφορετικών υλοποιήσεων του SQLite και του Adobe AIR:

  • Ευρετηριασμένες παράμετροι εντολών. Σε πολλές υλοποιήσεις, οι παράμετροι εντολών με ευρετήριο βασίζονται σε μονάδες. Ωστόσο, στο Adobe AIR, οι παράμετροι εντολών με ευρετήριο βασίζονται στο μηδέν (δηλαδή, στην πρώτη παράμετρο εκχωρείται δείκτης 0, στη δεύτερη παράμετρος εκχωρείται δείκτης 1 κ.ο.κ.).

Πρόσθετες δυνατότητες SQL

Οι παρακάτω προεπιλεγμένοι τύποι συνάφειας στηλών δεν υποστηρίζονται στο SQLite, αλλά υποστηρίζονται στο Adobe AIR:

Οι παρακάτω προεπιλεγμένοι τύποι κυριολεκτικών τιμών δεν υποστηρίζονται στο SQLite, αλλά υποστηρίζονται στο Adobe AIR:

  • Εννοια αληθής. Αντιπροσωπεύει την κυριολεκτική τιμή Boolean για εργασία με στήλες BOOLEAN.
  • Εννοια ψευδής. Αντιπροσωπεύει την κυριολεκτική τιμή Boolean false για εργασία με στήλες BOOLEAN.

Υποστηριζόμενοι τύποι δεδομένων

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

Μαθήματα αποθήκευσης

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

  • ΜΗΔΕΝΙΚΟ. Η τιμή είναι NULL.
  • ΑΚΕΡΑΙΟΣ ΑΡΙΘΜΟΣ. Η τιμή είναι ένας υπογεγραμμένος ακέραιος.
  • ΠΡΑΓΜΑΤΙΚΟΣ. Η τιμή αντιπροσωπεύει μια αριθμητική τιμή κινητής υποδιαστολής.
  • ΚΕΙΜΕΝΟ. Η τιμή είναι μια συμβολοσειρά κειμένου (περιορίζεται στα 256 MB).
  • ΑΜΟΡΦΗ ΜΑΖΑ. Η τιμή αντιπροσωπεύει ένα δυαδικό μεγάλο αντικείμενο (BLOB). με άλλα λόγια, ακατέργαστα δυαδικά δεδομένα (περιορίζεται στα 256 MB).

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

Στα κυριολεκτικά που αποτελούν μέρος μιας δήλωσης SQL εκχωρείται η κλάση αποθήκευσης TEXT εάν περικλείονται σε μονά ή διπλά εισαγωγικά, INTEGER εάν το literal είναι ένας αριθμός χωρίς δεκαδικό σημείο ή εκθέτης, REAL εάν το literal είναι ένας αριθμός χωρίς εισαγωγικό με δεκαδικό σημείο ή εκθέτης και NULL εάν η τιμή είναι NULL. Τα κυριολεκτικά με κλάση αποθήκευσης BLOB συμβολίζονται ως X"ABCD" . Για περισσότερες πληροφορίες, βλ.

Στις τιμές που παρέχονται ως παράμετροι χρησιμοποιώντας τον συσχετιστικό πίνακα SQLStatement.parameters εκχωρείται μια κλάση αποθήκευσης που μοιάζει περισσότερο με μια σύνδεση με τον αρχικό τύπο δεδομένων. Για παράδειγμα, στις τιμές int εκχωρείται η κλάση αποθήκευσης INTEGER, στις τιμές Number εκχωρείται η κλάση αποθήκευσης REAL, στις τιμές συμβολοσειρών εκχωρείται η κλάση αποθήκευσης TEXT και στα αντικείμενα ByteArray εκχωρείται η κλάση αποθήκευσης BLOB.

Ομοιότητα στήλης

Ομοιότητεςστήλη είναι ο προτεινόμενος τύπος για τα δεδομένα σε αυτήν τη στήλη. Εάν μια τιμή αποθηκεύεται σε μια στήλη (μέσω μιας δήλωσης INSERT ή UPDATE), ο χρόνος εκτέλεσης επιχειρεί να μετατρέψει τον τύπο δεδομένων αυτής της τιμής στην καθορισμένη συνάφεια. Για παράδειγμα, εάν μια τιμή Date (μια παρουσία ActionScript ή JavaScript Date) εισαχθεί σε μια στήλη με συνάφεια TEXT, η τιμή Date μετατρέπεται σε αναπαράσταση συμβολοσειράς (ισοδύναμη με την κλήση της μεθόδου toString() του αντικειμένου) πριν αποθηκευτεί στο βάση δεδομένων. Εάν η τιμή δεν μπορεί να μετατραπεί στην καθορισμένη συνάφεια, παρουσιάζεται σφάλμα και η λειτουργία αποτυγχάνει. Όταν μια τιμή ανακτάται από τη βάση δεδομένων χρησιμοποιώντας μια πρόταση SELECT, επιστρέφεται ως μια παρουσία της κλάσης που αντιστοιχεί στη συγγένεια, ανεξάρτητα από το αν μετατράπηκε από άλλο τύπο τη στιγμή που αποθηκεύτηκε.

Εάν η στήλη δέχεται τιμές NULL, η μηδενική τιμή ActionScript ή JavaScript μπορεί να χρησιμοποιηθεί ως τιμή παραμέτρου για την αποθήκευση NULL στη στήλη. Όταν ανακτάτε μια τιμή κλάσης αποθήκευσης NULL σε μια πρόταση SELECT, αυτή επιστρέφεται πάντα ως μηδενική από ActionScript ή JavaScript, ανεξάρτητα από τη συνάφεια στηλών. Εάν μια στήλη δέχεται μηδενικές τιμές, θα πρέπει πάντα να ελέγχετε τις τιμές που ανακτώνται από αυτήν τη στήλη για να προσδιορίσετε εάν είναι μηδενικές πριν επιχειρήσετε να μεταφέρετε την τιμή σε έναν μη μηδενικό τύπο (όπως Number ή Boolean).

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

  • TEXT (ή STRING)
  • ΑΡΙΘΜΗΤΙΚΟΣ
  • ΑΚΕΡΑΙΟΣ ΑΡΙΘΜΟΣ
  • ΠΡΑΓΜΑΤΙΚΟ (ή ΑΡΙΘΜΟΣ)
  • BOOLEAN
  • XMLLIST
  • ΑΝΤΙΚΕΙΜΕΝΟ

TEXT (ή STRING)

Μια στήλη με συνάφεια TEXT ή STRING αποθηκεύει όλα τα δεδομένα χρησιμοποιώντας τις κλάσεις αποθήκευσης NULL, TEXT ή BLOB. Εάν τα δεδομένα με συνάφεια TEXT εισάγονται σε μια στήλη, μετατρέπονται σε μορφή κειμένου πριν αποθηκευτούν.

ΑΡΙΘΜΗΤΙΚΟΣ

Μια στήλη συνάφειας NUMERIC περιέχει τιμές που χρησιμοποιούν τις κλάσεις αποθήκευσης NULL, REAL ή INTEGER. Όταν τα δεδομένα κειμένου εισάγονται σε μια στήλη NUMERIC, γίνεται προσπάθεια μετατροπής τους σε ακέραιο ή πραγματικό αριθμό πριν την αποθήκευση. Εάν η μετατροπή είναι επιτυχής, η τιμή αποθηκεύεται χρησιμοποιώντας την κλάση αποθήκευσης INTEEGER ή REAL (για παράδειγμα, η τιμή "10.05" μετατρέπεται στην κλάση αποθήκευσης REAL πριν αποθηκευτεί). Εάν η μετατροπή δεν μπορεί να ολοκληρωθεί, παρουσιάζεται σφάλμα. Μια προσπάθεια μετατροπής μιας τιμής NULL αποτυγχάνει. Η τιμή που ανακτάται από μια στήλη NUMERIC επιστρέφεται ως μια παρουσία του πιο συγκεκριμένου αριθμητικού τύπου στον οποίο ταιριάζει η τιμή. Με άλλα λόγια, εάν η τιμή είναι θετικός ακέραιος ή 0, επιστρέφεται ως παρουσία του uint. Αν αντιπροσωπεύει αρνητικό ακέραιο, επιστρέφεται ως στιγμιότυπο του int. Τέλος, αν έχει δεκαδικό μέρος (όχι ακέραιο), επιστρέφεται ως στιγμιότυπο του Αριθμού.

ΑΚΕΡΑΙΟΣ ΑΡΙΘΜΟΣ

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

ΠΡΑΓΜΑΤΙΚΟ (ή ΑΡΙΘΜΟΣ)

Η συμπεριφορά μιας στήλης με συνάφεια ΠΡΑΓΜΑΤΙΚΗ ή ΑΡΙΘΜΟΥ είναι παρόμοια με αυτή μιας στήλης με ΑΡΙΘΜΗΤΙΚΗ συγγένεια, αλλά εδώ οι ακέραιες τιμές αναγκάζονται να μετατραπούν σε αναπαράσταση κινητής υποδιαστολής. Η τιμή στη στήλη REAL επιστρέφεται πάντα από τη βάση δεδομένων ως παρουσία αριθμού.

BOOLEAN

Μια στήλη συνάφειας BOOLEAN αποθηκεύει αληθείς ή ψευδείς τιμές. Η στήλη BOOLEAN δέχεται μια τιμή που είναι μια παρουσία ActionScript ή JavaScript ενός Boolean. Όταν ο κώδικας επιχειρεί να αποθηκεύσει μια τιμή συμβολοσειράς, μια συμβολοσειρά της οποίας το μήκος είναι μεγαλύτερο από μηδέν θεωρείται "true" και μια κενή τιμή String θεωρείται "false". Εάν ο κωδικός επιχειρήσει να αποθηκεύσει αριθμητικά δεδομένα, τότε τυχόν μη μηδενικές τιμές αποθηκεύονται ως "true" και 0 ως "false". Όταν ανακτάτε μια τιμή Boolean χρησιμοποιώντας τη δήλωση SELECT, αυτή επιστρέφεται ως παρουσία της Boolean. Οι μη NULL τιμές αποθηκεύονται χρησιμοποιώντας την κλάση αποθήκευσης INTEGER (0 για "false" και 1 για "true") και μετατρέπονται σε Boolean αντικείμενα κατά την ανάκτηση δεδομένων.

ΗΜΕΡΟΜΗΝΙΑ

Μια στήλη συνάφειας DATE αποθηκεύει τις τιμές ημερομηνίας και ώρας. Η στήλη ΗΜΕΡΟΜΗΝΙΑ μπορεί να δεχτεί τιμές που είναι περιπτώσεις Ημερομηνίας ActionScript ή Ημερομηνίας JavaScript. Όταν προσπαθείτε να αποθηκεύσετε μια τιμή συμβολοσειράς σε μια στήλη DATE, ο χρόνος εκτέλεσης θα προσπαθήσει να τη μετατρέψει σε μια Ιουλιανή ημερομηνία. Εάν η μετατροπή δεν μπορεί να ολοκληρωθεί, παρουσιάζεται σφάλμα. Εάν ο κωδικός επιχειρήσει να αποθηκεύσει μια τιμή Number, int ή uint, τότε δεν επιχειρείται επικύρωση δεδομένων και η τιμή θεωρείται έγκυρη τιμή ημερομηνίας Julian. Όταν ανακτάτε μια τιμή DATE χρησιμοποιώντας μια δήλωση SELECT, αυτή μετατρέπεται αυτόματα σε μια παρουσία Ημερομηνίας. Οι τιμές DATE αποθηκεύονται ως τιμές ημερομηνίας Julian χρησιμοποιώντας την κλάση αποθήκευσης REAL, επομένως οι τελεστές ταξινόμησης και σύγκρισης λειτουργούν όπως αναμένεται.

XML ή XMLLIST

Η στήλη συνάφειας XML ή XMLLIST περιέχει δομές XML. Όταν ο κώδικάς σας επιχειρεί να αποθηκεύσει δεδομένα σε μια στήλη XML χρησιμοποιώντας την παράμετρο SQLStatement, ο χρόνος εκτέλεσης θα προσπαθήσει να μετατρέψει και να επικυρώσει την τιμή χρησιμοποιώντας τη συνάρτηση ActionScript XML() ή XMLList(). Εάν η τιμή δεν μπορεί να μετατραπεί σε έγκυρη XML, παρουσιάζεται σφάλμα. Όταν προσπαθείτε να αποθηκεύσετε δεδομένα χρησιμοποιώντας μια κυριολεκτική τιμή κειμένου SQL (για παράδειγμα, INSERT INTO (col1) VALUES (" Invalid XML (no closing tag) "), η τιμή δεν αναλύεται ή επικυρώνεται επειδή η μορφή της θεωρείται έγκυρη. αποθηκεύει μια μη έγκυρη τιμή και, στη συνέχεια, όταν ανακτηθεί, επιστρέφει ένα κενό αντικείμενο XML. Η τιμή δεδομένων XML και XMLLIST αποθηκεύεται χρησιμοποιώντας την κλάση αποθήκευσης TEXT ή NULL.

ΑΝΤΙΚΕΙΜΕΝΟ

Η στήλη συνάφεια OBJECT περιέχει πολύπλοκα αντικείμενα ActionScript ή JavaScript, συμπεριλαμβανομένων παρουσιών της κλάσης Object, καθώς και παρουσίες υποκλάσεων Object, όπως παρουσίες Array, ακόμη και παρουσίες προσαρμοσμένων κλάσεων. Τα δεδομένα της στήλης OBJECT σειριοποιούνται σε μορφή AMF3 και αποθηκεύονται χρησιμοποιώντας την κλάση αποθήκευσης BLOB. Όταν ανακτάται μια τιμή, αποσυντονίζεται από το AMF3 και επιστρέφεται ως παρουσία της κλάσης όπως αποθηκεύτηκε. Θα πρέπει να σημειωθεί ότι ορισμένες κλάσεις ActionScript, ιδιαίτερα τα αντικείμενα προβολής, μπορούν να αποσυνδεθούν ως στιγμιότυπα του αρχικού τύπου δεδομένων τους. Πριν αποθηκεύσετε μια παρουσία μιας προσαρμοσμένης κλάσης, πρέπει να καταχωρήσετε ένα ψευδώνυμο κλάσης χρησιμοποιώντας τη μέθοδο flash.net.registerClassAlias() (ή στο Flex, προσθέτοντας μεταδεδομένα στη δήλωση κλάσης). Επιπλέον, πριν ανακτήσετε τέτοια δεδομένα, πρέπει να καταχωρήσετε το ίδιο ψευδώνυμο για την κλάση. Οποιαδήποτε δεδομένα δεν μπορούν να αποσειριοποιηθούν σωστά επειδή η κλάση δεν είναι εγγενώς αποσειριοποιήσιμη ή το ψευδώνυμο της κλάσης λείπει ή είναι ασυνεπές, επιστρέφεται ως ανώνυμο αντικείμενο (ένα στιγμιότυπο της κλάσης Object) με τις ιδιότητες και τις τιμές που αντιστοιχούν στην αρχικά αποθηκευμένη παρουσία.

ΚΑΝΕΝΑΣ

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

Προσδιορισμός ομοιοτήτων

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

  • Εάν ο τύπος δεδομένων μιας στήλης περιέχει οποιεσδήποτε συμβολοσειρές "CHAR", "CLOB", "STRI" ή "TEXT", τότε η στήλη έχει συγγένεια TEXT/STRING. Θα πρέπει να σημειωθεί ότι ο τύπος VARCHAR περιέχει τη συμβολοσειρά "CHAR" και του αποδίδεται η συγγένεια TEXT.
  • Εάν ο τύπος δεδομένων της στήλης περιέχει συμβολοσειρές "BLOB" ή δεν έχει καθοριστεί τύπος δεδομένων, τότε η στήλη έχει συγγένεια ΚΑΜΙΑ.
  • Εάν ο τύπος δεδομένων της στήλης περιέχει τη συμβολοσειρά "XMLL", τότε η στήλη έχει συγγένεια XMLLIST.
  • Εάν ο τύπος δεδομένων είναι συμβολοσειρά "XML", τότε η στήλη έχει συγγένεια XML.
  • Εάν ο τύπος δεδομένων περιέχει τη συμβολοσειρά "OBJE", τότε η στήλη έχει τη συνάφεια OBJECT.
  • Εάν ο τύπος δεδομένων περιέχει τη συμβολοσειρά "BOOL", τότε η στήλη έχει συγγένεια BOOLEAN.
  • Εάν ο τύπος δεδομένων περιέχει τη συμβολοσειρά "DATE", τότε η στήλη έχει συνάφεια DATE.
  • Εάν ένας τύπος δεδομένων περιέχει τη συμβολοσειρά "INT" (συμπεριλαμβανομένου του "UINT"), του εκχωρείται η συνάφεια INTEGER.
  • Εάν ο τύπος δεδομένων μιας στήλης περιέχει οποιεσδήποτε συμβολοσειρές "REAL", "NUMB", "FLOA" ή "DOUB", τότε η στήλη έχει συνάφεια ΠΡΑΓΜΑΤΙΚΟ/ΑΡΙΘΜΟ.
  • Διαφορετικά, η ομοιότητα θα είναι ΑΡΙΘΜΗΤΙΚΗ.
  • Εάν δημιουργείται ένας πίνακας χρησιμοποιώντας τη δήλωση CREATE TABLE t AS SELECT..., τότε σε όλες τις στήλες δεν δίνεται τύπος δεδομένων και τους εκχωρείται συνάφεια ΚΑΜΙΑ.

Τύποι δεδομένων και χειριστές σύγκρισης

Δυαδικοί τελεστές σύγκρισης = υποστηρίζονται.< , <= , >= και != , καθώς και ο τελεστής δοκιμής μέλους, ο τελεστής IN και ο τριαδικός τελεστής σύγκρισης BETWEEN . Για λεπτομέρειες σχετικά με αυτούς τους τελεστές, βλ.

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

  • Μια τιμή με κλάση αποθήκευσης NULL θεωρείται μικρότερη από οποιαδήποτε άλλη τιμή (συμπεριλαμβανομένης μιας άλλης τιμής με κατηγορία αποθήκευσης NULL).
  • Μια ΑΚΕΡΑΙΟΣ ή ΠΡΑΓΜΑΤΙΚΗ τιμή είναι μικρότερη από οποιαδήποτε τιμή TEXT ή BLOB. Κατά τη σύγκριση ενός ΑΚΕΡΑΙΟΥ ή ΠΡΑΓΜΑΤΙΚΟΥ με μια άλλη τιμή ΑΚΕΡΑΙΟΥ ή ΠΡΑΓΜΑΤΙΚΟΥ, πραγματοποιείται σύγκριση αριθμών.
  • Η τιμή TEXT είναι μικρότερη από την τιμή BLOB. Κατά τη σύγκριση δύο τιμών TEXT, πραγματοποιείται μια δυαδική σύγκριση.
  • Κατά τη σύγκριση δύο τιμών BLOB, το αποτέλεσμα καθορίζεται πάντα από μια δυαδική σύγκριση.

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

  • Κατά τη σύγκριση μιας τιμής στήλης με το αποτέλεσμα μιας έκφρασης, η ομοιότητα της στήλης εφαρμόζεται στο αποτέλεσμα της παράστασης πριν γίνει η σύγκριση.
  • Όταν συγκρίνετε δύο τιμές στηλών, εάν η μία στήλη έχει συνάφεια ΑΚΕΡΑΙΟΣ, ΠΡΑΓΜΑΤΙΚΟΣ ή ΑΡΙΘΜΗΣ και η άλλη όχι, τότε η συγγένεια NUMERIC εφαρμόζεται σε οποιεσδήποτε τιμές με την κλάση αποθήκευσης TEXT που ανακτάται από τη στήλη μη ΑΡΙΘΜΗΤΙΚΗ.
  • Κατά τη σύγκριση των αποτελεσμάτων δύο εκφράσεων, δεν πραγματοποιείται μετατροπή. Τα αποτελέσματα συγκρίνονται «ως έχουν». Όταν συγκρίνουμε μια συμβολοσειρά με έναν αριθμό, η τελευταία είναι πάντα μικρότερη από τη συμβολοσειρά.

Ο τριαδικός τελεστής BETWEEN μετατρέπεται πάντα στο δυαδικό του ισοδύναμο. Για παράδειγμα, ένα BETWEEN b ΚΑΙ c μετατρέπεται σε a >= b ΚΑΙ a<= c , даже если это означает, что разные сходства применяются к a при каждом сравнении, необходимом для вычисления выражения.

Εκφράσεις όπως ένα IN (ΕΠΙΛΟΓΗ b ....) ακολουθούν τους τρεις κανόνες που παρατίθενται προηγουμένως για δυαδική σύγκριση, δηλαδή είναι ίδιες με το a = b . Για παράδειγμα, εάν το b είναι μια τιμή στήλης και το a είναι μια έκφραση, τότε η ομοιότητα του b εφαρμόζεται στο a πριν από οποιαδήποτε σύγκριση. Η παράσταση a IN (x, y, z) γίνεται a = +x Ή a = +y Ή a = +z . Οι τιμές στα δεξιά του τελεστή IN (στο παράδειγμα που φαίνεται, οι τιμές x, y και z) θεωρούνται εκφράσεις, ακόμα κι αν είναι τιμές στήλης. Εάν η τιμή στα αριστερά του τελεστή IN είναι στήλη, τότε χρησιμοποιείται η ομοιότητα αυτής της στήλης. Εάν η τιμή είναι έκφραση, τότε δεν πραγματοποιείται μετατροπή.

Η σειρά με την οποία εκτελούνται οι συγκρίσεις μπορεί επίσης να επηρεαστεί από την ρήτρα COLLATE. Για περισσότερες πληροφορίες, βλ.

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

Για καθέναν από τους υποστηριζόμενους μαθηματικούς τελεστές, *, /, %, + και -, εφαρμόζεται μια αριθμητική ομοιότητα σε κάθε τελεστή πριν από την αξιολόγηση της παράστασης. Εάν οποιοσδήποτε τελεστής δεν μπορεί να μετατραπεί με επιτυχία στην κλάση αποθήκευσης NUMERIC, το αποτέλεσμα της παράστασης θα είναι NULL.

Όταν χρησιμοποιείτε τον τελεστή συνένωσης || κάθε τελεστής μετατρέπεται σε κλάση αποθήκευσης TEXT πριν από την αξιολόγηση της έκφρασης. Εάν οποιοσδήποτε τελεστής δεν μπορεί να μετατραπεί στην κλάση αποθήκευσης NUMERIC, το αποτέλεσμα της παράστασης θα είναι NULL. Η αποτυχία μετατροπής μιας τιμής μπορεί να συμβεί σε δύο περιπτώσεις: εάν η τιμή του τελεστή είναι NULL ή εάν πρόκειται για αντικείμενο BLOB με κλάση αποθήκευσης διαφορετική από το TEXT.

Τύποι δεδομένων και ταξινόμηση

Κατά την ταξινόμηση τιμών χρησιμοποιώντας την ρήτρα ORDER BY, η κλάση αποθήκευσης NULL έρχεται πρώτη. Στη συνέχεια, ακολουθήστε τις τιμές ΑΚΕΡΑΙΟΣ και ΠΡΑΓΜΑΤΙΚΟΥ με αριθμητική σειρά και, στη συνέχεια, τις τιμές ΚΕΙΜΕΝΟΥ με δυαδική σειρά ή ανάλογα με την καθορισμένη ταξινόμηση (ΔΥΑΔΙΚΗ ή NOCASE). Συμπληρώστε τη λίστα με τιμές BLOB με δυαδική σειρά. Δεν πραγματοποιείται μετατροπή κλάσης αποθήκευσης πριν από την ταξινόμηση.

Τύποι δεδομένων και ομαδοποίηση

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

Τύποι δεδομένων και σύνθετες δηλώσεις SELECT

Οι σύνθετες προτάσεις SELECT—UNION, INTERSECT και EXCEPT—εκτελούν σιωπηρές συγκρίσεις τιμών. Πριν γίνουν αυτές οι συγκρίσεις, μπορεί να εφαρμοστεί μια ομοιότητα σε κάθε τιμή. Η ίδια ομοιότητα (αν υπάρχει) ισχύει για όλες τις τιμές που μπορεί να επιστραφούν σε μια μεμονωμένη στήλη συνόλου αποτελεσμάτων μιας σύνθετης πρότασης SELECT. Η συνάφεια που εφαρμόζεται είναι η συνάφεια της στήλης που επιστρέφεται από το πρώτο στοιχείο της πρότασης SELECT που έχει την τιμή στήλης (και όχι κάποιον άλλο τύπο έκφρασης) σε αυτήν τη θέση. Για μια δεδομένη στήλη μιας σύνθετης δήλωσης SELECT, εάν κανένα από τα στοιχεία της δήλωσης SELECT δεν επιστρέφει τιμή στήλης, η ομοιότητα δεν εφαρμόζεται στις τιμές από αυτήν τη στήλη πριν από τη σύγκριση τους.

Συμβάσεις που χρησιμοποιούνται σε αυτό το έγγραφο

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

  • Υπόθεση κειμένου
    • ΚΕΦΑΛΑΙΑ - Οι κυριολεκτικές λέξεις-κλειδιά SQL γράφονται με κεφαλαία
    • πεζά—οι όροι κράτησης θέσης ή τα ονόματα προτάσεων γράφονται με πεζά
  • Σύμβολα ορισμού
    • ::= - δηλώνει τον ορισμό μιας πρότασης ή μιας έκφρασης
  • Ομαδοποίηση και εναλλακτικοί χαρακτήρες
    • | — ο χαρακτήρας κάθετος προς τα εμπρός χρησιμοποιείται μεταξύ εναλλακτικών παραμέτρων και μπορεί να διαβαστεί ως "ή"
    • — τα στοιχεία σε αγκύλες είναι προαιρετικά. Οι αγκύλες μπορούν να περικλείουν ένα μόνο στοιχείο ή ένα σύνολο εναλλακτικών στοιχείων
    • () - παρενθέσεις που περικλείουν εναλλακτικές (ένα σύνολο στοιχείων που χωρίζονται με κάθετες προς τα εμπρός) υποδηλώνουν μια απαιτούμενη ομάδα στοιχείων, δηλαδή ένα σύνολο στοιχείων που είναι πιθανές τιμές για ένα μόνο απαιτούμενο στοιχείο
  • Ποσοτικοί δείκτες
    • + - ένα σύμβολο συν μετά από ένα στοιχείο σε παρένθεση σημαίνει ότι το στοιχείο που προηγείται μπορεί να εμφανιστεί 1 ή περισσότερες φορές
    • * - το σύμβολο αστερίσκου μετά από ένα στοιχείο σε αγκύλες σημαίνει ότι το στοιχείο που προηγείται του (περικλείεται σε αγκύλες) μπορεί να εμφανιστεί 0 ή περισσότερες φορές
  • Κυριολεκτικοί χαρακτήρες
    • * - ο χαρακτήρας αστερίσκου σε ένα όνομα στήλης ή ανάμεσα σε παρενθέσεις μετά από ένα όνομα συνάρτησης υποδηλώνει τον χαρακτήρα αστερίσκου και όχι τον ποσοτικό δείκτη "0 ή περισσότερα"
    • . - Το σύμβολο κουκκίδας αντιπροσωπεύει την κουκκίδα κυριολεκτικά
    • , - ο χαρακτήρας κόμμα αντιπροσωπεύει το κυριολεκτικό κόμμα
    • () - Ένα ζεύγος παρενθέσεων που περικλείει μία μόνο πρόταση ή στοιχείο υποδηλώνει ότι οι παρενθέσεις είναι οι απαιτούμενοι χαρακτήρες παρένθεσης ενός κυριολεκτικού.
    • Άλλα σύμβολα. Εάν δεν παρέχεται άλλη σημείωση, οι υπόλοιποι χαρακτήρες αντιπροσωπεύουν τους αντίστοιχους κυριολεκτικούς χαρακτήρες
2004-2008 Adobe Systems Incorporated. Ολα τα δικαιώματα διατηρούνται.


Το περιεχόμενο του άρθρου
1. Τα πιο απλά ερωτήματα MySQL
2. Απλά ερωτήματα SELECT
3. Απλά ερωτήματα INSERT (νέα καταχώρηση).
4. Απλή ΕΝΗΜΕΡΩΣΗ (αντιγραφή, προσθήκη) ερωτημάτων
5. Απλά ερωτήματα DELETE (διαγραφή εγγραφής).
6. Απλά ερωτήματα DROP (διαγραφή πίνακα).
7. Σύνθετα ερωτήματα MySQL
8. Ερωτήματα MySQL και μεταβλητές PHP

1. Τα πιο απλά ερωτήματα SQL

1. Εμφανίζει μια λίστα με ΟΛΕΣ τις βάσεις δεδομένων.

ΕΜΦΑΝΙΣΗ βάσεων δεδομένων.
2. Εμφανίζει ΟΛΟΥΣ τους πίνακες στη βάση δεδομένων base_name.

ΕΜΦΑΝΙΣΗ πινάκων στο όνομα_βάσης.

2. Απλά ερωτήματα SELECT στη βάση δεδομένων MySQL

ΕΠΙΛΕΓΩ– ένα ερώτημα που επιλέγει υπάρχοντα δεδομένα από τη βάση δεδομένων. Μπορείτε να καθορίσετε συγκεκριμένες παραμέτρους επιλογής για την επιλογή. Για παράδειγμα, η ουσία του αιτήματος στα ρωσικά ακούγεται ως εξής: ΕΠΙΛΟΓΗ τέτοιων στηλών ΑΠΟ τον τάδε πίνακα ΟΠΟΥ η παράμετρος αυτής της στήλης είναι ίση με την τιμή.

1. Επιλέγει ΟΛΑ τα δεδομένα στον πίνακα tbl_name.

SELECT * FROM tbl_name;
2. Εμφανίζει τον αριθμό των εγγραφών στον πίνακα tbl_name.

SELECT count(*) FROM tbl_name;
3. Επιλέγει (SELECT) από (FROM) πίνακα tbl_name όριο (LIMIT) 3 εγγραφές, ξεκινώντας από 2.

SELECT * FROM tbl_name LIMIT 2,3;
4. Επιλέγει (ΕΠΙΛΟΓΗ) ΟΛΕΣ (*) τις εγγραφές από τον πίνακα (FROM) tbl_name και τις ταξινομεί (ORDER BY) κατά το πεδίο id κατά σειρά.

ΕΠΙΛΟΓΗ * ΑΠΟ tbl_name ORDER BY id;
5. Επιλέγει (ΕΠΙΛΟΓΗ) ΟΛΕΣ τις εγγραφές από (FROM) τον πίνακα tbl_name και τις ταξινομεί (ORDER BY) κατά το πεδίο id με ΑΝΤΙΣΤΡΟΦΗ σειρά.

SELECT * FROM tbl_name ORDER BY id DESC;
6. Επιλέγει ( ΕΠΙΛΕΓΩ) ΟΛΕΣ (*) οι εγγραφές από ( ΑΠΟ) τραπέζια χρήστεςκαι τα ταξινομεί ( ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ) στο γήπεδο ταυτότητασε αύξουσα σειρά, όριο ( ΟΡΙΟ) οι πρώτες 5 συμμετοχές.

ΕΠΙΛΟΓΗ * ΑΠΟ χρήστες ΠΑΡΑΓΓΕΛΙΑ ΑΝΑ ΟΡΙΟ 5;
7. Επιλέγει όλες τις εγγραφές από τον πίνακα χρήστες, που είναι το χωράφι fnameαντιστοιχεί στην τιμή Gena.

ΕΠΙΛΟΓΗ * ΑΠΟ χρήστες WHERE fname="Gena";
8. Επιλέγει όλες τις εγγραφές από τον πίνακα χρήστες, όπου η τιμή του πεδίου fnameξεκινάω με Γε.

ΕΠΙΛΕΞΤΕ * ΑΠΟ χρήστες ΟΠΟΥ το fname LIKE "Ge%";
9. Επιλέγει όλες τις εγγραφές από τον πίνακα χρήστες, Οπου fnameτελειώνει με na, και ταξινομεί τις εγγραφές με αύξουσα σειρά τιμής ταυτότητα.

ΕΠΙΛΕΞΤΕ * ΑΠΟ χρήστες ΟΠΟΥ το fname LIKE "%na" ORDER BY id;
10. Επιλέγει όλα τα δεδομένα από στήλες fname, lόνομααπό το τραπέζι χρήστες.

SELECT fname, lname FROM χρήστες.

11. Ας υποθέσουμε ότι έχετε μια χώρα στον πίνακα δεδομένων χρήστη σας. Έτσι, εάν θέλετε να εμφανίσετε ΜΟΝΟ μια λίστα τιμών που εμφανίζονται (έτσι ώστε, για παράδειγμα, η Ρωσία να μην εμφανίζεται 20 φορές, αλλά μόνο μία φορά), τότε χρησιμοποιούμε DISTINCT. Θα βγάλει τη Ρωσία, την Ουκρανία, τη Λευκορωσία από τη μάζα των επαναλαμβανόμενων αξιών. Έτσι, από τον πίνακα χρήστεςΗχεία ΧώραΘα βγουν ΟΛΕΣ οι ΜΟΝΑΔΙΚΕΣ τιμές

ΕΠΙΛΕΞΤΕ ΔΙΑΚΡΙΤΗ Χώρα ΑΠΟ χρήστες.
12. Επιλέγει ΟΛΑ τα δεδομένα σειρών από τον πίνακα χρήστεςΟπου ηλικίαέχει τις τιμές 18,19 και 21.

ΕΠΙΛΟΓΗ * ΑΠΟ χρήστες WHERE IN (18,19,21);
13. Επιλέγει την τιμή MAXIMUM ηλικίαστο τραπέζι χρήστες. Αν δηλαδή έχετε τη μεγαλύτερη αξία στο τραπέζι σας ηλικία(από αγγλική ηλικία) είναι 55, τότε το αποτέλεσμα του ερωτήματος θα είναι 55.

ΕΠΙΛΕΞΤΕ μέγ.(ηλικία) ΑΠΟ χρήστες.
14. Επιλέξτε δεδομένα από τον πίνακα χρήστεςκατά χωράφια όνομαΚαι ηλικίαΟΠΟΥ ηλικίαπαίρνει τη μικρότερη τιμή.

SELECT name, min(ηλικία) FROM χρήστες.
15. Επιλέξτε δεδομένα από τον πίνακα χρήστεςστο γήπεδο όνομαΟΠΟΥ ταυτότηταΔΕΝ ΙΣΟΥΝ ΜΕ 2.

SELECT name FROM users WHERE id!="2";

3. Απλά ερωτήματα INSERT (νέα καταχώρηση).

ΕΙΣΑΓΕΤΕ– ένα ερώτημα που σας επιτρέπει να εισάγετε ΑΡΧΙΚΑ μια εγγραφή στη βάση δεδομένων. Δηλαδή δημιουργεί μια ΝΕΑ εγγραφή (γραμμή) στη βάση δεδομένων.

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

INSERT INTO users (όνομα, ηλικία) VALUES ("Sergey", "25");

4. Απλά ΕΝΗΜΕΡΩΣΗ ερωτημάτων στη βάση δεδομένων MySQL

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

1. Στον πίνακα χρήστες ηλικίαγίνεται 18.

ΕΝΗΜΕΡΩΣΗ χρηστών ΡΥΘΜΙΣΗ ηλικία = "18" WHERE id = "3";
2. Όλα είναι ίδια όπως στο πρώτο αίτημα, απλώς δείχνει τη σύνταξη του αιτήματος, όπου δύο ή περισσότερα πεδία αντικαθίστανται.
Στο τραπέζι χρήστεςΟΠΟΥ το αναγνωριστικό είναι ίσο με 3 τιμή πεδίου ηλικίαγίνεται 18 και ΧώραΡωσία.

ΕΝΗΜΕΡΩΣΗ χρηστών ΡΥΘΜΙΣΗ ηλικία = "18", χώρα = "Ρωσία" WHERE id = "3";

5. Απλά ερωτήματα DELETE (διαγραφή εγγραφής) στη βάση δεδομένων MySQL

ΔΙΑΓΡΑΦΩ– ένα ερώτημα που διαγράφει μια σειρά από έναν πίνακα.

1. Αφαιρεί μια σειρά από τον πίνακα χρήστεςΟΠΟΥ ταυτότηταισούται με 10.

ΔΙΑΓΡΑΦΗ ΑΠΟ χρήστες WHERE id = "10";

6. Απλά ερωτήματα DROP (διαγραφή πίνακα) σε μια βάση δεδομένων MySQL

ΠΤΩΣΗ– ένα ερώτημα που διαγράφει έναν πίνακα.

1. Διαγράφει ολόκληρο τον πίνακα tbl_name.

ΑΠΟΣΤΟΛΗ TABLE tbl_name;

7. Πολύπλοκα ερωτήματα στη βάση δεδομένων MySQL

Ενδιαφέρουσες ερωτήσεις που μπορούν να είναι χρήσιμες ακόμα και για έμπειρους χρήστες

ΕΠΙΛΕΞΤΕ αναγνωριστικό, όνομα, χώρα ΑΠΟ χρήστες, διαχειριστές WHERE TO_DAYS(NOW()) - TO_DAYS(registration_date)<= 14 AND activation != "0" ORDER BY registration_date DESC;
Αυτό το σύνθετο ερώτημα SELECTS στήλες ταυτότητα, όνομα, χώραΣΕ ΤΡΑΠΕΖΙΑ χρήστες, διαχειριστέςΟΠΟΥ Ημερομηνία Εγγραφής(ημερομηνία) όχι παλαιότερη 14 μέρες Ι δραστηριοποίησηΟΧΙ ΙΣΟ 0 , Ταξινόμηση κατά Ημερομηνία Εγγραφήςμε αντίστροφη σειρά (πρώτο νέο).

ΕΝΗΜΕΡΩΣΗ χρηστών SET ηλικία = "18+" WHERE ηλικία = (ΕΠΙΛΟΓΗ ηλικίας ΑΠΟ χρήστες WHERE αρσενικό = "άνδρας");
Παραπάνω είναι ένα παράδειγμα του λεγόμενου αίτημα εντός αιτήματοςσε SQL. Ενημερώστε την ηλικία μεταξύ των χρηστών σε 18+, όπου το φύλο είναι άνδρας. Δεν προτείνω τέτοιες επιλογές αιτήματος. Από προσωπική εμπειρία θα πω ότι είναι καλύτερο να δημιουργήσετε πολλά ξεχωριστά - θα υποβληθούν σε επεξεργασία πιο γρήγορα.

8. Ερωτήματα βάσης δεδομένων MySQL και PHP

Σε ερωτήματα MySQL σε μια σελίδα PHP, μπορείτε να εισαγάγετε μεταβλητές ως τιμές σύγκρισης κ.λπ. Μερικά παραδείγματα

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

SELECT * FROM users WHERE fname="$name";
2. Στον πίνακα χρήστεςΟΠΟΥ το αναγνωριστικό είναι ίσο με 3 τιμή πεδίου ηλικίααλλάζει στην τιμή της μεταβλητής $age.

ΕΝΗΜΕΡΩΣΗ χρηστών SET age = "$age" WHERE id = "3";

Προσοχή!Αν σας ενδιαφέρει οποιοδήποτε άλλο παράδειγμα, τότε γράψτε μια ερώτηση στα σχόλια!