Ερώτημα SQLite: Επιλέξτε, Πού, ΠΕΡΙΟΡΙΣΜΕΝΟ, OFFSET, Count, Group by

Πίνακας περιεχομένων:

Anonim

Για να γράψετε ερωτήματα SQL σε μια βάση δεδομένων SQLite, πρέπει να γνωρίζετε πώς λειτουργούν οι ρήτρες SELECT, FROM, WHERE, GROUP BY, ORDER BY και LIMIT και πώς να τα χρησιμοποιήσετε.

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

Σε αυτό το σεμινάριο, θα μάθετε-

  • Ανάγνωση δεδομένων με Select
  • Ονόματα και ψευδώνυμα
  • ΠΟΥ
  • Περιορισμός και παραγγελία
  • Κατάργηση διπλότυπων
  • Σύνολο
  • Όμιλος BY
  • Ερώτημα και ερώτημα
  • Ορίστε Λειτουργίες -UNION, Intersect
  • NULL χειρισμός
  • Υπό όρους αποτελέσματα
  • Κοινή έκφραση πίνακα
  • Προηγμένα ερωτήματα

Ανάγνωση δεδομένων με Select

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

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

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

Βήμα 1) Σε αυτό το βήμα,

  1. Ανοίξτε τον υπολογιστή μου και μεταβείτε στον ακόλουθο κατάλογο " C: \ sqlite " και
  2. Στη συνέχεια, ανοίξτε το " sqlite3.exe ":

Βήμα 2) Ανοίξτε τη βάση δεδομένων " TutorialsSampleDB.db " με την ακόλουθη εντολή:

Τώρα είστε έτοιμοι να εκτελέσετε οποιοδήποτε είδος ερωτήματος στη βάση δεδομένων.

Στην πρόταση SELECT, μπορείτε να επιλέξετε όχι μόνο ένα όνομα στήλης, αλλά έχετε πολλές άλλες επιλογές για να καθορίσετε τι θα επιλέξετε. Ως εξής:

ΕΠΙΛΟΓΗ *

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

ΕΠΙΛΟΓΗ *ΑΠΟ ΦοιτητέςINNER JOIN Τμήματα ON Students.DepartmentId = Departments.DepartmentId; 

Αυτό θα επιλέξει όλες τις στήλες από τους πίνακες μαθητών και τους πίνακες τμημάτων:

ΕΠΙΛΟΓΗ ονόματος αρχείου. *

Αυτό θα επιλέξει όλες τις στήλες μόνο από τον πίνακα "tablename". Για παράδειγμα:

ΕΠΙΛΕΞΤΕ Φοιτητές. *ΑΠΟ ΦοιτητέςINNER JOIN Τμήματα ON Students.DepartmentId = Departments.DepartmentId;

Αυτό θα επιλέξει μόνο όλες τις στήλες από τον πίνακα μαθητών:

Μια κυριολεκτική τιμή

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

Ακολουθούν ορισμένα παραδείγματα διαφορετικών κυριολεκτικών τιμών που μπορείτε να επιλέξετε:

  • Numeric Literal - αριθμοί σε οποιαδήποτε μορφή όπως 1, 2.55,… κ.λπ.
  • String literals - Κάθε συμβολοσειρά «ΗΠΑ», «αυτό είναι ένα δείγμα κειμένου»,… κ.λπ.
  • NULL - NULL τιμή.
  • Current_TIME - Θα σας δώσει την τρέχουσα ώρα.
  • CURRENT_DATE - θα σας δώσει την τρέχουσα ημερομηνία.

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

ΕΠΙΛΕΞΤΕ *, «ΗΠΑ» ως χώρα από μαθητές.

Αυτό θα σας δώσει όλες τις στήλες των μαθητών, καθώς και μια νέα στήλη "Χώρα" όπως αυτή:

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

Ονόματα και ψευδώνυμα

Το ψευδώνυμο είναι ένα νέο όνομα για τη στήλη που σας επιτρέπει να επιλέξετε τη στήλη με ένα νέο όνομα. Τα ψευδώνυμα στήλης καθορίζονται χρησιμοποιώντας τη λέξη-κλειδί "AS".

Για παράδειγμα, εάν θέλετε να επιλέξετε τη στήλη StudentName που θα επιστραφεί με το "Student Name" αντί για "StudentName", μπορείτε να του δώσετε ένα ψευδώνυμο ως εξής:

ΕΠΙΛΕΞΤΕ StudentName ΩΣ «Όνομα Φοιτητή» ΑΠΟ Φοιτητές. 

Αυτό θα σας δώσει τα ονόματα των μαθητών με το όνομα "Όνομα μαθητή" αντί για "Όνομα μαθητή" ως εξής:

Σημειώστε ότι, το όνομα της στήλης εξακολουθεί να είναι " StudentName ". η στήλη StudentName παραμένει η ίδια, δεν αλλάζει με το ψευδώνυμο.

Το ψευδώνυμο δεν θα αλλάξει το όνομα της στήλης. θα αλλάξει απλώς το εμφανιζόμενο όνομα στον όρο SELECT.

Επίσης, λάβετε υπόψη ότι, η λέξη-κλειδί "AS" είναι προαιρετική, μπορείτε να βάλετε το ψευδώνυμο χωρίς αυτό, κάπως έτσι:

ΕΠΙΛΕΞΤΕ Όνομα Φοιτητή «Όνομα Φοιτητή» ΑΠΟ Φοιτητές.

Και θα σας δώσει την ίδια ακριβώς έξοδο με το προηγούμενο ερώτημα:

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

SELECT s. * ΑΠΟ ΦΟΙΤΗΤΕΣ ΩΣ; 

Αυτό θα σας δώσει όλες τις στήλες στον πίνακα Μαθητές:

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

ΕΠΙΛΕΞΤΕ Φοιτητές. Όνομα σπουδαστή, Τμήματα. Όνομα τμήματοςΑΠΟ ΦοιτητέςINNER JOIN Τμήματα ON Students.DepartmentId = Departments.DepartmentId;

Αυτό το ερώτημα θα επιλέξει κάθε όνομα μαθητή από τον πίνακα "Φοιτητές" με το όνομα τμήματος από τον πίνακα "Τμήματα":

Ωστόσο, το ίδιο ερώτημα μπορεί να γραφτεί ως εξής:

SELECT s.StudentName, d.DepartmentNameΑΠΟ Φοιτητές ΩΣΕΣΩΤΕΡΙΚΑ ΤΜΗΜΑΤΑ AS d ON s.DepartmentId = d.DepartmentId; 
  • Δώσαμε στον πίνακα μαθητών ένα ψευδώνυμο "s" και τον πίνακα τμημάτων ένα ψευδώνυμο "d".
  • Στη συνέχεια, αντί να χρησιμοποιήσουμε το όνομα του πλήρους πίνακα, χρησιμοποιήσαμε τα ψευδώνυμα τους για να τα αναφέρουμε.
  • Το INNER JOIN ενώνει δύο ή περισσότερους πίνακες μαζί χρησιμοποιώντας μια συνθήκη. Στο παράδειγμά μας, ενώσαμε τον πίνακα μαθητών με τον πίνακα Τμημάτων με τη στήλη DepartmentId. Υπάρχει επίσης μια εις βάθος εξήγηση για το INNER JOIN στο σεμινάριο "SQLite Joins".

Αυτό θα σας δώσει την ακριβή έξοδο όπως το προηγούμενο ερώτημα:

ΠΟΥ

Η σύνταξη ερωτημάτων SQL χρησιμοποιώντας τον όρο SELECT μόνο με τον όρο FROM όπως είδαμε στην προηγούμενη ενότητα, θα σας δώσει όλες τις σειρές από τους πίνακες. Ωστόσο, εάν θέλετε να φιλτράρετε τα επιστρεφόμενα δεδομένα, πρέπει να προσθέσετε έναν όρο "ΠΟΥ".

Ο όρος WHERE χρησιμοποιείται για το φιλτράρισμα του συνόλου αποτελεσμάτων που επέστρεψε το ερώτημα SQL. Έτσι λειτουργεί η ρήτρα WHERE:

  • Στην ενότητα WHERE, μπορείτε να καθορίσετε μια "έκφραση"
  • Αυτή η έκφραση θα αξιολογείται για κάθε σειρά που επιστρέφεται από τους πίνακες που καθορίζονται στην ενότητα FROM.
  • Η έκφραση θα αξιολογηθεί ως Boolean έκφραση, με αποτέλεσμα είτε αληθές, ψευδές ή μηδενικό.
  • Τότε μόνο οι σειρές για τις οποίες αξιολογήθηκε η έκφραση με πραγματική τιμή θα επιστραφούν και αυτές με ψευδείς ή μηδενικές τιμές θα αγνοηθούν και δεν θα συμπεριληφθούν στο σύνολο αποτελεσμάτων.
  • Για να φιλτράρετε το σύνολο αποτελεσμάτων χρησιμοποιώντας τον όρο WHERE, πρέπει να χρησιμοποιήσετε εκφράσεις και τελεστές.

Λίστα χειριστών στο SQLite και πώς να τα χρησιμοποιήσετε

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

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

Σημειώστε ότι, μπορείτε να χρησιμοποιήσετε εκφράσεις τόσο στον όρο SELECT όσο και στον όρο WHERE.

Στα ακόλουθα παραδείγματα, θα δοκιμάσουμε τις εκφράσεις και τους τελεστές τόσο στον όρο select όσο και στον όρο WHERE. Για να σας δείξουμε πώς αποδίδουν.

Υπάρχουν διαφορετικοί τύποι εκφράσεων και τελεστών που μπορείτε να καθορίσετε ως εξής:

SQLite ο τελεστής συνένωσης "||"

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

ΕΠΙΛΟΓΗ "Αναγνωριστικό με όνομα: || StudentId || StudentName AS StudentIdWithNameΑΠΟ Φοιτητές.

Αυτό θα συνενωθεί σε ένα νέο ψευδώνυμο " StudentIdWithName ":

  • Η κυριολεκτική τιμή συμβολοσειράς " Id with Name: "
  • με την τιμή της στήλης " StudentId " και
  • με την τιμή από τη στήλη " StudentName "

Χειριστής SQLite CAST:

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

Για παράδειγμα, εάν έχετε μια αριθμητική τιμή αποθηκευμένη ως τιμή συμβολοσειράς όπως αυτή "" 12 .5 " " και θέλετε να τη μετατρέψετε σε αριθμητική τιμή, μπορείτε να χρησιμοποιήσετε το χειριστή CAST για να το κάνετε έτσι " CAST ('12 .5 'AS ΠΡΑΓΜΑΤΙΚΟ) . Εναλλακτικά, εάν έχετε δεκαδική τιμή όπως 12,5 και χρειάζεστε μόνο το ακέραιο μέρος, μπορείτε να το μεταδώσετε σε ακέραιο όπως αυτό "CAST (12.5 AS INTEGER)"

Παράδειγμα

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

SELECT CAST ('12 .5 'AS REAL) ToReal, CAST (12.5 AS INTEGER) AS ToInteger.

Αυτό θα σας δώσει:

Το αποτέλεσμα έχει ως εξής:

  • CAST ('12 .5 'AS REAL) - η τιμή '12 .5' είναι μια τιμή συμβολοσειράς, θα μετατραπεί σε πραγματική τιμή.
  • CAST (12,5 AS INTEGER) - η τιμή 12,5 είναι μια δεκαδική τιμή, θα μετατραπεί σε ακέραια τιμή. Το δεκαδικό μέρος θα περικοπεί και θα γίνει 12.

Τελεστές αριθμητικής SQLite:

Πάρτε δύο ή περισσότερες αριθμητικές κυριολεκτικές τιμές ή αριθμητικές στήλες και επιστρέψτε μία αριθμητική τιμή. Οι αριθμητικοί τελεστές που υποστηρίζονται στο SQLite είναι:

  • Προσθήκη " + " - δώστε το άθροισμα των δύο τελεστών.
  • Αφαίρεση " - " - αφαιρεί τους δύο τελεστές και οδηγεί στη διαφορά.
  • Πολλαπλασιασμός " * " - το προϊόν των δύο τελεστών.
  • Υπενθύμιση (modulo) " % " - δίνει το υπόλοιπο που προκύπτει από τη διαίρεση ενός τελεστή με τον δεύτερο τελεστή.
  • Διαίρεση " / " - επιστρέφει τα αποτελέσματα πηλίκου από τη διαίρεση του αριστερού τελεστή με το δεξί τελεστή.

Παράδειγμα:

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

επιλέξτε ρήτρα:

ΕΠΙΛΕΞΤΕ 25 + 6, 25-6, 25 * 6, 25% 6, 25/6.

Αυτό θα σας δώσει:

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

Τελεστές σύγκρισης SQLite

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

  • " < " - επιστρέφει true αν ο αριστερός τελεστής είναι μικρότερος από τον δεξιό τελεστή.
  • " <= " - επιστρέφει αληθές εάν ο αριστερός τελεστής είναι μικρότερος ή ίσος με τον δεξιό τελεστή.
  • " > " - επιστρέφει αληθές εάν ο αριστερός τελεστής είναι μεγαλύτερος από τον δεξιό τελεστή.
  • " > = " - επιστρέφει αληθές εάν ο αριστερός τελεστής είναι μεγαλύτερος ή ίσος με τον δεξιό τελεστή.
  • " = " και " == " - επιστρέφει true εάν οι δύο τελεστές είναι ίσοι. Σημειώστε ότι και οι δύο χειριστές είναι οι ίδιοι και δεν υπάρχει διαφορά μεταξύ τους.
  • " ! = " και " <> " - επιστρέφει αληθές εάν οι δύο τελεστές δεν είναι ίσοι. Σημειώστε ότι και οι δύο χειριστές είναι οι ίδιοι και δεν υπάρχει διαφορά μεταξύ τους.

Σημειώστε ότι, το SQLite εκφράζει την πραγματική τιμή με το 1 και την εσφαλμένη τιμή με το 0.

Παράδειγμα:

ΕΠΙΛΕΓΩ10 <6 AS "<", 10 <= 6 AS "<=",10> 6 AS '>', 10> = 6 AS '> =',10 = 6 AS '=', 10 == 6 AS '==',10! = 6 AS '! =', 10 <> 6 AS '<>';

Αυτό θα δώσει κάτι σαν αυτό:

Τελεστές SQLite Pattern Matching

" LIKE " - χρησιμοποιείται για την αντιστοίχιση μοτίβων. Χρησιμοποιώντας το " Μου αρέσει ", μπορείτε να αναζητήσετε τιμές που ταιριάζουν με ένα μοτίβο που καθορίζεται χρησιμοποιώντας μπαλαντέρ.

Ο τελεστής στα αριστερά μπορεί να είναι είτε μια κυριολεκτική τιμή συμβολοσειράς είτε μια στήλη συμβολοσειράς. Το μοτίβο μπορεί να καθοριστεί ως εξής:

  • Περιέχει μοτίβο. Για παράδειγμα, StudentName LIKE '% a%' - αυτό θα αναζητήσει τα ονόματα των μαθητών που περιέχουν το γράμμα "a" σε οποιαδήποτε θέση στη στήλη StudentName.
  • Ξεκινά με το μοτίβο. Για παράδειγμα, " StudentName LIKE 'a%' " - αναζητήστε τα ονόματα των μαθητών που ξεκινούν με το γράμμα "a".
  • Τερματίζει με το μοτίβο. Για παράδειγμα, " StudentName LIKE '% a' " - Αναζητήστε τα ονόματα των μαθητών που τελειώνουν με το γράμμα "a".
  • Αντιστοίχιση οποιουδήποτε χαρακτήρα σε μια συμβολοσειρά χρησιμοποιώντας το γράμμα υπογράμμισης "_". Για παράδειγμα, " StudentName LIKE 'J___' " - Αναζήτηση για ονόματα μαθητών με μήκος 4 χαρακτήρων. Πρέπει να ξεκινά με το γράμμα "J" και μπορεί να έχει άλλους τρεις χαρακτήρες μετά το γράμμα "J".

Παραδείγματα αντιστοίχισης προτύπων:

  1. Λάβετε ονόματα μαθητών που ξεκινούν με το γράμμα «j»:
    ΕΠΙΛΟΓΗ Όνομα Φοιτητή ΑΠΟ ΦΟΙΤΗΤΕΣ ΠΟΥ ΑΦΟΡΟΥΝ ΤΟ Όνομα ΦΟΙΤΗΤΗ 'j%';

    Αποτέλεσμα:

  2. Λάβετε τα ονόματα των μαθητών με το γράμμα «y»:
    ΕΠΙΛΕΞΤΕ Όνομα Φοιτητή ΑΠΟ ΦΟΙΤΗΤΕΣ ΠΟΥ ΟΝΟΜΑ ΦΟΙΤΗΤΗΣ ΑΠΌ '% y'; 

    Αποτέλεσμα:

  3. Λάβετε ονόματα μαθητών που περιέχουν το γράμμα «n»:
    ΕΠΙΛΟΓΗ Όνομα Φοιτητή ΑΠΟ ΦΟΙΤΗΤΕΣ ΠΟΥ ΑΦΟΡΟΥΝ το Όνομα ΦΟΙΤΗΤΗ '% n%';

    Αποτέλεσμα:

Το "GLOB" - είναι ισοδύναμο με το χειριστή LIKE, αλλά το GLOB είναι ευαίσθητο σε πεζά, σε αντίθεση με το χειριστή LIKE. Για παράδειγμα, οι ακόλουθες δύο εντολές θα επιστρέψουν διαφορετικά αποτελέσματα:

ΕΠΙΛΕΞΤΕ 'Jack' GLOB 'j%';ΕΠΙΛΕΞΤΕ "Jack" LIKE "j%";

Αυτό θα σας δώσει:

  • Η πρώτη δήλωση επιστρέφει 0 (false) επειδή ο χειριστής GLOB είναι πεζός-πεζός, οπότε το «j» δεν είναι ίσο με το «J». Ωστόσο, η δεύτερη δήλωση θα επιστρέψει 1 (αληθές) επειδή ο τελεστής LIKE δεν είναι διάκριση πεζών-κεφαλαίων, οπότε το «j» είναι ίσο με το «J».

Άλλοι χειριστές:

SQLite ΚΑΙ

Ένας λογικός τελεστής που συνδυάζει μία ή περισσότερες εκφράσεις. Θα επιστρέψει αληθινό, μόνο εάν όλες οι εκφράσεις αποδίδουν μια "αληθινή" τιμή. Ωστόσο, θα επιστρέψει false μόνο εάν όλες οι εκφράσεις αποδίδουν μια τιμή "false".

Παράδειγμα:

Το ακόλουθο ερώτημα θα αναζητήσει μαθητές που έχουν StudentId> 5 και το StudentName ξεκινά με το γράμμα N, οι μαθητές που επέστρεψαν πρέπει να πληρούν τις δύο προϋποθέσεις:

ΕΠΙΛΟΓΗ *ΑΠΟ ΦοιτητέςΠΟΥ (StudentId> 5) ΚΑΙ (Όνομα μαθητή ΟΠΩΣ 'N%');

Ως έξοδος, στο παραπάνω στιγμιότυπο οθόνης, αυτό θα σας δώσει μόνο το "Nancy". Η Νανσί είναι ο μόνος μαθητής που πληροί και τις δύο προϋποθέσεις.

SQLite Ή

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

Παράδειγμα:

Το ακόλουθο ερώτημα θα αναζητήσει μαθητές που έχουν StudentId> 5 ή StudentName ξεκινά με το γράμμα N, οι μαθητές που επέστρεψαν πρέπει να πληρούν τουλάχιστον μία από τις προϋποθέσεις:

ΕΠΙΛΟΓΗ *ΑΠΟ ΦοιτητέςΠΟΥ (StudentId> 5) Ή (Όνομα μαθητή ΟΠΩΣ 'N%');

Αυτό θα σας δώσει:

Ως έξοδος, στο παραπάνω στιγμιότυπο οθόνης, αυτό θα σας δώσει το όνομα ενός μαθητή με το γράμμα "n" στο όνομά του συν το αναγνωριστικό μαθητή με τιμή> 5.

Όπως μπορείτε να δείτε, το αποτέλεσμα είναι διαφορετικό από το ερώτημα με τον τελεστή AND.

SQLite ΜΕΤΑΞΥ

ANTARA χρησιμοποιείται για την επιλογή αυτών των τιμών που βρίσκονται εντός ενός εύρους δύο τιμών. Για παράδειγμα, το " X ANTY Y AND Z " θα επιστρέψει true (1) εάν η τιμή X είναι μεταξύ των δύο τιμών Y και Z. Διαφορετικά, θα επιστρέψει false (0). " X ANTY Y AND Z " ισοδυναμεί με " X> = Y ΚΑΙ X <= Z ", το X πρέπει να είναι μεγαλύτερο από ή ίσο με το Y και το X είναι μικρότερο ή ίσο με το Z.

Παράδειγμα:

Στο ακόλουθο παράδειγμα ερωτήματος, θα γράψουμε ένα ερώτημα για να κάνουμε τους μαθητές με τιμή Id μεταξύ 5 και 8:

ΕΠΙΛΟΓΗ *ΑΠΟ ΦοιτητέςΠΟΥ ΦΟΙΤΗΤΗΣ ΜΕΤΑΞΥ ΜΕΤΑΞΥ 5 ΚΑΙ 8;

Αυτό θα δώσει μόνο στους μαθητές με αναγνωριστικά 5, 6, 7 και 8:

SQLite IN

Παίρνει έναν τελεστή και μια λίστα τελεστών. Θα επιστρέψει αληθές εάν η πρώτη τιμή τελεστή ισούται με μία από τις τιμές των τελεστών από τη λίστα. Ο τελεστής IN επιστρέφει true (1) εάν η λίστα των τελεστών περιέχει την πρώτη τιμή τελεστή εντός των τιμών της. Διαφορετικά, θα επιστρέψει ψευδές (0).

Όπως αυτό: " col IN (x, y, z) ". Αυτό ισοδυναμεί με " (col = x) ή (col = y) ή (col = z) ".

Παράδειγμα:

Το ακόλουθο ερώτημα θα επιλέξει μαθητές με αναγνωριστικά 2, 4, 6, 8 μόνο:

ΕΠΙΛΟΓΗ *ΑΠΟ ΦοιτητέςΠΟΤΕ StudentId IN (2, 4, 6, 8);

Σαν αυτό:

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

ΕΠΙΛΟΓΗ *ΑΠΟ ΦοιτητέςΠΟΥ (StudentId = 2) Ή (StudentId = 4) Ή (StudentId = 6) Ή (StudentId = 8);

Και τα δύο ερωτήματα δίνουν την ακριβή έξοδο. Ωστόσο, η διαφορά μεταξύ των δύο ερωτημάτων είναι, το πρώτο ερώτημα που χρησιμοποιήσαμε τον τελεστή "IN". Στο δεύτερο ερώτημα, χρησιμοποιήσαμε πολλούς τελεστές "OR".

Ο τελεστής IN ισοδυναμεί με τη χρήση πολλαπλών τελεστών OR. Το " WHERE StudentId IN (2, 4, 6, 8) " ισοδυναμεί με " WHERE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8); "

Σαν αυτό:

Ο SQLite ΔΕΝ ΕΙΝΑΙ

Ο τελεστής "NOT IN" είναι το αντίθετο του χειριστή IN. Αλλά με την ίδια σύνταξη. παίρνει έναν τελεστή και μια λίστα τελεστών. Θα επιστρέψει αληθές εάν η πρώτη τιμή τελεστής δεν είναι ίση με μία από τις τιμές των τελεστών από τη λίστα. δηλαδή, θα επιστρέψει αληθές (0) εάν η λίστα των τελεστών δεν περιέχει τον πρώτο τελεστή. Όπως αυτό: " col NOT IN (x, y, z) ". Αυτό ισοδυναμεί με " (col <> x) AND (col <> y) AND (col <> z) ".

Παράδειγμα:

Το ακόλουθο ερώτημα θα επιλέξει μαθητές με αναγνωριστικά που δεν είναι ίσο με ένα από αυτά τα Id 2, 4, 6, 8:

ΕΠΙΛΟΓΗ *ΑΠΟ ΦοιτητέςΠΟΥ ΔΕΝ ΕΙΝΑΙ Ο φοιτητής (2, 4, 6, 8);

Σαν αυτό

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

ΕΠΙΛΟΓΗ *ΑΠΟ ΦοιτητέςΠΟΥ (StudentId <> 2) AND (StudentId <> 4) AND (StudentId <> 6) AND (StudentId <> 8);

Σαν αυτό:

Στο παραπάνω στιγμιότυπο οθόνης,

Χρησιμοποιήσαμε πολλούς μη ίσους τελεστές "<>" για να λάβουμε μια λίστα μαθητών, οι οποίοι δεν είναι ίσοι με κανένα από τα ακόλουθα Id, 2, 4, 6, ούτε 8. Αυτό το ερώτημα θα επιστρέψει όλους τους άλλους μαθητές εκτός από αυτήν τη λίστα Id.

ΥΠΗΡΕΣΙΕΣ SQLite

Οι τελεστές EXISTS δεν παίρνουν τελεστές. παίρνει μόνο μια ρήτρα SELECT μετά από αυτήν. Ο τελεστής EXISTS θα επιστρέψει true (1) αν υπάρχουν σειρές που επιστρέφονται από τον όρο SELECT και θα επιστρέψει false (0) εάν δεν επιστραφούν καθόλου γραμμές από τον όρο SELECT

Παράδειγμα:

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

ΕΠΙΛΕΞΤΕ Όνομα τμήματοςΑΠΟ ΤΜΗΜΑΤΑ Ω. ΔΠΟΥ ΥΠΑΡΧΕΙ (ΕΠΙΛΕΞΤΕ ΤΜΗΜΑ ΑΠΟ ΦΟΙΤΗΤΕΣ ΠΟΥ Δ. D. DepartmentId = s.DepartmentId)

Αυτό θα σας δώσει:

Θα επιστραφούν μόνο τα τρία τμήματα " IT, Physics and Arts ". Και το όνομα τμήματος " Math " δεν θα επιστραφεί επειδή δεν υπάρχει μαθητής σε αυτό το τμήμα, επομένως το αναγνωριστικό τμήματος δεν υπάρχει στον πίνακα μαθητών. Γι 'αυτό ο χειριστής EXISTS αγνόησε το τμήμα " Μαθηματικά ".

SQLite ΟΧΙ

Αντιστρέφει το αποτέλεσμα του προηγούμενου τελεστή που ακολουθεί. Για παράδειγμα:

  • ΟΧΙ ΜΕΤΑΞΥ - Θα επιστρέψει αληθές εάν ANTWEEN επιστρέψει ψευδές και αντίστροφα
  • ΔΕΝ Αρέσει: Θα επιστρέψει αληθινό αν το LIKE επιστρέψει ψευδές και αντίστροφα.
  • NOT GLOB - Θα επιστρέψει αληθές αν το GLOB επιστρέψει ψευδές και αντίστροφα.
  • ΟΧΙ ΥΠΑΡΧΕΙ - Θα επιστρέψει αληθές εάν το EXISTS επιστρέψει ψευδές και το αντίστροφο

Παράδειγμα:

Στο παρακάτω παράδειγμα, θα χρησιμοποιήσουμε τον τελεστή ΔΕΝ με τον χειριστή EXISTS για να λάβουμε τα ονόματα των τμημάτων που δεν υπάρχουν στον πίνακα Φοιτητές, που είναι το αντίστροφο αποτέλεσμα του χειριστή EXISTS. Έτσι, η αναζήτηση θα γίνει μέσω του DepartmentId που δεν υπάρχει στον πίνακα του τμήματος.

ΕΠΙΛΕΞΤΕ Όνομα τμήματοςΑΠΟ ΤΜΗΜΑΤΑ Ω. ΔΠΟΥ ΔΕΝ ΥΠΑΡΧΕΙ (ΕΠΙΛΕΞΤΕ Τμήμα IDΑΠΟ Φοιτητές ΩΣΠΟΥ d. DepartmentId = s.DepartmentId);

Έξοδος :

Μόνο το τμήμα " Math " θα επιστραφεί. Επειδή το τμήμα " Μαθηματικά " είναι το μόνο τμήμα, που δεν υπάρχει στον πίνακα μαθητών.

Περιορισμός και παραγγελία

Παραγγελία SQLite

Το SQLite Order είναι να ταξινομήσετε το αποτέλεσμα με μία ή περισσότερες εκφράσεις. Για να παραγγείλετε το σύνολο αποτελεσμάτων, πρέπει να χρησιμοποιήσετε τη ρήτρα ORDER BY ως εξής:

  • Αρχικά, πρέπει να καθορίσετε τη ρήτρα ORDER BY.
  • Η ρήτρα ORDER BY πρέπει να καθοριστεί στο τέλος του ερωτήματος. Μόνο η ρήτρα LIMIT μπορεί να καθοριστεί μετά από αυτήν.
  • Καθορίστε την έκφραση για να ταξινομήσετε τα δεδομένα, αυτή η έκφραση μπορεί να είναι όνομα στήλης ή παράσταση.
  • Μετά την έκφραση, μπορείτε να καθορίσετε μια προαιρετική κατεύθυνση ταξινόμησης. Είτε DESC, για να ταξινομήσετε τα δεδομένα φθίνουσα είτε ASC για να ταξινομήσετε τα δεδομένα αύξουσα. Εάν δεν καθορίσατε κανένα από αυτά, τα δεδομένα θα ταξινομηθούν αύξουσα.
  • Μπορείτε να καθορίσετε περισσότερες εκφράσεις χρησιμοποιώντας το "," μεταξύ τους.

Παράδειγμα

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

SELECT s.StudentName, d.DepartmentNameΑΠΟ Φοιτητές ΩΣΕΣΩΤΕΡΙΚΑ ΤΜΗΜΑΤΑ ΩΣ ΣΕΝ s.DepartmentId = d.DepartmentIdΠΑΡΑΓΓΕΛΙΑ ΑΠΟ d.DepartmentName ASC, s.SudentName DESC;

Αυτό θα σας δώσει:

  • Το SQLite θα παραγγείλει πρώτα όλους τους μαθητές με το όνομα του τμήματος σε αύξουσα σειρά
  • Στη συνέχεια, για κάθε όνομα τμήματος, όλοι οι μαθητές με αυτό το όνομα τμήματος θα εμφανίζονται με φθίνουσα σειρά με τα ονόματά τους

Όριο SQLite:

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

Στο όριο LIMIT, μπορείτε να επιλέξετε έναν συγκεκριμένο αριθμό σειρών ξεκινώντας από μια συγκεκριμένη θέση χρησιμοποιώντας τον όρο OFFSET. Για παράδειγμα, το " LIMIT 4 OFFSET 4 " θα αγνοήσει τις πρώτες 4 σειρές και θα επιστρέψει 4 σειρές ξεκινώντας από την πέμπτη σειρά, οπότε θα λάβετε τις σειρές 5,6,7 και 8.

Σημειώστε ότι η ρήτρα OFFSET είναι προαιρετική, μπορείτε να την γράψετε σαν " LIMIT 4, 4 " και θα σας δώσει τα ακριβή αποτελέσματα.

Παράδειγμα :

Στο παρακάτω παράδειγμα, θα επιστρέψουμε μόνο 3 μαθητές ξεκινώντας από το αναγνωριστικό μαθητή 5 χρησιμοποιώντας το ερώτημα:

ΕΠΙΛΕΞΤΕ * ΑΠΟ ΦΟΙΤΗΤΕΣ ΟΡΙΟ 4,3.

Αυτό θα σας δώσει μόνο τρεις μαθητές ξεκινώντας από τη σειρά 5. Έτσι θα σας δώσει τις σειρές με το StudentId 5, 6 και 7:

Κατάργηση διπλότυπων

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

Παράδειγμα:

Το ακόλουθο ερώτημα θα επιστρέψει διπλές "τιμές ονόματος τμήματος": Εδώ έχουμε διπλές τιμές με ονόματα IT, Physics and Arts.

ΕΠΙΛΟΓΗ d. Όνομα τμήματοςΑΠΟ Φοιτητές ΩΣΕΣΩΤΕΡΙΚΑ ΤΜΗΜΑΤΑ AS d ON s.DepartmentId = d.DepartmentId;

Αυτό θα σας δώσει διπλές τιμές για το όνομα του τμήματος:

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

ΕΠΙΛΕΞΤΕ ΑΠΟΣΤΟΛΗ d. Όνομα διαμερίσματοςΑΠΟ Φοιτητές ΩΣΕΣΩΤΕΡΙΚΑ ΤΜΗΜΑΤΑ AS d ON s.DepartmentId = d.DepartmentId;

Αυτό θα σας δώσει μόνο τρεις μοναδικές τιμές για τη στήλη ονόματος τμήματος:

Σύνολο

Τα SQLite Aggregates είναι ενσωματωμένες συναρτήσεις που ορίζονται στο SQLite που θα ομαδοποιήσουν πολλές τιμές πολλαπλών σειρών σε μία τιμή.

Ακολουθούν τα συγκεντρωτικά στοιχεία που υποστηρίζονται από το SQLite:

SQLite AVG ()

Επιστράφηκε ο μέσος όρος για όλες τις τιμές x.

Παράδειγμα:

Στο ακόλουθο παράδειγμα θα πάρουμε τους μαθητές μέσης βαθμολογίας που θα λάβουν από όλες τις εξετάσεις:

ΕΠΙΛΕΞΤΕ AVG (Mark) ΑΠΟ Marks.

Αυτό θα σας δώσει την τιμή "18.375":

Αυτά τα αποτελέσματα προέρχονται από το άθροισμα όλων των τιμών σήματος διαιρούμενο με τον αριθμό τους.

COUNT () - COUNT (X) ή COUNT (*)

Επιστρέφει το συνολικό πλήθος των φορών που εμφανίστηκε η τιμή x. Και εδώ είναι μερικές επιλογές που μπορείτε να χρησιμοποιήσετε με COUNT:

  • COUNT (x): Μετρά μόνο x τιμές, όπου x είναι ένα όνομα στήλης. Θα αγνοήσει τις τιμές NULL.
  • COUNT (*): Μετρήστε όλες τις σειρές από όλες τις στήλες.
  • COUNT (DISTINCT x): Μπορείτε να καθορίσετε μια λέξη-κλειδί DISTINCT πριν από το x που θα λάβει τον αριθμό των διακριτών τιμών του x.

Παράδειγμα

Στο ακόλουθο παράδειγμα, θα λάβουμε τον συνολικό αριθμό των τμημάτων με COUNT (DepartmentId), COUNT (*) και COUNT (DISTINCT DepartmentId) και πώς είναι διαφορετικά:

SELECT COUNT (DepartmentId), COUNT (DISTINCT DepartmentId), COUNT (*) ΑΠΟ Φοιτητές.

Αυτό θα σας δώσει:

Ως εξής:

  • Το COUNT (DepartmentId) θα σας δώσει το πλήθος όλων των αναγνωριστικών τμήματος και θα αγνοήσει τις μηδενικές τιμές.
  • Το COUNT (DISTINCT DepartmentId) σας δίνει διαφορετικές τιμές του DepartmentId, οι οποίες είναι μόνο 3. Ποιες είναι οι τρεις διαφορετικές τιμές του ονόματος τμήματος. Σημειώστε ότι υπάρχουν 8 τιμές του ονόματος τμήματος στο όνομα του μαθητή. Αλλά μόνο οι τρεις διαφορετικές τιμές που είναι τα Μαθηματικά, η Πληροφορική και η Φυσική.
  • Το COUNT (*) μετρά τον αριθμό των σειρών στον πίνακα μαθητών που είναι 10 σειρές για 10 μαθητές.

GROUP_CONCAT () - GROUP_CONCAT (X) ή GROUP_CONCAT (X, Y)

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

  • GROUP_CONCAT (X): Θα συνενώσει όλη την τιμή του x σε μία συμβολοσειρά, με το κόμμα "," να χρησιμοποιείται ως διαχωριστικό μεταξύ των τιμών. Οι τιμές NULL θα αγνοηθούν.
  • GROUP_CONCAT (X, Y): Αυτό θα συνενώσει τις τιμές του x σε μία συμβολοσειρά, με την τιμή y να χρησιμοποιείται ως διαχωριστικό μεταξύ κάθε τιμής αντί του προεπιλεγμένου διαχωριστή ','. Οι τιμές NULL θα αγνοηθούν επίσης.
  • GROUP_CONCAT (DISTINCT X): Αυτό θα συνδυάσει όλες τις διακριτές τιμές του x σε μία συμβολοσειρά, με το κόμμα "," να χρησιμοποιείται ως διαχωριστικό μεταξύ των τιμών. Οι τιμές NULL θα αγνοηθούν.

GROUP_CONCAT (DepartmentName) Παράδειγμα

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

ΕΠΙΛΕΞΤΕ GROUP_CONCAT (δ. Όνομα διαμερίσματος)ΑΠΟ Φοιτητές ΩΣΕΣΩΤΕΡΙΚΑ ΤΜΗΜΑΤΑ AS d ON s.DepartmentId = d.DepartmentId;

Αυτό θα σας δώσει:

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

Παράδειγμα GROUP_CONCAT (DISTINCT DepartmentName)

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

ΕΠΙΛΟΓΗ ΟΜΑΔΑΣ_CONCAT (DISTINCT d. Όνομα τμήματος)ΑΠΟ Φοιτητές ΩΣΕΣΩΤΕΡΙΚΑ ΤΜΗΜΑΤΑ AS d ON s.DepartmentId = d.DepartmentId;

Αυτό θα σας δώσει:

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

GROUP_CONCAT (DepartmentName, '&') Παράδειγμα

Το ακόλουθο ερώτημα θα συνενώσει όλες τις τιμές της στήλης ονόματος τμήματος από τον πίνακα μαθητών και τμημάτων σε μια συμβολοσειρά, αλλά με τον χαρακτήρα «&» αντί για κόμμα ως διαχωριστικό:

ΕΠΙΛΕΞΤΕ GROUP_CONCAT (d. Όνομα διαμερίσματος, "&")ΑΠΟ Φοιτητές ΩΣΕΣΩΤΕΡΙΚΑ ΤΜΗΜΑΤΑ AS d ON s.DepartmentId = d.DepartmentId;

Αυτό θα σας δώσει:

Παρατηρήστε πώς χρησιμοποιείται ο χαρακτήρας "&" αντί για τον προεπιλεγμένο χαρακτήρα "," για διαχωρισμό μεταξύ των τιμών.

SQLite MAX () & MIN ()

Το MAX (X) σας επιστρέφει την υψηλότερη τιμή από τις τιμές X. Το MAX θα επιστρέψει μια τιμή NULL εάν όλες οι τιμές του x είναι μηδενικές. Ενώ το MIN (X) σας επιστρέφει τη μικρότερη τιμή από τις τιμές X. Το MIN θα επιστρέψει μια τιμή NULL εάν όλες οι τιμές του X είναι μηδενικές.

Παράδειγμα

Στο ακόλουθο ερώτημα, θα χρησιμοποιήσουμε τις συναρτήσεις MIN και MAX για να λάβουμε το υψηλότερο και το χαμηλότερο σημάδι από τον πίνακα " Marks "

ΕΠΙΛΕΞΤΕ MAX (Mark), MIN (Mark) FROM Marks.

Αυτό θα σας δώσει:

SQLite SUM (x), Σύνολο (x)

Και οι δύο θα επιστρέψουν το άθροισμα όλων των x τιμών. Αλλά είναι διαφορετικά στα ακόλουθα:

  • Το SUM θα επιστρέψει null εάν όλες οι τιμές είναι null, αλλά το Total θα επιστρέψει 0.
  • Το TOTAL επιστρέφει πάντα τιμές κυμαινόμενου σημείου. Το SUM επιστρέφει μια ακέραια τιμή εάν όλες οι τιμές x είναι ακέραιος. Ωστόσο, εάν οι τιμές δεν είναι ακέραιος, θα επιστρέψει μια τιμή κυμαινόμενου σημείου.

Παράδειγμα

Στο ακόλουθο ερώτημα θα χρησιμοποιήσουμε το SUM και το σύνολο για να λάβουμε το άθροισμα όλων των σημείων στους πίνακες " Marks ":

SELECT SUM (Mark), ΣΥΝΟΛΟ (Mark) ΑΠΟ Marks;

Αυτό θα σας δώσει:

Όπως μπορείτε να δείτε, το TOTAL επιστρέφει πάντα ένα κυμαινόμενο σημείο. Αλλά το SUM επιστρέφει μια ακέραια τιμή επειδή οι τιμές στη στήλη "Mark" ενδέχεται να είναι ακέραιοι.

Διαφορά μεταξύ SUM και TOTAL παραδείγματος:

Στο ακόλουθο ερώτημα θα δείξουμε τη διαφορά μεταξύ SUM και TOTAL όταν λαμβάνουν τις τιμές SUM NULL:

SELECT SUM (Mark), ΣΥΝΟΛΟ (Mark) από Marks WHERE TestId = 4;

Αυτό θα σας δώσει:

Σημειώστε ότι δεν υπάρχουν σημάδια για TestId = 4, επομένως υπάρχουν μηδενικές τιμές για αυτήν τη δοκιμή. Το SUM επιστρέφει μια τιμή null ως κενό, ενώ το TOTAL επιστρέφει 0.

Όμιλος BY

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

Για οποιαδήποτε άλλη στήλη που δεν περιλαμβάνεται στην ομάδα από στήλες, μπορείτε να χρησιμοποιήσετε μια συνάθροιση συνάρτησης για αυτήν.

Παράδειγμα:

Το ακόλουθο ερώτημα θα σας δώσει τον συνολικό αριθμό μαθητών που είναι παρόντες σε κάθε τμήμα.

ΕΠΙΛΕΞΤΕ d.DepartmentName, COUNT (s.StudentId) AS StudentsCountΑΠΟ Φοιτητές ΩΣΕΣΩΤΕΡΙΚΑ ΤΜΗΜΑΤΑ ΩΣ ΣΕΝ s.DepartmentId = d.DepartmentIdΟΜΑΔΑ ΑΠΟ d. Ονομα τμήματος;

Αυτό θα σας δώσει:

Η ρήτρα GROUPBY DepartmentName θα ομαδοποιήσει όλους τους μαθητές σε ομάδες μία για κάθε όνομα τμήματος. Για κάθε ομάδα "τμήματος", θα μετράει τους μαθητές σε αυτό.

ΕΧΕΙ ρήτρα

Αν θέλετε να φιλτράρετε τις ομάδες που επιστρέφονται από τον όρο GROUP BY, τότε μπορείτε να καθορίσετε έναν όρο "HAVING" με έκφραση μετά το GROUP BY. Η έκφραση θα χρησιμοποιηθεί για το φιλτράρισμα αυτών των ομάδων.

Παράδειγμα

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

ΕΠΙΛΕΞΤΕ d.DepartmentName, COUNT (s.StudentId) AS StudentsCountΑΠΟ Φοιτητές ΩΣΕΣΩΤΕΡΙΚΑ ΤΜΗΜΑΤΑ ΩΣ ΣΕΝ s.DepartmentId = d.DepartmentIdΟΜΑΔΑ ΑΠΟ d. Ονομα τμήματοςΔΙΑΘΕΣΙΜΟ ΚΟΣΜΟ (s.StudentId) = 2;

Αυτό θα σας δώσει:

Η ρήτρα HAVING COUNT (S.StudentId) = 2 θα φιλτράρει τις ομάδες που επέστρεψαν και θα επιστρέψουν μόνο εκείνες τις ομάδες που περιέχουν ακριβώς δύο μαθητές σε αυτήν. Στην περίπτωσή μας, το τμήμα Τεχνών έχει 2 μαθητές, οπότε εμφανίζεται στην έξοδο.

Ερώτημα & ερώτημα SQLite

Μέσα σε οποιοδήποτε ερώτημα, μπορείτε να χρησιμοποιήσετε ένα άλλο ερώτημα είτε σε SELECT, INSERT, DELETE, UPDATE ή μέσα σε άλλο ερώτημα.

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

Χρησιμοποιώντας το ερώτημα στο παράδειγμα ρήτρα FROM

Στο ακόλουθο ερώτημα θα συμπεριλάβουμε ένα ερώτημα μέσα στον όρο FROM:

ΕΠΙΛΕΓΩs.StudentName, t.MarkΑΠΟ Φοιτητές ΩΣΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ(ΕΠΙΛΕΞΤΕ StudentId, MarkΑΠΟ ΔΟΚΙΜΕΣ ΩΣINNER JOIN επισημαίνει AS m ON t.TestId = m.TestId) ON s.StudentId = t.StudentId;

Το ερώτημα:

 ΕΠΙΛΕΞΤΕ StudentId, MarkΑΠΟ ΔΟΚΙΜΕΣ ΩΣINNER JOIN επισημαίνει AS m ON t.TestId = m.TestId

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

Αυτό το ερώτημα θα σας δώσει:

Έτσι στην περίπτωσή μας,

  • Το s.StudentName επιλέγεται από το κύριο ερώτημα που δίνει το όνομα των μαθητών και
  • Το t.Mark επιλέγεται από το υποερώτημα. που δίνει βαθμολογίες που αποκτώνται από καθέναν από αυτούς τους μαθητές

Χρησιμοποιώντας το ερώτημα στο παράδειγμα ρήτρα WHERE

Στο ακόλουθο ερώτημα θα συμπεριλάβουμε ένα ερώτημα στον όρο WHERE:

ΕΠΙΛΕΞΤΕ Όνομα τμήματοςΑΠΟ ΤΜΗΜΑΤΑ Ω. ΔΠΟΥ ΔΕΝ ΥΠΑΡΧΕΙ (ΕΠΙΛΕΞΤΕ Τμήμα IDΑΠΟ Φοιτητές ΩΣΠΟΥ d. DepartmentId = s.DepartmentId);

Το ερώτημα:

ΕΠΙΛΕΞΤΕ ΤμήμαΑΠΟ Φοιτητές ΩΣΠΟΥ d. DepartmentId = s.DepartmentId

Το παραπάνω ερώτημα ονομάζεται εδώ ένα ερώτημα επειδή είναι ένθετο στον όρο WHERE. Το ερώτημα θα επιστρέψει τις τιμές DepartmentId που θα χρησιμοποιηθούν από τον χειριστή ΔΕΝ ΥΠΑΡΧΕΙ.

Αυτό το ερώτημα θα σας δώσει:

Στο παραπάνω ερώτημα, επιλέξαμε το τμήμα που δεν έχει εγγραφεί φοιτητής. Ποιο είναι το τμήμα "Μαθηματικά" εδώ.

Ορισμός λειτουργιών - UNION, Intersect

Το SQLite υποστηρίζει τις ακόλουθες λειτουργίες SET:

ΕΝΩΣΗ & ΕΝΩΣΗ ΟΛΑ

Συνδυάζει ένα ή περισσότερα σύνολα αποτελεσμάτων (μια ομάδα σειρών) που επιστρέφονται από πολλές δηλώσεις SELECT σε ένα σύνολο αποτελεσμάτων.

Το UNION θα επιστρέψει ξεχωριστές τιμές. Ωστόσο, η UNION ALL δεν θα περιλαμβάνει και θα περιλαμβάνει διπλότυπα.

Σημειώστε ότι το όνομα της στήλης θα είναι το όνομα της στήλης που καθορίζεται στην πρώτη πρόταση SELECT.

Παράδειγμα UNION

Στο παρακάτω παράδειγμα, θα λάβουμε τη λίστα του DepartmentId από τον πίνακα μαθητών και τη λίστα του DepartmentId από τον πίνακα τμημάτων στην ίδια στήλη:

ΕΠΙΛΕΞΤΕ ΤΜΗΜΑ ΚΑΙ ΤΟ ΤΜΗΜΑ ΕΝΔΙΑΜΕΣΗ ΑΠΟ ΦοιτητέςΕΝΩΣΗΕΠΙΛΕΞΤΕ ΤμήμαΑπό Τμήματα

Αυτό θα σας δώσει:

Το ερώτημα επιστρέφει μόνο 5 σειρές που είναι οι ξεχωριστές τιμές αναγνωριστικού τμήματος. Παρατηρήστε την πρώτη τιμή που είναι η μηδενική τιμή.

Παράδειγμα SQLite UNION ALL

Στο παρακάτω παράδειγμα, θα λάβουμε τη λίστα του DepartmentId από τον πίνακα μαθητών και τη λίστα του DepartmentId από τον πίνακα τμημάτων στην ίδια στήλη:

ΕΠΙΛΕΞΤΕ ΤΜΗΜΑ ΚΑΙ ΤΟ ΤΜΗΜΑ ΕΝΔΙΑΜΕΣΗ ΑΠΟ ΦοιτητέςΕΝΩΣΗ ΟΛΑΕΠΙΛΕΞΤΕ ΤμήμαΑπό Τμήματα

Αυτό θα σας δώσει:

Το ερώτημα θα επιστρέψει 14 σειρές, 10 σειρές από τον πίνακα μαθητών και 4 από τον πίνακα τμημάτων. Σημειώστε ότι, υπάρχουν αντίγραφα στις τιμές που επιστρέφονται. Επίσης, σημειώστε ότι το όνομα της στήλης ήταν αυτό που καθορίστηκε στην πρώτη πρόταση SELECT.

Τώρα, ας δούμε πώς όλα τα UNION θα δίνουν διαφορετικά αποτελέσματα αν αντικαταστήσουμε το UNION ALL με το UNION:

SQLite INTERSECT

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

Παράδειγμα

Στο ακόλουθο ερώτημα, θα επιλέξουμε τις τιμές DepartmentId που υπάρχουν και στους πίνακες μαθητές και τμήματα στη στήλη DepartmentId:

ΕΠΙΛΕΞΤΕ Τμήμα από μαθητέςΔιατέμνωΕΠΙΛΕΞΤΕ ΤμήμαΑπό Τμήματα

Αυτό θα σας δώσει:

Το ερώτημα επιστρέφει μόνο τρεις τιμές 1, 2 και 3. Ποιες είναι οι τιμές που υπάρχουν και στους δύο πίνακες.

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

Γι 'αυτό και οι τιμές NULL και 4 αγνοήθηκαν και δεν συμπεριλήφθηκαν στις επιστρεφόμενες τιμές.

ΕΚΤΟΣ

Ας υποθέσουμε ότι εάν έχετε δύο λίστες γραμμών, list1 και list2, και θέλετε τις σειρές μόνο από τη λίστα1 που δεν υπάρχει στη λίστα2, μπορείτε να χρησιμοποιήσετε τον όρο "EXCEPT". Ο όρος EXCEPT συγκρίνει τις δύο λίστες και επιστρέφει εκείνες τις σειρές που υπάρχουν στη λίστα1 και δεν υπάρχουν στη λίστα2.

Παράδειγμα

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

ΕΠΙΛΕΞΤΕ Τμήμα από ΤμήματαΕΚΤΟΣΕΠΙΛΕΞΤΕ Τμήμα από μαθητές.

Αυτό θα σας δώσει:

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

NULL χειρισμός

Η τιμή " NULL " είναι μια ειδική τιμή στο SQLite. Χρησιμοποιείται για να αντιπροσωπεύει μια τιμή που είναι άγνωστη ή λείπει τιμή. Σημειώστε ότι η τιμή null είναι τελείως διαφορετική από την τιμή " 0 " ή κενό "". Επειδή το 0 και η κενή τιμή είναι γνωστή τιμή, η μηδενική τιμή είναι άγνωστη.

Οι τιμές NULL απαιτούν ειδικό χειρισμό στο SQLite, θα δούμε τώρα πώς να χειριστούμε τις τιμές NULL.

Αναζήτηση για τιμές NULL

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

ΕΠΙΛΕΞΤΕ * ΑΠΟ ΦΟΙΤΗΤΕΣ ΤΟΥ ΤμήματοςId = NULL;

Αυτό το ερώτημα δεν θα δώσει κανένα αποτέλεσμα:

Επειδή η τιμή NULL δεν ισούται με οποιαδήποτε άλλη τιμή συμπεριλαμβάνεται η ίδια η τιμή null, γι 'αυτό δεν επέστρεψε κανένα αποτέλεσμα.

  • Ωστόσο, για να λειτουργήσει το ερώτημα, πρέπει να χρησιμοποιήσετε τον τελεστή "IS NULL" για να αναζητήσετε μηδενικές τιμές ως εξής:
ΕΠΙΛΕΞΤΕ * ΑΠΟ ΦΟΙΤΗΤΕΣ ΠΟΥ ΤΟ ΤΜΗΜΑ ΕΙΝΑΙ NULL;

Αυτό θα σας δώσει:

Το ερώτημα θα επιστρέψει εκείνους τους μαθητές που έχουν μηδενική τιμή DepartmentId.

  • Εάν θέλετε να λάβετε αυτές τις τιμές που δεν είναι μηδενικές, τότε πρέπει να χρησιμοποιήσετε τον τελεστή " IS NOT NULL " ως εξής:
ΕΠΙΛΕΞΤΕ * ΑΠΟ ΦΟΙΤΗΤΕΣ ΠΟΥ ΤΟ ΤΜΗΜΑ ΔΕΝ ΕΙΝΑΙ NULL.

Αυτό θα σας δώσει:

Το ερώτημα θα επιστρέψει εκείνους τους μαθητές που δεν έχουν τιμή NULL DepartmentId.

Υπό όρους αποτελέσματα

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

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

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

- "Άριστο" εάν ο βαθμός είναι υψηλότερος από 85.

- "Πολύ καλό" εάν ο βαθμός κυμαίνεται μεταξύ 70 και 85.

- "Καλό" εάν ο βαθμός είναι μεταξύ 60 και 70.

Στη συνέχεια, μπορείτε να χρησιμοποιήσετε την έκφραση CASE για να το κάνετε αυτό.

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

Ο τελεστής CASE μπορεί να οριστεί με διαφορετικές σύνταξη ως εξής:

  1. Μπορείτε να χρησιμοποιήσετε διαφορετικές συνθήκες:
ΥΠΟΘΕΣΗΠΟΤΕ κατάσταση 1 ΤΟ αποτέλεσμα 1ΠΟΤΕ κατάσταση 2 ΤΟ αποτέλεσμα 2ΠΟΤΕ όρος 3 ΑΠΟΤΕΛΕΣΜΑ 3… ΕΛΛΕΣ αποτέλεσμαΤΕΛΟΣ
  1. Εναλλακτικά, μπορείτε να χρησιμοποιήσετε μόνο μία έκφραση και να βάλετε διαφορετικές πιθανές τιμές για να διαλέξετε:
Έκφραση CASEΠΟΤΕ τιμή1 ΤΟ αποτέλεσμα 1ΠΟΤΕ τιμή 2 ΤΟ αποτέλεσμα 2ΠΟΤΕ τιμή 3 ΤΟ αποτέλεσμα 3… ΕΛΛΕΣ επανεκκίνησηΤΕΛΟΣ

Σημειώστε ότι η ρήτρα ELSE είναι προαιρετική.

Παράδειγμα

Στο ακόλουθο παράδειγμα, θα χρησιμοποιήσουμε την έκφραση CASE με τιμή NULL στη στήλη Id τμήματος στον πίνακα "Φοιτητές" για να εμφανιστεί το κείμενο "Χωρίς τμήμα" ως εξής:

ΕΠΙΛΕΓΩΟνομα μαθητή,ΥΠΟΘΕΣΗΠΟΤΕ ΤΟ ΤΜΗΜΑ ΕΙΝΑΙ ΜΗΝ ΤΟ «Όχι Τμήμα»Τμήμα ELSEΤΕΛΟΣ ΩΣ ΤμήμαΑΠΟ Φοιτητές.
  • Ο χειριστής CASE θα ελέγξει την τιμή του DepartmentId αν είναι άκυρη ή όχι.
  • Εάν είναι μια τιμή NULL, τότε θα επιλέξει την κυριολεκτική τιμή «Χωρίς τμήμα» αντί για την τιμή DepartmentId.
  • Εάν δεν είναι μηδενική τιμή, τότε θα επιλέξει την τιμή της στήλης DepartmentId.

Αυτό θα σας δώσει την έξοδο όπως φαίνεται παρακάτω:

Κοινή έκφραση πίνακα

Οι κοινές εκφράσεις πίνακα (CTE) είναι δευτερεύοντα ερωτήματα που ορίζονται στη δήλωση SQL με ένα δεδομένο όνομα.

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

Μια κοινή έκφραση πίνακα μπορεί να οριστεί τοποθετώντας τη ρήτρα ΜΕ μπροστά από δηλώσεις SELECT ως εξής:

ΜΕ CTEnameΟΠΩΣ ΚΑΙ(SELECT δήλωση)ΕΠΙΛΟΓΗ, ΕΝΗΜΕΡΩΣΗ, ΕΙΣΑΓΩΓΗ ή ενημέρωση δήλωσης εδώ ΑΠΟ CTE

Το " CTEname " είναι οποιοδήποτε όνομα μπορείτε να δώσετε για το CTE, μπορείτε να το χρησιμοποιήσετε για να το αναφέρετε αργότερα. Σημειώστε ότι, μπορείτε να ορίσετε δήλωση SELECT, UPDATE, INSERT ή DELETE σε CTE

Τώρα, ας δούμε ένα παράδειγμα για το πώς να χρησιμοποιήσετε το CTE στον όρο SELECT.

Παράδειγμα

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

ΜΕ Όλα τα ΔιαμερίσματαΟΠΩΣ ΚΑΙ(SELECT DepartmentId, DepartmentNameΑΠΟ ΤΜΗΜΑΤΑ)ΕΠΙΛΕΓΩs.StudentId,s.SudentName,α. Όνομα διαμερίσματοςΑΠΟ Φοιτητές ΩΣΕΣΩΤΕΡΙΚΟΣ ΕΓΓΡΑΦΕΙΤΕ Όλα τα Διαμερίσματα ως ON s.DepartmentId = a.DepartmentId;

Σε αυτό το ερώτημα, ορίσαμε ένα CTE και του δώσαμε το όνομα " AllDepartments ". Αυτό το CTE ορίστηκε από ένα ερώτημα SELECT:

 SELECT DepartmentId, DepartmentNameΑΠΟ ΤΜΗΜΑΤΑ

Στη συνέχεια, αφού ορίσαμε το CTE το χρησιμοποιήσαμε στο ερώτημα SELECT που ακολουθεί.

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

Αυτό το ερώτημα θα σας δώσει:

Προηγμένα ερωτήματα

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

Από πού φτάνουμε,

  • Όνομα τμήματος με όλους τους μαθητές για κάθε τμήμα
  • Το όνομα των μαθητών διαχωρίζεται με κόμμα και
  • Δείχνει το τμήμα που έχει τουλάχιστον τρεις μαθητές σε αυτό
ΕΠΙΛΕΓΩδ. Όνομα διαμερίσματος,COUNT (s.StudentId) Αριθμός μαθητών,GROUP_CONCAT (StudentName) ΩΣ ΦοιτητέςΑΠΟ ΤΜΗΜΑΤΑ Ω. ΔΕΣΩΤΕΡΙΚΟΣ ΣΥΜΜΕΤΟΧΗ ΦΟΙΤΗΤΩΝ ΩΣ ΣΕ s.DepartmentId = d.DepartmentIdΟΜΑΔΑ ΑΠΟ d.DepartmentNameΔΙΑΘΕΣΙΜΟ ΚΟΣΜΟ (s.StudentId)> = 3;

Προσθέσαμε μια ρήτρα JOIN για να λάβουμε το Όνομα Department από τον πίνακα "Τμήματα". Μετά από αυτό προσθέσαμε έναν όρο GROUP BY με δύο συγκεντρωτικές συναρτήσεις:

  • "COUNT" για να μετρήσουμε τους μαθητές για κάθε ομάδα τμημάτων.
  • GROUP_CONCAT για συνένωση μαθητών για κάθε ομάδα με κόμμα χωρισμένο σε μία συμβολοσειρά.
  • Μετά το GROUP BY, χρησιμοποιήσαμε τη ρήτρα HAVING για να φιλτράρουμε τα τμήματα και να επιλέξουμε μόνο εκείνα τα τμήματα που έχουν τουλάχιστον 3 μαθητές.

Το αποτέλεσμα θα έχει ως εξής:

Περίληψη:

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