Um SQL-Abfragen in eine SQLite-Datenbank zu schreiben, müssen Sie wissen, wie die Klauseln SELECT, FROM, WHERE, GROUP BY, ORDER BY und LIMIT funktionieren und wie sie verwendet werden.
In diesem Lernprogramm erfahren Sie, wie Sie diese Klauseln verwenden und SQLite-Klauseln schreiben.
In diesem Tutorial lernen Sie:
- Lesen von Daten mit Select
- Namen und Alias
- WO
- Begrenzung und Bestellung
- Duplikate entfernen
- Aggregat
- Gruppiere nach
- Abfrage & Unterabfrage
- Set Operations -UNION, Intersect
- NULL-Behandlung
- Bedingte Ergebnisse
- Gemeinsamer Tabellenausdruck
- Erweiterte Abfragen
Lesen von Daten mit Select
Die SELECT-Klausel ist die Hauptanweisung, mit der Sie eine SQLite-Datenbank abfragen. In der SELECT-Klausel geben Sie an, was ausgewählt werden soll. Aber vor der select-Klausel wollen wir sehen, wo wir mit der FROM-Klausel Daten auswählen können.
Mit der FROM-Klausel wird angegeben, wo Sie Daten auswählen möchten. In der from-Klausel können Sie eine oder mehrere Tabellen oder Unterabfragen angeben, aus denen die Daten ausgewählt werden sollen, wie wir später in den Tutorials sehen werden.
Beachten Sie, dass Sie für alle folgenden Beispiele die Datei sqlite3.exe ausführen und eine Verbindung zur Beispieldatenbank als fließend öffnen müssen:
Schritt 1) In diesem Schritt
- Öffnen Sie den Arbeitsplatz und navigieren Sie zum folgenden Verzeichnis " C: \ sqlite " und
- Dann öffnen Sie " sqlite3.exe ":
Schritt 2) Öffnen Sie die Datenbank " TutorialsSampleDB.db " mit dem folgenden Befehl:
Jetzt können Sie jede Art von Abfrage in der Datenbank ausführen.
In der SELECT-Klausel können Sie nicht nur einen Spaltennamen auswählen, sondern Sie haben auch viele andere Optionen, um anzugeben, was ausgewählt werden soll. Wie folgt:
WÄHLEN *
Dieser Befehl wählt alle Spalten aus allen referenzierten Tabellen (oder Unterabfragen) in der FROM-Klausel aus. Zum Beispiel:
WÄHLEN *VON StudentenINNER JOIN Abteilungen ON Students.DepartmentId = Departments.DepartmentId;
Dadurch werden alle Spalten sowohl aus den Tabellen der Schüler als auch aus den Abteilungs-Tabellen ausgewählt:
SELECT Tabellenname. *
Dadurch werden alle Spalten nur aus der Tabelle "Tabellenname" ausgewählt. Zum Beispiel:
SELECT Studenten. *VON StudentenINNER JOIN Abteilungen ON Students.DepartmentId = Departments.DepartmentId;
Dadurch werden nur alle Spalten aus der Schülertabelle ausgewählt:
Ein wörtlicher Wert
Ein Literalwert ist ein konstanter Wert, der in der select-Anweisung angegeben werden kann. Sie können Literalwerte normalerweise genauso verwenden wie Spaltennamen in der SELECT-Klausel. Diese Literalwerte werden für jede Zeile aus den von der SQL-Abfrage zurückgegebenen Zeilen angezeigt.
Hier sind einige Beispiele für verschiedene Literalwerte, die Sie auswählen können:
- Numerisches Literal - Zahlen in jedem Format wie 1, 2,55, ... usw.
- String-Literale - Jeder String 'USA', 'Dies ist ein Beispieltext',… usw.
- NULL - NULL-Wert.
- Current_TIME - Hier wird die aktuelle Uhrzeit angezeigt.
- CURRENT_DATE - Hier erhalten Sie das aktuelle Datum.
Dies kann in einigen Situationen nützlich sein, in denen Sie einen konstanten Wert für alle zurückgegebenen Zeilen auswählen müssen. Wenn Sie beispielsweise alle Schüler aus der Schülertabelle mit einer neuen Spalte namens Land auswählen möchten, die den Wert "USA" enthält, können Sie Folgendes tun:
SELECT *, 'USA' ALS Land VON Studenten;
Dadurch erhalten Sie alle Spalten der Schüler sowie eine neue Spalte "Land" wie folgt:
Beachten Sie, dass diese neue Spalte Land keine neue Spalte ist, die der Tabelle hinzugefügt wurde. Es handelt sich um eine virtuelle Spalte, die in der Abfrage zur Anzeige der Ergebnisse erstellt wurde und nicht in der Tabelle erstellt wird.
Namen und Alias
Der Alias ist ein neuer Name für die Spalte, mit dem Sie die Spalte mit einem neuen Namen auswählen können. Die Spaltenaliasnamen werden mit dem Schlüsselwort "AS" angegeben.
Wenn Sie beispielsweise die Spalte StudentName auswählen möchten, die mit "Student Name" anstelle von "StudentName" zurückgegeben werden soll, können Sie ihr einen Alias wie folgt geben:
SELECT StudentName AS 'Student Name' FROM Students;
Dadurch erhalten Sie die Namen der Schüler mit dem Namen "Schülername" anstelle von "Schülername" wie folgt:
Beachten Sie, dass der Spaltenname immer noch " StudentName " ist. Die Spalte StudentName ist immer noch dieselbe, sie ändert sich nicht durch den Alias.
Der Alias ändert den Spaltennamen nicht. Es wird lediglich der Anzeigename in der SELECT-Klausel geändert.
Beachten Sie außerdem, dass das Schlüsselwort "AS" optional ist. Sie können den Aliasnamen auch ohne diesen Namen eingeben:
SELECT StudentName 'Student Name' FROM Students;
Und es gibt Ihnen genau die gleiche Ausgabe wie bei der vorherigen Abfrage:
Sie können auch Tabellen-Aliase angeben, nicht nur Spalten. Mit dem gleichen Schlüsselwort "AS". Zum Beispiel können Sie dies tun:
SELECT s. * FROM Students AS s;
Dadurch erhalten Sie alle Spalten in der Tabelle Schüler:
Dies kann sehr nützlich sein, wenn Sie mehr als eine Tabelle verbinden. Anstatt den vollständigen Tabellennamen in der Abfrage zu wiederholen, können Sie jeder Tabelle einen kurzen Aliasnamen geben. Zum Beispiel in der folgenden Abfrage:
SELECT Students.StudentName, Departments.DepartmentNameVON StudentenINNER JOIN Abteilungen ON Students.DepartmentId = Departments.DepartmentId;
Diese Abfrage wählt jeden Schülernamen aus der Tabelle "Schüler" mit seinem Abteilungsnamen aus der Tabelle "Abteilungen" aus:
Die gleiche Abfrage kann jedoch folgendermaßen geschrieben werden:
SELECT s.StudentName, d.DepartmentNameVON Studenten AS sINNER JOIN Abteilungen AS d ON s.DepartmentId = d.DepartmentId;
- Wir haben der Schülertabelle einen Alias "s" und der Abteilungstabelle einen Alias "d" gegeben.
- Anstatt den vollständigen Tabellennamen zu verwenden, haben wir ihre Aliase verwendet, um auf sie zu verweisen.
- INNER JOIN verbindet zwei oder mehr Tabellen unter Verwendung einer Bedingung. In unserem Beispiel haben wir die Studententabelle mit der Abteilungstabelle mit der Spalte DepartmentId verbunden. Eine ausführliche Erklärung für INNER JOIN finden Sie im Tutorial "SQLite Joins".
Dadurch erhalten Sie die genaue Ausgabe wie bei der vorherigen Abfrage:
WO
Wenn Sie SQL-Abfragen nur mit der SELECT-Klausel und der FROM-Klausel schreiben, wie wir im vorherigen Abschnitt gesehen haben, erhalten Sie alle Zeilen aus den Tabellen. Wenn Sie jedoch die zurückgegebenen Daten filtern möchten, müssen Sie eine "WHERE" -Klausel hinzufügen.
Die WHERE-Klausel wird verwendet, um die von der SQL-Abfrage zurückgegebene Ergebnismenge zu filtern. So funktioniert die WHERE-Klausel:
- In der WHERE-Klausel können Sie einen "Ausdruck" angeben.
- Dieser Ausdruck wird für jede Zeile ausgewertet, die aus den in der FROM-Klausel angegebenen Tabellen zurückgegeben wird.
- Der Ausdruck wird als boolescher Ausdruck ausgewertet, mit dem Ergebnis entweder wahr, falsch oder null.
- Dann werden nur Zeilen zurückgegeben, für die der Ausdruck mit einem wahren Wert ausgewertet wurde, und diejenigen mit falschen oder null Ergebnissen werden ignoriert und nicht in die Ergebnismenge aufgenommen.
- Um die Ergebnismenge mit der WHERE-Klausel zu filtern, müssen Sie Ausdrücke und Operatoren verwenden.
Liste der Operatoren in SQLite und deren Verwendung
Im folgenden Abschnitt wird erläutert, wie Sie mithilfe von Ausdrücken und Operatoren filtern können.
Ausdruck ist ein oder mehrere Literalwerte oder Spalten, die mit einem Operator miteinander kombiniert werden.
Beachten Sie, dass Sie Ausdrücke sowohl in der SELECT-Klausel als auch in der WHERE-Klausel verwenden können.
In den folgenden Beispielen werden wir die Ausdrücke und Operatoren sowohl in der select-Klausel als auch in der WHERE-Klausel ausprobieren. Um Ihnen zu zeigen, wie sie funktionieren.
Es gibt verschiedene Arten von Ausdrücken und Operatoren, die Sie wie folgt angeben können:
SQLite der Verkettungsoperator "||"
Dieser Operator wird verwendet, um einen oder mehrere Literalwerte oder Spalten miteinander zu verketten. Es wird eine Folge von Ergebnissen aus allen verketteten Literalwerten oder Spalten erzeugt. Zum Beispiel:
SELECT 'ID mit Name:' || StudentId || StudentName AS StudentIdWithNameVON Studenten;
Dies wird zu einem neuen Alias " StudentIdWithName " verkettet :
- Der Literalzeichenfolgenwert " Id with Name: "
- mit dem Wert der Spalte " StudentId " und
- mit dem Wert aus der Spalte " StudentName "
SQLite CAST-Operator:
Der CAST-Operator wird verwendet, um einen Wert von einem Datentyp in einen anderen Datentyp zu konvertieren.
Wenn Sie beispielsweise einen numerischen Wert als Zeichenfolgenwert wie diesen " '12 .5 ' " gespeichert haben und ihn in einen numerischen Wert konvertieren möchten, können Sie den CAST-Operator verwenden, um dies wie folgt zu tun: " CAST ('12 .5' AS) REAL) ". Oder wenn Sie einen Dezimalwert wie 12,5 haben und nur den ganzzahligen Teil benötigen, können Sie ihn in eine ganze Zahl wie "CAST (12.5 AS INTEGER)" umwandeln.
Beispiel
Im folgenden Befehl werden wir versuchen, verschiedene Werte in andere Datentypen zu konvertieren:
SELECT CAST ('12 .5 'AS REAL) ToReal, CAST (12.5 AS INTEGER) AS ToInteger;
Dies wird Ihnen geben:
Das Ergebnis ist wie folgt:
- CAST ('12 .5 'AS REAL) - Der Wert '12 .5' ist ein Zeichenfolgenwert und wird in einen REAL-Wert konvertiert.
- CAST (12.5 AS INTEGER) - Der Wert 12.5 ist ein Dezimalwert und wird in einen ganzzahligen Wert umgewandelt. Der Dezimalteil wird abgeschnitten und wird zu 12.
SQLite-Arithmetikoperatoren:
Nehmen Sie zwei oder mehr numerische Literalwerte oder numerische Spalten und geben Sie einen numerischen Wert zurück. Die in SQLite unterstützten arithmetischen Operatoren sind:
|
Beispiel:
Im folgenden Beispiel werden wir die fünf arithmetischen Operatoren mit numerischen Literalwerten im selben versuchen
select-Klausel:
SELECT 25 + 6, 25-6, 25 * 6, 25% 6, 25/6;
Dies wird Ihnen geben:
Beachten Sie, wie wir hier eine SELECT-Anweisung ohne FROM-Klausel verwendet haben. Dies ist in SQLite zulässig, solange wir Literalwerte auswählen.
SQLite-Vergleichsoperatoren
Vergleichen Sie zwei Operanden miteinander und geben Sie wie folgt ein wahr oder falsch zurück:
|
Beachten Sie, dass SQLite den wahren Wert mit 1 und den falschen Wert mit 0 ausdrückt.
Beispiel:
WÄHLEN10 <6 AS '<', 10 <= 6 AS '<=',10> 6 AS '>', 10> = 6 AS '> =',10 = 6 AS '=', 10 == 6 AS '==',10! = 6 AS '! =', 10 <> 6 AS '<>';
Dies wird ungefähr so etwas geben:
SQLite Pattern Matching-Operatoren
" LIKE " - wird für den Mustervergleich verwendet. Mit " Gefällt mir" können Sie nach Werten suchen, die einem mit einem Platzhalter angegebenen Muster entsprechen.
Der Operand links kann entweder ein Zeichenfolgenliteralwert oder eine Zeichenfolgenspalte sein. Das Muster kann wie folgt angegeben werden:
- Enthält Muster. Beispiel: StudentName LIKE '% a%' - Hiermit wird nach den Namen der Schüler gesucht, die an einer beliebigen Stelle in der Spalte StudentName den Buchstaben "a" enthalten.
- Beginnt mit dem Muster. Beispiel: " StudentName LIKE 'a%' " - Suchen Sie nach den Namen der Schüler, die mit dem Buchstaben "a" beginnen.
- Endet mit dem Muster. Beispiel: " StudentName LIKE '% a' " - Suchen Sie nach den Namen der Schüler, die mit dem Buchstaben "a" enden.
- Abgleichen eines einzelnen Zeichens in einer Zeichenfolge mit dem Unterstrich "_". Beispiel: " StudentName LIKE 'J___' " - Suchen Sie nach Schülernamen mit einer Länge von 4 Zeichen. Es muss mit dem Buchstaben "J" beginnen und kann nach dem Buchstaben "J" drei weitere Zeichen enthalten.
Beispiele für Mustervergleiche:
- Holen Sie sich Schülernamen, die mit dem Buchstaben 'j' beginnen:
SELECT StudentName FROM Students WHERE StudentName LIKE 'j%';
Ergebnis:
- Holen Sie sich die Namen der Schüler, die mit dem Buchstaben 'y' enden:
SELECT StudentName FROM Students WHERE StudentName LIKE '% y';
Ergebnis:
- Holen Sie sich die Namen der Schüler, die den Buchstaben 'n' enthalten:
SELECT StudentName FROM Students WHERE StudentName LIKE '% n%';
Ergebnis:
"GLOB" - entspricht dem LIKE-Operator, bei GLOB wird jedoch im Gegensatz zum LIKE-Operator zwischen Groß- und Kleinschreibung unterschieden. Die folgenden zwei Befehle geben beispielsweise unterschiedliche Ergebnisse zurück:
SELECT 'Jack' GLOB 'j%';SELECT 'Jack' LIKE 'j%';
Dies wird Ihnen geben:
- Die erste Anweisung gibt 0 (false) zurück, da der GLOB-Operator zwischen Groß- und Kleinschreibung unterscheidet, sodass 'j' nicht gleich 'J' ist. Die zweite Anweisung gibt jedoch 1 (true) zurück, da der LIKE-Operator die Groß- und Kleinschreibung nicht berücksichtigt, sodass 'j' gleich 'J' ist.
Andere Betreiber:
SQLite AND
Ein logischer Operator, der einen oder mehrere Ausdrücke kombiniert. Es wird nur dann true zurückgegeben, wenn alle Ausdrücke einen "true" -Wert ergeben. Es wird jedoch nur dann false zurückgegeben, wenn alle Ausdrücke einen "false" -Wert ergeben.
Beispiel:
Die folgende Abfrage sucht nach Schülern mit StudentId> 5 und StudentName beginnt mit dem Buchstaben N, die zurückgegebenen Schüler müssen die beiden Bedingungen erfüllen:
WÄHLEN *VON StudentenWHERE (StudentId> 5) AND (StudentName LIKE 'N%');
Im obigen Screenshot erhalten Sie als Ausgabe nur "Nancy". Nancy ist die einzige Studentin, die beide Bedingungen erfüllt.
SQLite ODER
Ein logischer Operator, der einen oder mehrere Ausdrücke kombiniert. Wenn einer der kombinierten Operatoren true ergibt, gibt er true zurück. Wenn jedoch alle Ausdrücke false ergeben, wird false zurückgegeben.
Beispiel:
Die folgende Abfrage sucht nach Schülern mit StudentId> 5 oder StudentName beginnt mit dem Buchstaben N, die zurückgegebenen Schüler müssen mindestens eine der Bedingungen erfüllen:
WÄHLEN *VON StudentenWHERE (StudentId> 5) OR (StudentName LIKE 'N%');
Dies wird Ihnen geben:
Im obigen Screenshot erhalten Sie als Ausgabe den Namen eines Schülers mit dem Buchstaben "n" im Namen sowie die Schüler-ID mit dem Wert> 5.
Wie Sie sehen, unterscheidet sich das Ergebnis von der Abfrage mit dem Operator AND.
SQLite ZWISCHEN
ZWISCHEN werden verwendet, um diejenigen Werte auszuwählen, die innerhalb eines Bereichs von zwei Werten liegen. Beispielsweise gibt " X ZWISCHEN Y UND Z " true (1) zurück, wenn der Wert X zwischen den beiden Werten Y und Z liegt. Andernfalls wird false (0) zurückgegeben. " X ZWISCHEN Y UND Z " entspricht " X> = Y UND X <= Z ", X muss größer oder gleich Y sein und X ist kleiner oder gleich Z.
Beispiel:
In der folgenden Beispielabfrage schreiben wir eine Abfrage, um Schüler mit einem ID-Wert zwischen 5 und 8 zu erhalten:
WÄHLEN *VON StudentenWO StudentId ZWISCHEN 5 UND 8;
Dies gibt nur den Schülern mit den IDs 5, 6, 7 und 8:
SQLite IN
Nimmt einen Operanden und eine Liste von Operanden. Es wird true zurückgegeben, wenn der erste Operandenwert einem der Operandenwerte aus der Liste entspricht. Der IN-Operator gibt true (1) zurück, wenn die Liste der Operanden den ersten Operandenwert innerhalb ihrer Werte enthält. Andernfalls wird false (0) zurückgegeben.
So: " col IN (x, y, z) ". Dies entspricht " (col = x) oder (col = y) oder (col = z) ".
Beispiel:
Bei der folgenden Abfrage werden nur Schüler mit den IDs 2, 4, 6, 8 ausgewählt:
WÄHLEN *VON StudentenWHERE StudentId IN (2, 4, 6, 8);
So was:
Die vorherige Abfrage liefert das genaue Ergebnis wie die folgende Abfrage, da sie gleichwertig sind:
WÄHLEN *VON StudentenWO (StudentId = 2) ODER (StudentId = 4) ODER (StudentId = 6) ODER (StudentId = 8);
Beide Abfragen geben die genaue Ausgabe. Der Unterschied zwischen den beiden Abfragen besteht jedoch darin, dass wir als erste Abfrage den Operator "IN" verwendet haben. In der zweiten Abfrage haben wir mehrere "ODER" -Operatoren verwendet.
Der IN-Operator entspricht der Verwendung mehrerer ODER-Operatoren. Die " WHERE StudentId IN (2, 4, 6, 8) " entspricht " WHERE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8) ".
So was:
SQLite NICHT IN
Der Operand "NOT IN" ist das Gegenteil des Operators IN. Aber mit der gleichen Syntax; Es werden ein Operand und eine Liste von Operanden benötigt. Es wird true zurückgegeben, wenn der erste Operandenwert nicht einem der Operandenwerte aus der Liste entspricht. Das heißt, es wird true (0) zurückgegeben, wenn die Liste der Operanden nicht den ersten Operanden enthält. So: " col NOT IN (x, y, z) ". Dies entspricht " (col <> x) AND (col <> y) AND (col <> z) ".
Beispiel:
Mit der folgenden Abfrage werden Schüler mit IDs ausgewählt, die nicht einer dieser IDs 2, 4, 6, 8 entsprechen:
WÄHLEN *VON StudentenWO StudentId NICHT IN (2, 4, 6, 8);
So was
Bei der vorherigen Abfrage geben wir das genaue Ergebnis als folgende Abfrage an, da sie gleichwertig sind:
WÄHLEN *VON StudentenWHERE (StudentId <> 2) AND (StudentId <> 4) AND (StudentId <> 6) AND (StudentId <> 8);
So was:
Im obigen Screenshot
Wir haben mehrere ungleiche Operatoren "<>" verwendet, um eine Liste von Schülern zu erhalten, die weder den folgenden IDs 2, 4, 6 noch 8 entsprechen. Diese Abfrage gibt alle anderen Schüler außer dieser Liste von IDs zurück.
SQLite EXISTIERT
Die EXISTS-Operatoren nehmen keine Operanden an. es braucht nur eine SELECT-Klausel danach. Der EXISTS-Operator gibt true (1) zurück, wenn Zeilen von der SELECT-Klausel zurückgegeben werden, und false (0), wenn überhaupt keine Zeilen von der SELECT-Klausel zurückgegeben werden.
Beispiel:
Im folgenden Beispiel wählen wir den Namen der Abteilung aus, wenn die Abteilungs-ID in der Schülertabelle vorhanden ist:
SELECT DepartmentNameVON Abteilungen AS dWO EXISTIERT (SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId);
Dies wird Ihnen geben:
Es werden nur die drei Abteilungen " IT, Physik und Kunst " zurückgegeben. Und der Abteilungsname " Math " wird nicht zurückgegeben, da sich in dieser Abteilung kein Student befindet, sodass die Abteilungs-ID nicht in der Studententabelle vorhanden ist. Aus diesem Grund hat der EXISTS-Operator die Abteilung " Math " ignoriert .
SQLite NICHT
Kehrt das Ergebnis des vorhergehenden Operators um, der danach kommt. Zum Beispiel:
- NICHT ZWISCHEN - Es wird true zurückgegeben, wenn ZWISCHEN false zurückgegeben wird und umgekehrt.
- NOT LIKE - Es wird true zurückgegeben, wenn LIKE false zurückgibt und umgekehrt.
- NOT GLOB - Es wird true zurückgegeben, wenn GLOB false zurückgibt und umgekehrt.
- NOT EXISTS - Es wird true zurückgegeben, wenn EXISTS false zurückgibt und umgekehrt.
Beispiel:
Im folgenden Beispiel verwenden wir den Operator NOT mit dem Operator EXISTS, um die Abteilungsnamen abzurufen, die in der Tabelle Students nicht vorhanden sind. Dies ist das umgekehrte Ergebnis des Operators EXISTS. Die Suche wird also über die DepartmentId durchgeführt, die in der Abteilungstabelle nicht vorhanden ist.
SELECT DepartmentNameVON Abteilungen AS dWO NICHT EXISTIERT (SELECT DepartmentIdVON Studenten AS sWHERE d.DepartmentId = s.DepartmentId);
Ausgabe :
Es wird nur die Abteilung " Mathematik " zurückgegeben. Da die Abteilung " Mathematik " die einzige Abteilung ist, die in der Schülertabelle nicht vorhanden ist.
Begrenzung und Bestellung
SQLite-Reihenfolge
SQLite Order besteht darin, Ihr Ergebnis nach einem oder mehreren Ausdrücken zu sortieren. Um die Ergebnismenge zu ordnen, müssen Sie die ORDER BY-Klausel wie folgt verwenden:
- Zunächst müssen Sie die ORDER BY-Klausel angeben.
- Die ORDER BY-Klausel muss am Ende der Abfrage angegeben werden. Danach kann nur die LIMIT-Klausel angegeben werden.
- Geben Sie den Ausdruck an, mit dem die Daten sortiert werden sollen. Dieser Ausdruck kann ein Spaltenname oder ein Ausdruck sein.
- Nach dem Ausdruck können Sie eine optionale Sortierrichtung angeben. Entweder DESC, um die Daten absteigend zu ordnen, oder ASC, um die Daten aufsteigend zu ordnen. Wenn Sie keine davon angeben, werden die Daten aufsteigend sortiert.
- Sie können weitere Ausdrücke mit dem "," untereinander angeben.
Beispiel
Im folgenden Beispiel werden alle Schüler nach ihrem Namen, jedoch in absteigender Reihenfolge und dann nach dem Abteilungsnamen in aufsteigender Reihenfolge ausgewählt:
SELECT s.StudentName, d.DepartmentNameVON Studenten AS sINNER JOIN Abteilungen AS d ON s.DepartmentId = d.DepartmentIdORDER BY d.DepartmentName ASC, s.StudentName DESC;
Dies wird Ihnen geben:
- SQLite ordnet zunächst alle Studenten nach ihrem Abteilungsnamen in aufsteigender Reihenfolge
- Dann werden für jeden Abteilungsnamen alle Studenten unter diesem Abteilungsnamen in absteigender Reihenfolge nach ihren Namen angezeigt
SQLite-Limit:
Sie können die Anzahl der von Ihrer SQL-Abfrage zurückgegebenen Zeilen mithilfe der LIMIT-Klausel begrenzen. Mit LIMIT 10 erhalten Sie beispielsweise nur 10 Zeilen und ignorieren alle anderen Zeilen.
In der LIMIT-Klausel können Sie mit der OFFSET-Klausel eine bestimmte Anzahl von Zeilen ab einer bestimmten Position auswählen. Beispiel: " LIMIT 4 OFFSET 4 " ignoriert die ersten 4 Zeilen und gibt ab den fünften Zeilen 4 Zeilen zurück, sodass Sie die Zeilen 5, 6, 7 und 8 erhalten.
Beachten Sie, dass die OFFSET-Klausel optional ist. Sie können sie wie " LIMIT 4, 4 " schreiben und erhalten die genauen Ergebnisse.
Beispiel :
Im folgenden Beispiel geben wir nur 3 Schüler ab der Schüler-ID 5 mit der Abfrage zurück:
SELECT * FROM Students LIMIT 4,3;
Dies gibt Ihnen nur drei Schüler ab Zeile 5. Sie erhalten also die Zeilen mit StudentId 5, 6 und 7:
Duplikate entfernen
Wenn Ihre SQL-Abfrage doppelte Werte zurückgibt, können Sie das Schlüsselwort " DISTINCT " verwenden, um diese doppelten Werte zu entfernen und unterschiedliche Werte zurückzugeben. Sie können nach der Arbeit mit dem DISTINCT-Schlüssel mehr als eine Spalte angeben.
Beispiel:
Die folgende Abfrage gibt doppelte "Abteilungsnamenwerte" zurück: Hier haben wir doppelte Werte mit den Namen IT, Physik und Kunst.
SELECT d.DepartmentNameVON Studenten AS sINNER JOIN Abteilungen AS d ON s.DepartmentId = d.DepartmentId;
Dadurch erhalten Sie doppelte Werte für den Abteilungsnamen:
Beachten Sie, wie es doppelte Werte für den Abteilungsnamen gibt. Jetzt verwenden wir das Schlüsselwort DISTINCT mit derselben Abfrage, um diese Duplikate zu entfernen und nur eindeutige Werte zu erhalten. So was:
SELECT DISTINCT d.DepartmentNameVON Studenten AS sINNER JOIN Abteilungen AS d ON s.DepartmentId = d.DepartmentId;
Dadurch erhalten Sie nur drei eindeutige Werte für die Spalte Abteilungsname:
Aggregat
SQLite-Aggregate sind in SQLite definierte integrierte Funktionen, die mehrere Werte mehrerer Zeilen zu einem Wert zusammenfassen.
Hier sind die von SQLite unterstützten Aggregate:
SQLite AVG ()
Gibt den Durchschnitt für alle x-Werte zurück.
Beispiel:
Im folgenden Beispiel erhalten wir die Durchschnittsnote, die Schüler aus allen Prüfungen erhalten:
SELECT AVG (Mark) FROM Marks;
Dies gibt Ihnen den Wert "18.375":
Diese Ergebnisse ergeben sich aus der Summe aller Markierungswerte geteilt durch ihre Anzahl.
COUNT () - COUNT (X) oder COUNT (*)
Gibt die Gesamtzahl der Häufigkeit zurück, mit der der x-Wert angezeigt wurde. Und hier sind einige Optionen, die Sie mit COUNT verwenden können:
- COUNT (x): Zählt nur x-Werte, wobei x ein Spaltenname ist. NULL-Werte werden ignoriert.
- COUNT (*): Zählt alle Zeilen aus allen Spalten.
- COUNT (DISTINCT x): Sie können vor dem x ein DISTINCT-Schlüsselwort angeben, das die Anzahl der unterschiedlichen Werte von x erhält.
Beispiel
Im folgenden Beispiel erhalten wir die Gesamtzahl der Abteilungen mit COUNT (DepartmentId), COUNT (*) und COUNT (DISTINCT DepartmentId) und wie sie sich unterscheiden:
SELECT COUNT (DepartmentId), COUNT (DISTINCT DepartmentId), COUNT (*) FROM Students;
Dies wird Ihnen geben:
Wie folgt:
- COUNT (DepartmentId) gibt Ihnen die Anzahl aller Abteilungs-IDs an und ignoriert die Nullwerte.
- COUNT (DISTINCT DepartmentId) gibt Ihnen unterschiedliche Werte für DepartmentId an, die nur 3 sind. Dies sind die drei verschiedenen Werte für den Abteilungsnamen. Beachten Sie, dass der Schülername 8 Werte für den Abteilungsnamen enthält. Aber nur die drei verschiedenen Werte: Mathematik, IT und Physik.
- COUNT (*) zählt die Anzahl der Zeilen in der Schülertabelle, die 10 Zeilen für 10 Schüler sind.
GROUP_CONCAT () - GROUP_CONCAT (X) oder GROUP_CONCAT (X, Y)
Die Aggregatfunktion GROUP_CONCAT verkettet mehrere Werte zu einem Wert mit einem Komma, um sie zu trennen. Es hat folgende Möglichkeiten:
- GROUP_CONCAT (X): Dies verkettet den gesamten Wert von x zu einer Zeichenfolge, wobei das Komma "" als Trennzeichen zwischen den Werten verwendet wird. NULL-Werte werden ignoriert.
- GROUP_CONCAT (X, Y): Dadurch werden die Werte von x zu einer Zeichenfolge verkettet, wobei der Wert von y als Trennzeichen zwischen den einzelnen Werten anstelle des Standardtrennzeichens ',' verwendet wird. NULL-Werte werden ebenfalls ignoriert.
- GROUP_CONCAT (DISTINCT X): Dadurch werden alle unterschiedlichen Werte von x zu einer Zeichenfolge verkettet, wobei das Komma "" als Trennzeichen zwischen den Werten verwendet wird. NULL-Werte werden ignoriert.
Beispiel GROUP_CONCAT (DepartmentName)
Die folgende Abfrage verkettet alle Werte des Abteilungsnamens aus den Schülern und der Abteilungstabelle in einem durch Kommas getrennten String. Anstatt eine Liste von Werten zurückzugeben, einen Wert in jeder Zeile. Es wird nur ein Wert in einer Zeile zurückgegeben, wobei alle Werte durch Kommas getrennt sind:
SELECT GROUP_CONCAT (d.DepartmentName)VON Studenten AS sINNER JOIN Abteilungen AS d ON s.DepartmentId = d.DepartmentId;
Dies wird Ihnen geben:
Auf diese Weise erhalten Sie eine Liste mit 8 Abteilungsnamenwerten, die in einem durch Kommas getrennten String verkettet sind.
GROUP_CONCAT (DISTINCT DepartmentName) Beispiel
Die folgende Abfrage verkettet die unterschiedlichen Werte des Abteilungsnamens aus der Tabelle "Schüler und Abteilungen" in einem durch Kommas getrennten String:
SELECT GROUP_CONCAT (DISTINCT d.DepartmentName)VON Studenten AS sINNER JOIN Abteilungen AS d ON s.DepartmentId = d.DepartmentId;
Dies wird Ihnen geben:
Beachten Sie, dass sich das Ergebnis vom vorherigen Ergebnis unterscheidet. Es wurden nur drei Werte zurückgegeben, die die Namen der verschiedenen Abteilungen sind, und die doppelten Werte wurden entfernt.
GROUP_CONCAT (DepartmentName, '&') Beispiel
Die folgende Abfrage verkettet alle Werte der Abteilungsnamensspalte aus der Tabelle "Schüler und Abteilungen" in einer Zeichenfolge, jedoch mit dem Zeichen "&" anstelle eines Kommas als Trennzeichen:
SELECT GROUP_CONCAT (d.DepartmentName, '&')VON Studenten AS sINNER JOIN Abteilungen AS d ON s.DepartmentId = d.DepartmentId;
Dies wird Ihnen geben:
Beachten Sie, wie das Zeichen "&" anstelle des Standardzeichens "" verwendet wird, um zwischen den Werten zu trennen.
SQLite MAX () & MIN ()
MAX (X) gibt den höchsten Wert aus den X-Werten zurück. MAX gibt einen NULL-Wert zurück, wenn alle Werte von x null sind. Während MIN (X) den kleinsten Wert aus den X-Werten zurückgibt. MIN gibt einen NULL-Wert zurück, wenn alle Werte von X null sind.
Beispiel
In der folgenden Abfrage verwenden wir die Funktionen MIN und MAX, um die höchste und die niedrigste Note aus der Tabelle " Marks " zu erhalten:
SELECT MAX (Mark), MIN (Mark) FROM Marks;
Dies wird Ihnen geben:
SQLite SUM (x), Gesamt (x)
Beide geben die Summe aller x-Werte zurück. Sie unterscheiden sich jedoch im Folgenden:
- SUM gibt null zurück, wenn alle Werte null sind, Total gibt jedoch 0 zurück.
- TOTAL gibt immer Gleitkommawerte zurück. SUM gibt einen ganzzahligen Wert zurück, wenn alle x-Werte eine ganze Zahl sind. Wenn die Werte jedoch keine Ganzzahl sind, wird ein Gleitkommawert zurückgegeben.
Beispiel
In der folgenden Abfrage verwenden wir SUM und total, um die Summe aller Noten in den " Marks " -Tabellen zu erhalten:
SELECT SUM (Mark), TOTAL (Mark) FROM Marks;
Dies wird Ihnen geben:
Wie Sie sehen können, gibt TOTAL immer einen Gleitkomma zurück. SUM gibt jedoch einen ganzzahligen Wert zurück, da die Werte in der Spalte "Mark" möglicherweise ganzzahlig sind.
Unterschied zwischen SUM und TOTAL Beispiel:
In der folgenden Abfrage zeigen wir den Unterschied zwischen SUM und TOTAL, wenn sie die Summe der NULL-Werte erhalten:
SELECT SUM (Mark), TOTAL (Mark) FROM Marks WHERE TestId = 4;
Dies wird Ihnen geben:
Beachten Sie, dass für TestId = 4 keine Markierungen vorhanden sind, sodass für diesen Test Nullwerte vorhanden sind. SUM gibt einen Nullwert als Leerzeichen zurück, während TOTAL 0 zurückgibt.
Gruppiere nach
Die GROUP BY-Klausel wird verwendet, um eine oder mehrere Spalten anzugeben, die zum Gruppieren der Zeilen in Gruppen verwendet werden. Die Zeilen mit denselben Werten werden zu Gruppen zusammengefasst.
Für jede andere Spalte, die nicht in der Gruppe nach Spalten enthalten ist, können Sie eine Aggregatfunktion verwenden.
Beispiel:
Die folgende Abfrage gibt Ihnen die Gesamtzahl der in jeder Abteilung anwesenden Studenten an.
SELECT d.DepartmentName, COUNT (s.StudentId) AS StudentsCountVON Studenten AS sINNER JOIN Abteilungen AS d ON s.DepartmentId = d.DepartmentIdGRUPPE VON d. Abteilungsname;
Dies wird Ihnen geben:
Die GROUPBY DepartmentName-Klausel gruppiert alle Schüler für jeden Abteilungsnamen in eine Gruppe. Für jede Gruppe von "Abteilungen" werden die Schüler darauf gezählt.
HAVING-Klausel
Wenn Sie die von der GROUP BY-Klausel zurückgegebenen Gruppen filtern möchten, können Sie nach der GROUP BY-Klausel eine "HAVING" -Klausel mit Ausdruck angeben. Der Ausdruck wird verwendet, um diese Gruppen zu filtern.
Beispiel
In der folgenden Abfrage werden die Abteilungen ausgewählt, in denen nur zwei Studenten beschäftigt sind:
SELECT d.DepartmentName, COUNT (s.StudentId) AS StudentsCountVON Studenten AS sINNER JOIN Abteilungen AS d ON s.DepartmentId = d.DepartmentIdGRUPPE VON d. AbteilungsnameHAVING COUNT (s.StudentId) = 2;
Dies wird Ihnen geben:
Die Klausel HAVING COUNT (S.StudentId) = 2 filtert die zurückgegebenen Gruppen und gibt nur die Gruppen zurück, die genau zwei Schüler enthalten. In unserem Fall hat die Kunstabteilung 2 Studenten, daher wird sie in der Ausgabe angezeigt.
SQLite Query & Subquery
In jeder Abfrage können Sie eine andere Abfrage entweder in SELECT, INSERT, DELETE, UPDATE oder in einer anderen Unterabfrage verwenden.
Diese verschachtelte Abfrage wird als Unterabfrage bezeichnet. Wir werden nun einige Beispiele für die Verwendung von Unterabfragen in der SELECT-Klausel sehen. Im Lernprogramm zum Ändern von Daten werden wir jedoch sehen, wie wir Unterabfragen mit den Anweisungen INSERT, DELETE und UPDATE verwenden können.
Verwenden der Unterabfrage im Beispiel der FROM-Klausel
In der folgenden Abfrage wird eine Unterabfrage in die FROM-Klausel aufgenommen:
WÄHLENs.StudentName, t.MarkVON Studenten AS sINNER JOIN((SELECT StudentId, MarkFROM Tests AS tINNER JOIN Markiert AS m ON t.TestId = m.TestId) ON s.StudentId = t.StudentId;
Die Abfrage:
SELECT StudentId, MarkFROM Tests AS tINNER JOIN Markiert AS m ON t.TestId = m.TestId
Die obige Abfrage wird hier als Unterabfrage bezeichnet, da sie in der FROM-Klausel verschachtelt ist. Beachten Sie, dass wir ihm einen Aliasnamen "t" gegeben haben, damit wir auf die von ihm in der Abfrage zurückgegebenen Spalten verweisen können.
Diese Abfrage gibt Ihnen:
Also in unserem Fall
- s.StudentName wird aus der Hauptabfrage ausgewählt, die den Namen der Schüler und angibt
- t.Mark wird aus der Unterabfrage ausgewählt; das gibt Noten, die von jedem dieser Schüler erhalten werden
Verwenden der Unterabfrage im Beispiel der WHERE-Klausel
In der folgenden Abfrage wird eine Unterabfrage in die WHERE-Klausel aufgenommen:
SELECT DepartmentNameVON Abteilungen AS dWO NICHT EXISTIERT (SELECT DepartmentIdVON Studenten AS sWHERE d.DepartmentId = s.DepartmentId);
Die Abfrage:
SELECT DepartmentIdVON Studenten AS sWO d.DepartmentId = s.DepartmentId
Die obige Abfrage wird hier als Unterabfrage bezeichnet, da sie in der WHERE-Klausel verschachtelt ist. Die Unterabfrage gibt die DepartmentId-Werte zurück, die vom Operator NOT EXISTS verwendet werden.
Diese Abfrage gibt Ihnen:
In der obigen Abfrage haben wir die Abteilung ausgewählt, in der kein Student eingeschrieben ist. Welches ist die "Mathe" Abteilung hier.
Operationen einstellen - UNION, Intersect
SQLite unterstützt die folgenden SET-Operationen:
UNION & UNION ALL
Es kombiniert eine oder mehrere Ergebnismengen (eine Gruppe von Zeilen), die von mehreren SELECT-Anweisungen zurückgegeben wurden, zu einer Ergebnismenge.
UNION gibt unterschiedliche Werte zurück. UNION ALL wird jedoch keine Duplikate enthalten.
Beachten Sie, dass der Spaltenname der in der ersten SELECT-Anweisung angegebene Spaltenname ist.
UNION Beispiel
Im folgenden Beispiel erhalten wir die Liste der Abteilungs-ID aus der Schülertabelle und die Liste der Abteilungs-ID aus der Abteilungs-Tabelle in derselben Spalte:
SELECT DepartmentId AS DepartmentIdUncted FROM StudentsUNIONSELECT DepartmentId FROM Departments;
Dies wird Ihnen geben:
Die Abfrage gibt nur 5 Zeilen zurück, bei denen es sich um die unterschiedlichen Abteilungs-ID-Werte handelt. Beachten Sie den ersten Wert, der der Nullwert ist.
SQLite UNION ALL Beispiel
Im folgenden Beispiel erhalten wir die Liste der Abteilungs-ID aus der Schülertabelle und die Liste der Abteilungs-ID aus der Abteilungs-Tabelle in derselben Spalte:
SELECT DepartmentId AS DepartmentIdUncted FROM StudentsUNION ALLSELECT DepartmentId FROM Departments;
Dies wird Ihnen geben:
Die Abfrage gibt 14 Zeilen, 10 Zeilen aus der Schülertabelle und 4 Zeilen aus der Abteilungstabelle zurück. Beachten Sie, dass die zurückgegebenen Werte Duplikate enthalten. Beachten Sie außerdem, dass der Spaltenname der in der ersten SELECT-Anweisung angegebene war.
Nun wollen wir sehen, wie UNION all zu unterschiedlichen Ergebnissen führt, wenn wir UNION ALL durch UNION ersetzen:
SQLite INTERSECT
Gibt die Werte zurück, die in beiden kombinierten Ergebnismengen vorhanden sind. Werte, die in einer der kombinierten Ergebnismengen vorhanden sind, werden ignoriert.
Beispiel
In der folgenden Abfrage wählen wir die DepartmentId-Werte aus, die in den Tabellen Studenten und Abteilungen in der Spalte DepartmentId vorhanden sind:
SELECT DepartmentId FROM StudentsSchneidenSELECT DepartmentId FROM Departments;
Dies wird Ihnen geben:
Die Abfrage gibt nur drei Werte 1, 2 und 3 zurück. Welche Werte sind in beiden Tabellen vorhanden?
Die Werte null und 4 wurden jedoch nicht berücksichtigt, da der Wert null nur in der Schülertabelle und nicht in der Abteilungstabelle vorhanden ist. Und der Wert 4 existiert in der Abteilungstabelle und nicht in der Schülertabelle.
Aus diesem Grund wurden sowohl die Werte NULL als auch 4 ignoriert und nicht in den zurückgegebenen Werten enthalten.
AUSSER
Angenommen, Sie haben zwei Listen mit Zeilen, Liste1 und Liste2, und Sie möchten nur die Zeilen aus Liste1, die in Liste2 nicht vorhanden sind, können Sie die Klausel "EXCEPT" verwenden. Die EXCEPT-Klausel vergleicht die beiden Listen und gibt die Zeilen zurück, die in Liste1 vorhanden sind und in Liste2 nicht vorhanden sind.
Beispiel
In der folgenden Abfrage wählen wir die DepartmentId-Werte aus, die in der Abteilungstabelle vorhanden sind und in der Schülertabelle nicht vorhanden sind:
SELECT DepartmentId FROM DepartmentsAUSSERSELECT DepartmentId FROM Students;
Dies wird Ihnen geben:
Die Abfrage gibt nur den Wert 4 zurück. Dies ist der einzige Wert, der in der Abteilungstabelle vorhanden ist und in der Schülertabelle nicht vorhanden ist.
NULL-Behandlung
Der Wert " NULL " ist ein spezieller Wert in SQLite. Es wird verwendet, um einen unbekannten oder fehlenden Wert darzustellen. Beachten Sie, dass der Nullwert völlig anders ist als der Wert " 0 " oder "leer". Da 0 und der leere Wert ein bekannter Wert sind, ist der Nullwert jedoch unbekannt.
NULL-Werte erfordern eine spezielle Behandlung in SQLite. Wir werden nun sehen, wie die NULL-Werte behandelt werden.
Suchen Sie nach NULL-Werten
Sie können den normalen Gleichheitsoperator (=) nicht zum Durchsuchen der Nullwerte verwenden. Die folgende Abfrage sucht beispielsweise nach Schülern mit einem Null-DepartmentId-Wert:
SELECT * FROM Students WHERE DepartmentId = NULL;
Diese Abfrage liefert kein Ergebnis:
Da der NULL-Wert keinem anderen Wert entspricht, der selbst einen Nullwert enthält, hat er kein Ergebnis zurückgegeben.
- Damit die Abfrage funktioniert, müssen Sie jedoch den Operator "IS NULL" verwenden , um wie folgt nach Nullwerten zu suchen:
SELECT * FROM Students WHERE DepartmentId ist NULL;
Dies wird Ihnen geben:
Die Abfrage gibt die Schüler zurück, die einen Null-DepartmentId-Wert haben.
- Wenn Sie Werte erhalten möchten, die nicht null sind, müssen Sie den Operator " IS NOT NULL " wie folgt verwenden:
SELECT * FROM Students WHERE DepartmentId IST NICHT NULL;
Dies wird Ihnen geben:
Die Abfrage gibt die Schüler zurück, die keinen NULL DepartmentId-Wert haben.
Bedingte Ergebnisse
Wenn Sie eine Liste mit Werten haben und einen dieser Werte unter bestimmten Bedingungen auswählen möchten. Dafür sollte die Bedingung für diesen bestimmten Wert wahr sein, um ausgewählt zu werden.
Der CASE-Ausdruck wertet diese Liste von Bedingungen für alle Werte aus. Wenn die Bedingung erfüllt ist, wird dieser Wert zurückgegeben.
Wenn Sie beispielsweise eine Spalte "Note" haben und einen Textwert basierend auf dem Notenwert wie folgt auswählen möchten:
- "Ausgezeichnet", wenn die Note höher als 85 ist.
- "Sehr gut", wenn die Note zwischen 70 und 85 liegt.
- "Gut", wenn die Note zwischen 60 und 70 liegt.
Dann können Sie den CASE-Ausdruck verwenden, um dies zu tun.
Dies kann verwendet werden, um eine Logik in der SELECT-Klausel zu definieren, sodass Sie bestimmte Ergebnisse abhängig von bestimmten Bedingungen auswählen können, z. B. if-Anweisung.
Der CASE-Operator kann wie folgt mit verschiedenen Syntaxen definiert werden:
- Sie können verschiedene Bedingungen verwenden:
FALLWENN Bedingung1 DANN Ergebnis1WENN Bedingung2 DANN Ergebnis2WENN Bedingung3 DANN Ergebnis3… SONST ErgebnisENDE
- Sie können auch nur einen Ausdruck verwenden und verschiedene mögliche Werte zur Auswahl stellen:
CASE-AusdruckWENN Wert1 DANN Ergebnis1WENN Wert2 DANN Ergebnis2WENN value3 THEN result3… ELSE restulnENDE
Beachten Sie, dass die ELSE-Klausel optional ist.
Beispiel
Im folgenden Beispiel verwenden wir den CASE- Ausdruck mit dem Wert NULL in der Spalte "Abteilungs-ID" in der Tabelle "Schüler", um den Text "Keine Abteilung" wie folgt anzuzeigen:
WÄHLENName des Studenten,FALLWENN DepartmentId NULL IST, DANN 'No Department'ELSE DepartmentIdEND AS DepartmentIdVON Studenten;
- Der CASE-Operator überprüft den Wert der DepartmentId, ob er null ist oder nicht.
- Wenn es sich um einen NULL-Wert handelt, wird anstelle des DepartmentId-Werts der Literalwert 'No Department' ausgewählt.
- Wenn es sich nicht um einen Nullwert handelt, wird der Wert der Spalte DepartmentId ausgewählt.
Dadurch erhalten Sie die folgende Ausgabe:
Gemeinsamer Tabellenausdruck
Common Table Expressions (CTEs) sind Unterabfragen, die in der SQL-Anweisung mit einem bestimmten Namen definiert sind.
Es hat einen Vorteil gegenüber den Unterabfragen, da es aus den SQL-Anweisungen heraus definiert wird und das Ablesen, Verwalten und Verstehen der Abfragen erleichtert.
Ein allgemeiner Tabellenausdruck kann definiert werden, indem die WITH-Klausel wie folgt vor eine SELECT-Anweisung gestellt wird:
MIT CTE-NameWIE((SELECT-Anweisung)SELECT-, UPDATE-, INSERT- oder Update-Anweisung hier FROM CTE
Der " CTE- Name" ist ein beliebiger Name, den Sie dem CTE geben können. Sie können ihn verwenden, um später darauf zu verweisen. Beachten Sie, dass Sie die Anweisung SELECT, UPDATE, INSERT oder DELETE für CTEs definieren können
Schauen wir uns nun ein Beispiel für die Verwendung von CTE in der SELECT-Klausel an.
Beispiel
Im folgenden Beispiel definieren wir einen CTE aus einer SELECT-Anweisung und verwenden ihn später für eine andere Abfrage:
MIT AllDepartmentsWIE((SELECT DepartmentId, DepartmentNameVON Abteilungen)WÄHLENs.StudentId,s.StudentName,a.DepartmentNameVON Studenten AS sINNER JOIN AllDepartments AS ON ON s.DepartmentId = a.DepartmentId;
In dieser Abfrage haben wir einen CTE definiert und ihm den Namen " AllDepartments " gegeben. Dieser CTE wurde aus einer SELECT-Abfrage definiert:
SELECT DepartmentId, DepartmentNameVON Abteilungen
Nachdem wir den CTE definiert haben, haben wir ihn in der darauf folgenden SELECT-Abfrage verwendet.
Beachten Sie, dass allgemeine Tabellenausdrücke die Ausgabe der Abfrage nicht beeinflussen. Auf diese Weise können Sie eine logische Ansicht oder Unterabfrage definieren, um sie in derselben Abfrage wiederzuverwenden. Allgemeine Tabellenausdrücke ähneln einer Variablen, die Sie deklarieren und als Unterabfrage wiederverwenden. Nur die SELECT-Anweisung wirkt sich auf die Ausgabe der Abfrage aus.
Diese Abfrage gibt Ihnen:
Erweiterte Abfragen
Erweiterte Abfragen sind Abfragen, die komplexe Verknüpfungen, Unterabfragen und einige Aggregate enthalten. Im folgenden Abschnitt sehen wir ein Beispiel für eine erweiterte Abfrage:
Woher bekommen wir das?
- Abteilungsnamen mit allen Studenten für jede Abteilung
- Schülername durch Komma und getrennt
- Zeigt die Abteilung mit mindestens drei Studenten
WÄHLENd.DepartmentName,COUNT (s.StudentId) StudentsCount,GROUP_CONCAT (StudentName) AS StudentenVON Abteilungen AS dINNER JOIN Studenten AS s ON s.DepartmentId = d.DepartmentIdGRUPPE NACH d.DepartmentNameHAVING COUNT (s.StudentId)> = 3;
Wir haben eine JOIN-Klausel hinzugefügt, um den Abteilungsnamen aus der Abteilungstabelle abzurufen. Danach haben wir eine GROUP BY-Klausel mit zwei Aggregatfunktionen hinzugefügt:
- "COUNT", um die Studenten für jede Abteilungsgruppe zu zählen.
- GROUP_CONCAT zum Verketten von Schülern für jede Gruppe mit Komma in einer Zeichenfolge.
- Nach der GROUP BY haben wir die HAVING-Klausel verwendet, um die Abteilungen zu filtern und nur die Abteilungen auszuwählen, die mindestens 3 Studenten haben.
Das Ergebnis ist wie folgt:
Zusammenfassung:
Dies war eine Einführung in das Schreiben von SQLite-Abfragen und die Grundlagen zum Abfragen der Datenbank sowie zum Filtern der zurückgegebenen Daten. Sie können jetzt Ihre eigenen SQLite-Abfragen schreiben.