SQLite Ερώτημα: Επιλογή, Πού, LIMIT, OFFSET, Count, Group By

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

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

Ανάγνωση δεδομένων με επιλογή

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

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

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

Βήμα 1) Στο στάδιο αυτό,

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

Ανάγνωση δεδομένων με επιλογή

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

Ανάγνωση δεδομένων με επιλογή

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

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

SELECT *

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

SELECT * 
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

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

Ανάγνωση δεδομένων με επιλογή

ΕΠΙΛΟΓΗ ονόματος πίνακα.*

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

SELECT Students.*
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

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

Ανάγνωση δεδομένων με επιλογή

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

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

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

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

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

SELECT *, 'USA' AS Country FROM Students;

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

Ανάγνωση δεδομένων με επιλογή

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

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

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

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

SELECT StudentName AS 'Student Name' FROM Students;

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

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

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

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

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

SELECT StudentName 'Student Name' FROM Students;

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

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

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

SELECT s.* FROM Students AS s;

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

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

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

SELECT Students.StudentName, Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

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

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

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

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

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

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

ΠΟΥ

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

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

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

Κατάλογος χειριστών σε SQLite και πώς να τα χρησιμοποιήσετε

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

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

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

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

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

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

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

SELECT 'Id with Name: '|| StudentId || StudentName AS StudentIdWithName
FROM Students;

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

  • Η κυριολεκτική τιμή συμβολοσειράς "Αναγνωριστικό με Όνομα: "
  • με την αξία του «StudentId” στήλη και
  • με την τιμή από "Ονομα μαθητή" στήλη

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

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

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

Για παράδειγμα, εάν έχετε μια αριθμητική τιμή αποθηκευμένη ως τιμή συμβολοσειράς όπως αυτή " «12.5» " και θέλετε να τη μετατρέψετε σε αριθμητική τιμή, μπορείτε να χρησιμοποιήσετε τον τελεστή CAST για να το κάνετε αυτό ως εξής "CAST ('12.5' ΩΣ ΠΡΑΓΜΑΤΙΚΟ)". Ή εάν έχετε μια δεκαδική τιμή όπως το 12.5 και πρέπει να λάβετε μόνο το ακέραιο τμήμα, μπορείτε να το μεταφέρετε σε έναν ακέραιο όπως αυτό το "CAST(12.5 AS INTEGER)".

Παράδειγμα

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

SELECT CAST('12.5' AS REAL) ToReal, CAST(12.5 AS INTEGER) AS ToInteger;

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

SQLite ΕΚΜΑΓΕΊΟ OperaTor

Το αποτέλεσμα είναι το εξής:

  • CAST('12.5' AS REAL) – η τιμή '12.5' είναι τιμή συμβολοσειράς, θα μετατραπεί σε ΠΡΑΓΜΑΤΙΚΗ τιμή.
  • CAST(12.5 ΩΣ ΑΚΕΡΑΙΟΣ) – η τιμή 12.5 είναι δεκαδική τιμή, θα μετατραπεί σε ακέραια τιμή. Το δεκαδικό μέρος θα περικοπεί και θα γίνει 12.

SQLite Αριθμητική Operators:

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

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

Παράδειγμα:

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

ρήτρα επιλογής:

SELECT 25+6, 25-6, 25*6, 25%6, 25/6;

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

SQLite Αριθμητική Operaκορμοί

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

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

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

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

Σημειώστε ότι, SQLite εκφράζει την αληθινή τιμή με 1 και την ψευδή με 0.

Παράδειγμα:

SELECT 
  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 Σύγκριση Operaκορμοί

SQLite Τελεστές αντιστοίχισης προτύπων

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

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

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

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

  1. Λάβετε ονόματα μαθητών που ξεκινούν με το γράμμα «j»:
    SELECT StudentName FROM Students WHERE StudentName LIKE 'j%';

    Αποτέλεσμα:

    SQLite Αντιστοίχιση μοτίβου Operaκορμοί

  2. Λάβετε τα ονόματα των μαθητών που τελειώνουν με το γράμμα «y»:
    SELECT StudentName FROM Students WHERE StudentName LIKE '%y';

    Αποτέλεσμα:

    SQLite Αντιστοίχιση μοτίβου Operaκορμοί

  3. Λάβετε ονόματα μαθητών που περιέχουν το γράμμα "n":
    SELECT StudentName FROM Students WHERE StudentName LIKE '%n%';

    Αποτέλεσμα:

    SQLite Αντιστοίχιση μοτίβου Operaκορμοί

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

SELECT 'Jack' GLOB 'j%';
SELECT 'Jack' LIKE 'j%';

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

SQLite Αντιστοίχιση μοτίβου Operaκορμοί

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

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

SQLite ΚΑΙ

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

Παράδειγμα:

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

SELECT * 
FROM Students 
WHERE (StudentId > 5) AND (StudentName LIKE 'N%');

SQLite ΚΑΙ OperaTor

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

SQLite OR

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

Παράδειγμα:

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

SELECT * 
FROM Students 
WHERE (StudentId > 5) OR (StudentName LIKE 'N%');

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

SQLite OR OperaTor

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

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

SQLite ΜΕΤΑΞΥ

BETWEEN χρησιμοποιείται για την επιλογή εκείνων των τιμών που βρίσκονται εντός εύρους δύο τιμών. Για παράδειγμα, "X ΜΕΤΑΞΥ Υ ΚΑΙ ΩΤο ” θα επιστρέψει true (1) εάν η τιμή X είναι μεταξύ των δύο τιμών Y και Z. Διαφορετικά, θα επιστρέψει false (0). "X ΜΕΤΑΞΥ Υ ΚΑΙ Ω" είναι ισοδύναμο με "Χ >= Υ ΚΑΙ Χ <= Ζ«, το X πρέπει να είναι μεγαλύτερο ή ίσο του Y και το X είναι μικρότερο ή ίσο του Z.

Παράδειγμα:

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

SELECT *
FROM Students
WHERE StudentId BETWEEN 5 AND 8;

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

SQLite ΜΕΤΑΞΥ OperaTor

SQLite IN

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

Σαν αυτό: "στήλη IN(x, y, z)". Αυτό ισοδυναμεί με " (col=x) ή (col=y) ή (col=z) ".

Παράδειγμα:

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

SELECT * 
FROM Students
WHERE StudentId IN(2, 4, 6, 8);

Παρόμοιες θέματα:

SQLite IN OperaTor

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

SELECT * 
FROM Students
WHERE (StudentId = 2) OR (StudentId =  4) OR (StudentId =  6) OR (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 IN OperaTor

SQLite ΟΧΙ ΜΕΣΑ

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

Παράδειγμα:

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

SELECT * 
FROM Students
WHERE StudentId NOT IN(2, 4, 6, 8);

Όπως αυτό

SQLite ΟΧΙ ΜΕΣΑ OperaTor

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

SELECT * 
FROM Students
WHERE (StudentId <> 2) AND (StudentId <> 4) AND (StudentId <> 6) AND (StudentId <> 8);

Παρόμοιες θέματα:

SQLite ΟΧΙ ΜΕΣΑ OperaTor

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

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

SQLite ΥΠΑΡΧΕΙ

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

Παράδειγμα:

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

SELECT DepartmentName
FROM Departments AS d
WHERE EXISTS (SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId);

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

SQLite ΥΠΑΡΧΕΙ OperaTor

Μόνο τα τρία τμήματα»Πληροφορική, Φυσική και Τέχνες” θα επιστραφεί. Και το όνομα του τμήματος "μαθηματικά” δεν θα επιστραφεί επειδή δεν υπάρχει φοιτητής σε αυτό το τμήμα, επομένως το αναγνωριστικό τμήματος δεν υπάρχει στον πίνακα φοιτητών. Γι' αυτό ο χειριστής ΥΠΑΡΧΕΙ αγνόησε το "μαθηματικά» τμήμα.

SQLite ΔΕΝ

Revδιαγράφει το αποτέλεσμα του προηγούμενου τελεστή που έρχεται μετά από αυτόν. Για παράδειγμα:

  • NOT BETWEEN – Θα επιστρέψει true εάν το BETWEEN επιστρέψει false και αντίστροφα.
  • NOT LIKE – Θα επιστρέψει true αν το LIKE επιστρέψει false και αντίστροφα.
  • NOT GLOB – Θα επιστρέψει true εάν το GLOB επιστρέψει false και αντίστροφα.
  • ΔΕΝ ΥΠΑΡΧΕΙ – Θα επιστρέψει true αν το EXISTS επιστρέψει false και αντίστροφα.

Παράδειγμα:

Στο παρακάτω παράδειγμα, θα χρησιμοποιήσουμε τον τελεστή NOT με τον τελεστή ΥΠΑΡΧΕΙ για να λάβουμε τα ονόματα των τμημάτων που δεν υπάρχουν στον πίνακα Students, που είναι το αντίστροφο αποτέλεσμα του τελεστή EXISTS. Έτσι, η αναζήτηση θα γίνει μέσω του DepartmentId που δεν υπάρχουν στον πίνακα του τμήματος.

SELECT DepartmentName
FROM Departments AS d
WHERE NOT EXISTS (SELECT DepartmentId 
                  FROM Students AS s 
                  WHERE d.DepartmentId = s.DepartmentId);

Παραγωγή:

SQLite ΔΕΝ OperaTor

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

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

SQLite Order

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

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

Παράδειγμα

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

SELECT s.StudentName, d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
ORDER BY d.DepartmentName ASC , s.StudentName DESC;

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

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

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

SQLite Οριο:

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

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

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

Παράδειγμα:

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

SELECT * FROM Students LIMIT 4,3;

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

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

Αφαίρεση διπλότυπων

Εάν το ερώτημά σας SQL επιστρέφει διπλότυπες τιμές, μπορείτε να χρησιμοποιήσετε το "ΔΙΑΦΟΡΕΤΙΚΕΣ" λέξη-κλειδί για να αφαιρέσετε αυτά τα διπλότυπα και να επιστρέψετε σε διαφορετικές τιμές. Μπορείτε να καθορίσετε περισσότερες από μία στήλες μετά την εργασία DISTINCT.

Παράδειγμα:

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

SELECT d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

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

Αφαίρεση διπλότυπων

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

SELECT DISTINCT d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

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

Αφαίρεση διπλότυπων

Σύνολο

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

Εδώ είναι τα συγκεντρωτικά στοιχεία που υποστηρίζονται από SQLite:

SQLite AVG()

Επέστρεψε τον μέσο όρο για όλες τις τιμές x.

Παράδειγμα:

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

SELECT AVG(Mark) FROM Marks;

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

Σύνολο:SQLite AVG()

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

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(*) FROM Students;

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

Συγκεντρωτικό:COUNT() – COUNT(X) ή 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) Παράδειγμα

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

SELECT GROUP_CONCAT(d.DepartmentName)
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

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

Συγκεντρωτικό:GROUP_CONCAT() – GROUP_CONCAT(X) ή GROUP_CONCAT(X,Y)

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

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

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

SELECT GROUP_CONCAT(DISTINCT d.DepartmentName)
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

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

Συγκεντρωτικό:GROUP_CONCAT(DISTINCT DepartmentName) Παράδειγμα

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

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

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

SELECT GROUP_CONCAT(d.DepartmentName, '&')
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

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

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

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

SQLite MAX() & MIN()

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

Παράδειγμα

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

SELECT MAX(Mark), MIN(Mark) FROM Marks;

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

Σύνολο:SQLite MAX() & MIN()

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

Και οι δύο θα επιστρέψουν το άθροισμα όλων των τιμών x. Διαφέρουν όμως στα εξής:

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

Παράδειγμα

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

SELECT SUM(Mark), TOTAL(Mark) FROM Marks;

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

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

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

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

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

SELECT SUM(Mark), TOTAL(Mark) FROM Marks WHERE TestId = 4;

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

Συγκεντρωτικό: Διαφορά μεταξύ SUM και TOTAL Παράδειγμα

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

Ομάδα ΑΠΟ

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

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

Παράδειγμα:

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

SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount
FROM Students AS s 
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
GROUP BY d. DepartmentName;

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

Ομάδα BY:HAVING ρήτρα

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

Ρήτρα ΕΛΕΓΧΟΥ

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

Παράδειγμα

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

SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount
FROM Students AS s 
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
GROUP BY d. DepartmentName
HAVING COUNT(s.StudentId) = 2;

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

Ομάδα ΑΠΟ

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

SQLite Ερώτημα & Υποερώτημα

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

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

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

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

SELECT
  s.StudentName, t.Mark
FROM Students AS s 
INNER JOIN
(
   SELECT StudentId, Mark
   FROM Tests AS t
   INNER JOIN Marks AS m ON t.TestId = m.TestId
)  ON s.StudentId = t.StudentId;

Το ερώτημα:

   SELECT StudentId, Mark
   FROM Tests AS t
   INNER JOIN Marks AS m ON t.TestId = m.TestId

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

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

SQLite Ερώτημα και υποερώτημα: Χρησιμοποιώντας το δευτερεύον ερώτημα στον όρο FROM

Στην περίπτωσή μας λοιπόν,

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

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

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

SELECT DepartmentName
FROM Departments AS d
WHERE NOT EXISTS (SELECT DepartmentId 
                  FROM Students AS s 
                  WHERE d.DepartmentId = s.DepartmentId);

Το ερώτημα:

SELECT DepartmentId 
FROM Students AS s 
WHERE d.DepartmentId = s.DepartmentId

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

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

SQLite Ερώτημα και υποερώτημα: Χρήση υποερωτήματος στην ρήτρα WHERE

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

σετ Operations – ΕΝΩΣΗ,Τέμνονται

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

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

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

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

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

Παράδειγμα ΕΝΩΣΗΣ

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

SELECT DepartmentId AS DepartmentIdUnioned FROM Students
UNION
SELECT DepartmentId FROM Departments;

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

σετ Operations - UNION Παράδειγμα

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

SQLite Παράδειγμα ΕΝΩΣΗΣ ΟΛΩΝ

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

SELECT DepartmentId AS DepartmentIdUnioned FROM Students
UNION ALL
SELECT DepartmentId FROM Departments;

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

σετ Operations - UNION Παράδειγμα

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

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

SQLite ΔΙΑΤΕΜΝΩ

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

Παράδειγμα

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

SELECT DepartmentId FROM Students
Intersect
SELECT DepartmentId FROM Departments;

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

σετ Operations - ΤΜΗΜΑ

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

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

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

ΕΚΤΟΣ

Ας υποθέσουμε ότι εάν έχετε δύο λίστες σειρών, τη λίστα 1 και τη λίστα 2, και θέλετε τις σειρές μόνο από τη λίστα 1 που δεν υπάρχει στη λίστα 2, μπορείτε να χρησιμοποιήσετε τον όρο «ΕΚΤΟΣ». Η ρήτρα EXCEPT συγκρίνει τις δύο λίστες και επιστρέφει εκείνες τις σειρές που υπάρχουν στη λίστα1 και δεν υπάρχουν στη λίστα2.

Παράδειγμα

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

SELECT DepartmentId FROM Departments
EXCEPT
SELECT DepartmentId FROM Students;

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

σετ Operations - ΕΚΤΟΣ

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

NULL χειρισμός

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

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

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

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

SELECT * FROM Students WHERE DepartmentId = NULL;

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

NULL Χειρισμός

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

  • Ωστόσο, για να δουλέψει το ερώτημα, πρέπει να χρησιμοποιήσετε το “ΕΙΝΑΙ ΜΗΧΑΝΟ” τελεστής για αναζήτηση μηδενικών τιμών ως εξής:
SELECT * FROM Students WHERE DepartmentId IS NULL;

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

NULL Χειρισμός

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

  • Εάν θέλετε να λάβετε αυτές τις τιμές που δεν είναι null, τότε πρέπει να χρησιμοποιήσετε το "ΔΕΝ ΑΠΑΓΟΡΕΥΕΤΑΙ” τελεστής όπως αυτός:
SELECT * FROM Students WHERE DepartmentId IS NOT NULL;

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

NULL Χειρισμός

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

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

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

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

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

– «Άριστα» εάν ο βαθμός είναι μεγαλύτερος από 85.

– «Πολύ Καλό» αν ο βαθμός είναι μεταξύ 70 και 85.

– «Καλό» αν ο βαθμός είναι μεταξύ 60 και 70.

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

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

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

  1. Μπορείτε να χρησιμοποιήσετε διαφορετικές συνθήκες:
CASE 
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  WHEN condition3 THEN result3
  …
  ELSE resultn
END
  1. Ή, μπορείτε να χρησιμοποιήσετε μόνο μία έκφραση και να βάλετε διαφορετικές πιθανές τιμές για να διαλέξετε:
CASE expression
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  WHEN value3 THEN result3
  …
  ELSE restuln 
END

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

Παράδειγμα

Στο παρακάτω παράδειγμα, θα χρησιμοποιήσουμε το ΠΕΡΙΠΤΩΣΗ έκφραση με Τιμή NULL τιμή στη στήλη Αναγνωριστικό τμήματος στον πίνακα Students για να εμφανιστεί το κείμενο "No Department" ως εξής:

SELECT 
  StudentName,
  CASE 
    WHEN DepartmentId IS NULL THEN 'No Department'
    ELSE DepartmentId 
  END AS DepartmentId
FROM Students;
  • Ο χειριστής CASE θα ελέγξει την τιμή του DepartmentId είτε είναι μηδενική είτε όχι.
  • Εάν είναι τιμή NULL, τότε θα επιλέξει την κυριολεκτική τιμή "No Department" αντί για την τιμή DepartmentId.
  • Εάν δεν είναι μηδενική τιμή, τότε θα επιλέξει την τιμή της στήλης DepartmentId.

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

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

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

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

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

Μια κοινή έκφραση πίνακα μπορεί να οριστεί βάζοντας τον όρο WITH μπροστά από μια πρόταση SELECT ως εξής:

WITH CTEname
AS
(
   SELECT statement
)
SELECT, UPDATE, INSERT, or update statement here FROM CTE

Ο "Όνομα CTE” είναι οποιοδήποτε όνομα μπορείτε να δώσετε για το CTE, μπορείτε να το χρησιμοποιήσετε για να αναφερθείτε σε αυτό αργότερα. Σημειώστε ότι, μπορείτε να ορίσετε δήλωση SELECT, UPDATE, INSERT ή DELETE σε CTE

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

Παράδειγμα

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

WITH AllDepartments
AS
(
  SELECT DepartmentId, DepartmentName
  FROM Departments
)
SELECT 
  s.StudentId,
  s.StudentName,
  a.DepartmentName
FROM Students AS s
INNER JOIN AllDepartments AS a ON s.DepartmentId = a.DepartmentId;

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

SELECT DepartmentId, DepartmentName
  FROM Departments

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

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

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

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

Προηγμένες ερωτήσεις

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

Εκεί που παίρνουμε,

  • Ονόματα τμήματος με όλους τους μαθητές για κάθε τμήμα
  • Τα ονόματα των μαθητών χωρίζονται με κόμμα και
  • Εμφάνιση του τμήματος με τουλάχιστον τρεις μαθητές σε αυτό
SELECT 
  d.DepartmentName,
  COUNT(s.StudentId) StudentsCount,
  GROUP_CONCAT(StudentName) AS Students
FROM Departments AS d 
INNER JOIN Students AS s ON s.DepartmentId = d.DepartmentId
GROUP BY d.DepartmentName
HAVING COUNT(s.StudentId) >= 3;

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

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

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

Ερωτήματα για προχωρημένους

Σύνοψη

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

Ημερήσιο ενημερωτικό δελτίο Guru99

Ξεκινήστε τη μέρα σας με τις πιο πρόσφατες και πιο σημαντικές ειδήσεις για την Τεχνητή Νοημοσύνη, τώρα.