SQLite Abfrage: Auswählen, Wo, LIMIT, OFFSET, Anzahl, Gruppieren nach
⚡ Intelligente Zusammenfassung
SQLite Abfragen rufen Daten mithilfe der SELECT-, FROM-, WHERE-, GROUP BY-, ORDER BY- und LIMIT-Klauseln ab und filtern sie. Durch die Kombination dieser Klauseln mit Operatoren, Aggregaten, Unterabfragen und Mengenoperationen können Sie Datensätze aus beliebigen Quellen lesen, strukturieren und zusammenfassen. SQLite Datenbank.

In den folgenden Abschnitten werden das Lesen von Daten mit SELECT und FROM, das Filtern von Zeilen mit WHERE und seinen Operatoren, das Sortieren und Einschränken von Ergebnissen, Aggregatfunktionen, GROUP BY und HAVING, Unterabfragen, Mengenoperationen, die Behandlung von NULL-Werten, CASE-Ausdrücke und Common Table Expressions erläutert.
Schreiben SQL-Abfragen in eine SQLite Datenbank müssen Sie wissen, wie die Klauseln SELECT, FROM, WHERE, GROUP BY, ORDER BY und LIMIT funktionieren und wie Sie sie verwenden.
In diesem Tutorial lernen Sie, wie Sie diese Klauseln verwenden und schreiben SQLite Klauseln.
Daten mit Select lesen
Die SELECT-Klausel ist die Hauptanweisung, mit der Sie eine abfragen SQLite Datenbank. In der SELECT-Klausel geben Sie an, was ausgewählt werden soll. Aber vor der Select-Klausel wollen wir sehen, von wo aus wir Daten mithilfe der FROM-Klausel auswählen können.
Mit der FROM-Klausel geben Sie an, 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 sqlite3.exe ausführen und wie folgt eine Verbindung zur Beispieldatenbank öffnen müssen:
Schritt 1) In diesem Schritt
Öffnen Sie „Arbeitsplatz“ und navigieren Sie zum folgenden Verzeichnis „C:\sqlite“. Öffnen Sie anschließend „sqlite3.exe“:
Schritt 2) Öffnen Sie die Datenbank „TutorialsSampleDB.db“ mit folgendem 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:
SELECT *
Dieser Befehl wählt alle Spalten aus allen referenzierten Tabellen (oder Unterabfragen) in der FROM-Klausel aus. Zum Beispiel:
SELECT * FROM Students INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
Dadurch werden alle Spalten sowohl aus der Tabelle „Studenten“ als auch aus der Tabelle „Abteilungen“ ausgewählt:
SELECT Tabellenname.*
Dadurch werden alle Spalten nur aus der Tabelle „Tabellenname“ ausgewählt. Zum Beispiel:
SELECT Students.* FROM Students INNER JOIN Departments 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 der 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 – Beliebige Zeichenfolge „USA“, „Dies ist ein Beispieltext“, … usw.
- NULL – NULL-Wert.
- Current_TIME – Zeigt Ihnen die aktuelle Uhrzeit an.
- CURRENT_DATE – hier erhalten Sie das aktuelle Datum.
Dies kann in manchen Situationen nützlich sein, in denen Sie einen konstanten Wert für alle zurückgegebenen Zeilen auswählen müssen. Wenn Sie beispielsweise alle Studenten aus der Tabelle „Studenten“ auswählen möchten, mit einer neuen Spalte namens „Land“, die den Wert „USA“ enthält, können Sie Folgendes tun:
SELECT *, 'USA' AS Country FROM Students;
Dadurch erhalten Sie alle Spalten der Schüler sowie eine neue Spalte „Land“ wie diese:
Beachten Sie, dass es sich bei dieser neuen Spalte „Land“ nicht um eine neue Spalte handelt, die der Tabelle hinzugefügt wurde. Es handelt sich um eine virtuelle Spalte, die in der Abfrage zur Anzeige der Ergebnisse erstellt wird 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 Spaltenaliase 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 diesen zuweisen:
SELECT StudentName AS 'Student Name' FROM Students;
Dadurch erhalten Sie die Namen der Studierenden mit dem Namen „Student Name“ anstelle von „StudentName“ wie folgt:
Beachten Sie, dass der Spaltenname weiterhin „StudentName“ lautet; die Spalte StudentName bleibt unverändert, 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 es eingeben, etwa so:
SELECT StudentName 'Student Name' FROM Students;
Und Sie erhalten genau die gleiche Ausgabe wie bei der vorherigen Abfrage:
Sie können Tabellen auch Aliase zuweisen, nicht nur Spalten. Mit dem gleichen Schlüsselwort „AS“. Sie können beispielsweise Folgendes tun:
SELECT s.* FROM Students AS s;
Dadurch erhalten Sie alle Spalten der Tabelle „Studenten“:
Dies kann sehr nützlich sein, wenn Sie mehr als eine Tabelle verknüpfen. Anstatt den vollständigen Tabellennamen in der Abfrage zu wiederholen, können Sie jeder Tabelle einen kurzen Aliasnamen geben. In der folgenden Abfrage beispielsweise:
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
Diese Abfrage wählt jeden Studentennamen aus der Tabelle „Studenten“ mit seinem Abteilungsnamen aus der Tabelle „Abteilungen“ aus:
Die gleiche Abfrage kann jedoch auch so geschrieben werden:
SELECT s.StudentName, d.DepartmentName FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Wir haben der Tabelle „Students“ den Alias „s“ und der Tabelle „Departments“ den Alias „d“ gegeben. Anstatt die vollständigen Tabellennamen zu verwenden, haben wir dann die Aliase benutzt. INNER JOIN verknüpft zwei oder mehr Tabellen anhand einer Bedingung. In unserem Beispiel haben wir die Tabelle „Students“ mit der Tabelle „Departments“ über die Spalte „DepartmentId“ verknüpft. Eine ausführliche Erklärung zu INNER JOIN finden Sie im Abschnitt „…“.SQLite Joins" Lernprogramm.
Dadurch erhalten Sie die exakte Ausgabe wie bei der vorherigen Abfrage:
WO
Wenn Sie SQL-Abfragen allein 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 dient dazu, die von der SQL-Abfrage zurückgegebenen Ergebnisse 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 von den in der FROM-Klausel angegebenen Tabellen zurückgegeben wird.
- Der Ausdruck wird als boolescher Ausdruck ausgewertet, wobei das Ergebnis entweder wahr, falsch oder null ist.
- 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 Betreiber in SQLite und wie man sie benutzt
Im folgenden Abschnitt erklären wir Ihnen, wie Sie mittels Ausdrücken und Operatoren filtern können.
Ein Ausdruck besteht aus einem oder mehreren Literalwerten oder Spalten, die durch einen 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 verknüpfen. Er erzeugt eine Ergebniszeichenfolge aus allen verknüpften Literalwerten oder Spalten. Beispiel:
SELECT 'Id with Name: '|| StudentId || StudentName AS StudentIdWithName FROM Students;
Dies wird zu einem neuen Alias „StudentIdWithName“ zusammengefügt:
- Der Literalwert der Zeichenkette „Id mit 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.
Wenn Sie beispielsweise einen numerischen Wert als Zeichenkette wie „'12.5'“ gespeichert haben und diesen in einen numerischen Wert umwandeln möchten, können Sie dies mit dem CAST-Operator tun: „CAST('12.5' AS REAL)“. Oder wenn Sie einen Dezimalwert wie 12.5 haben und nur den ganzzahligen Anteil benötigen, können Sie ihn mit „CAST(12.5 AS INTEGER)“ in eine Ganzzahl umwandeln.
Beispiel
Im folgenden Befehl versuchen wir verschiedene Werte in andere Datentypen umzuwandeln:
SELECT CAST('12.5' AS REAL) ToReal, CAST(12.5 AS INTEGER) AS ToInteger;
Dadurch erhalten Sie:
Das Ergebnis ist wie folgt:
- CAST('12.5' AS REAL) – der Wert '12.5' ist ein String-Wert, er wird in einen REAL-Wert konvertiert.
- CAST(12.5 AS INTEGER) – der Wert 12.5 ist ein Dezimalwert, er wird in einen ganzzahligen Wert umgewandelt. Der Dezimalteil wird abgeschnitten und ergibt 12.
SQLite Arithmetik OperaTore:
Nimmt zwei oder mehr numerische Literalwerte oder numerische Spalten und gibt einen numerischen Wert zurück. Die in SQLite sind:
- Die Addition „+“ ergibt die Summe der beiden Operanden.
- Subtraction “–” – subtracts sind die beiden Operanden und ergeben die Differenz.
- Multiplikation „*“ – das Produkt der beiden Operanden.
- Rest (Modulo) „%“ – gibt den Rest an, der sich aus der Division eines Operanden durch den zweiten Operanden ergibt.
- Division „/“ – gibt den Quotienten zurück, der sich aus der Division des linken Operanden durch den rechten Operanden ergibt.
Ejemplo:
Im folgenden Beispiel werden wir die fünf arithmetischen Operatoren mit numerischen Literalwerten in derselben Select-Klausel ausprobieren:
SELECT 25+6, 25-6, 25*6, 25%6, 25/6;
Dadurch erhalten Sie:
Beachten Sie, dass wir hier eine SELECT-Anweisung ohne FROM-Klausel verwendet haben. Und das ist erlaubt SQLite solange wir Literalwerte auswählen.
SQLite Vergleichsoperatoren
Vergleichen Sie zwei Operanden miteinander und geben Sie „true“ oder „false“ wie folgt zurück:
- “<” – gibt true zurück, wenn der linke Operand kleiner als der rechte Operand ist.
- “<=” – gibt true zurück, wenn der linke Operand kleiner oder gleich dem rechten Operanden ist.
- “>” – gibt true zurück, wenn der linke Operand größer als der rechte Operand ist.
- “>=” – gibt true zurück, wenn der linke Operand größer oder gleich dem rechten Operanden ist.
- Die Operatoren „=“ und „==“ liefern „wahr“, wenn die beiden Operanden gleich sind. Beide Operatoren sind identisch; es gibt keinen Unterschied zwischen ihnen.
- Die Operatoren „!=“ und „<>“ liefern „true“, wenn die beiden Operanden ungleich sind. Beide Operatoren sind identisch; es gibt keinen Unterschied zwischen ihnen.
Beachten Sie, dass, SQLite drückt den wahren Wert mit 1 und den falschen Wert mit 0 aus.
Ejemplo:
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 '<>';
Dies ergibt etwa Folgendes:
SQLite Mustervergleichsoperatoren
„LIKE“ dient der Mustererkennung. Mit „LIKE“ können Sie nach Werten suchen, die einem mithilfe eines Platzhalters angegebenen Muster entsprechen.
Der Operand auf der linken Seite kann entweder ein Stringliteralwert oder eine Stringspalte sein. Das Muster kann wie folgt angegeben werden:
- Enthält ein Muster. Zum Beispiel: StudentName LIKE '%a%' – dies sucht nach den Namen der Studierenden, die den Buchstaben „a“ an beliebiger Stelle in der Spalte StudentName enthalten.
- Es beginnt mit dem Suchmuster. Zum Beispiel: „StudentName LIKE 'a%'“ – Suche nach den Namen der Schüler, die mit dem Buchstaben „a“ beginnen.
- Endet mit dem Muster. Zum Beispiel: „StudentName LIKE '%a'“ – Suche nach den Namen der Schüler, die mit dem Buchstaben „a“ enden.
- Ein beliebiges einzelnes Zeichen in einer Zeichenkette wird mithilfe des Unterstrichs „_“ gefunden. Beispiel: „StudentName LIKE 'J___'“ – Suche nach Studentennamen mit vier Zeichen. Der Name muss mit dem Buchstaben „J“ beginnen und darf bis zu drei weitere Zeichen enthalten.
Beispiele für Mustervergleiche:
Rufen Sie Schülernamen ab, die mit dem Buchstaben „j“ beginnen:
SELECT StudentName FROM Students WHERE StudentName LIKE 'j%';
Ergebnis:
Rufen Sie ab, dass die Namen der Schüler mit dem Buchstaben „y“ enden:
SELECT StudentName FROM Students WHERE StudentName LIKE '%y';
Ergebnis:
Rufen Sie die Namen der Schüler ab, die den Buchstaben „n“ enthalten:
SELECT StudentName FROM Students WHERE StudentName LIKE '%n%';
Ergebnis:
„GLOB“ entspricht dem LIKE-Operator, unterscheidet aber im Gegensatz zu diesem zwischen Groß- und Kleinschreibung. Beispielsweise liefern die folgenden beiden Befehle unterschiedliche Ergebnisse:
SELECT 'Jack' GLOB 'j%'; SELECT 'Jack' LIKE 'j%';
Dadurch erhalten Sie:
Die erste Anweisung gibt 0 (falsch) zurück, da der GLOB-Operator zwischen Groß- und Kleinschreibung unterscheidet, sodass „j“ nicht gleich „J“ ist. Die zweite Anweisung gibt jedoch 1 (wahr) zurück, da der LIKE-Operator zwischen Groß- und Kleinschreibung unterscheidet, sodass „j“ gleich „J“ ist.
Andere Betreiber:
SQLite UND
Ein logischer Operator, der einen oder mehrere Ausdrücke kombiniert. Er gibt nur dann „true“ zurück, wenn alle Ausdrücke den Wert „true“ ergeben. Er gibt jedoch nur dann „false“ zurück, wenn alle Ausdrücke den Wert „false“ ergeben.
Ejemplo:
Die folgende Abfrage sucht nach Studierenden, deren StudentId > 5 ist und deren StudentName mit dem Buchstaben N beginnt. Die zurückgegebenen Studierenden müssen die beiden Bedingungen erfüllen:
SELECT * FROM Students WHERE (StudentId > 5) AND (StudentName LIKE 'N%');
Als Ausgabe erhalten Sie im obigen Screenshot nur „Nancy“. Nancy ist die einzige Studentin, die beide Bedingungen erfüllt.
SQLite OR
Ein logischer Operator, der einen oder mehrere Ausdrücke kombiniert, so dass, wenn einer der kombinierten Operatoren „true“ ergibt, „true“ zurückgegeben wird. Wenn jedoch alle Ausdrücke „false“ ergeben, wird „false“ zurückgegeben.
Ejemplo:
Die folgende Abfrage sucht nach Studierenden, deren StudentId > 5 ist oder deren StudentName mit dem Buchstaben N beginnt. Die zurückgegebenen Studierenden müssen mindestens eine der folgenden Bedingungen erfüllen:
SELECT * FROM Students WHERE (StudentId > 5) OR (StudentName LIKE 'N%');
Dadurch erhalten Sie:
Als Ausgabe erhalten Sie im obigen Screenshot 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 UND-Operator.
SQLite ZWISCHEN
Mit der Funktion BETWEEN werden Werte ausgewählt, die innerhalb eines bestimmten Bereichs zwischen zwei Werten liegen. Beispielsweise liefert „X BETWEEN Y AND Z“ den Wert TRUE (1), wenn der Wert X zwischen den beiden Werten Y und Z liegt. Andernfalls wird FALSE (0) zurückgegeben. „X BETWEEN Y AND Z“ entspricht „X >= Y AND X <= Z“, wobei X größer oder gleich Y und kleiner oder gleich Z sein muss.
Ejemplo:
In der folgenden Beispielabfrage schreiben wir eine Abfrage, um Studierende mit einem ID-Wert zwischen 5 und 8 abzurufen:
SELECT * FROM Students WHERE StudentId BETWEEN 5 AND 8;
Dadurch erhalten nur die Schüler 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 etwas wie: „col IN(x, y, z)“. Dies ist äquivalent zu „(col=x) oder (col=y) oder (col=z)“.
Ejemplo:
Die folgende Abfrage wählt nur Studierende mit den IDs 2, 4, 6, 8 aus:
SELECT * FROM Students WHERE StudentId IN(2, 4, 6, 8);
Liken:
Die vorherige Abfrage gibt das gleiche Ergebnis wie die folgende Abfrage, da sie gleichwertig sind:
SELECT * FROM Students WHERE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8);
Beide Abfragen geben die exakte Ausgabe aus. Der Unterschied zwischen den beiden Abfragen besteht jedoch darin, dass wir bei der ersten Abfrage den Operator „IN“ verwendet haben. Bei der zweiten Abfrage haben wir mehrere „OR“-Operatoren verwendet.
Der IN-Operator entspricht der Verwendung mehrerer OR-Operatoren. „WHERE StudentId IN(2, 4, 6, 8)“ ist äquivalent zu „WHERE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8);“.
Liken:
SQLite NICHT IN
Der Operator „NOT IN“ ist das Gegenteil des Operators „IN“. Die Syntax ist jedoch dieselbe: Er benötigt einen Operanden und eine Liste von Operanden. Er gibt „true“ zurück, wenn der Wert des ersten Operanden nicht mit einem Wert eines der Operanden aus der Liste übereinstimmt. Das heißt, er gibt „true“ (0) zurück, wenn die Liste der Operanden den ersten Operanden nicht enthält. Beispiel: „col NOT IN(x, y, z)“. Dies entspricht „(col<>x) AND (col<>y) AND (col<>z)“.
Ejemplo:
Die folgende Abfrage wählt Studierende mit IDs aus, die ungleich einer dieser IDs 2, 4, 6, 8 sind:
SELECT * FROM Students WHERE StudentId NOT IN(2, 4, 6, 8);
So
Für die vorherige Abfrage geben wir das genaue Ergebnis als folgende Abfrage aus, da sie gleichwertig sind:
SELECT * FROM Students WHERE (StudentId <> 2) AND (StudentId <> 4) AND (StudentId <> 6) AND (StudentId <> 8);
Liken:
Im obigen Screenshot:
Wir haben mehrere ungleiche Operatoren „<>“ verwendet, um eine Liste von Studenten zu erhalten, die ungleich einer der folgenden IDs sind: 2, 4, 6 oder 8. Diese Abfrage gibt alle anderen Studenten außer diesen IDs in der Liste zurück.
SQLite VORHANDEN
Die EXISTS-Operatoren nehmen keine Operanden an; sie nehmen nur eine SELECT-Klausel dahinter an. Der EXISTS-Operator gibt true (1) zurück, wenn die SELECT-Klausel irgendwelche Zeilen zurückgibt, und er gibt false (0) zurück, wenn die SELECT-Klausel überhaupt keine Zeilen zurückgibt.
Ejemplo:
Im folgenden Beispiel wählen wir den Namen der Abteilung aus, wenn die Abteilungs-ID in der Tabelle „Studenten“ vorhanden ist:
SELECT DepartmentName FROM Departments AS d WHERE EXISTS (SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId);
Dadurch erhalten Sie:
Es werden nur die drei Fachbereiche „IT“, „Physik“ und „Kunst“ zurückgegeben. Der Fachbereich „Mathematik“ wird nicht zurückgegeben, da es in diesem Fachbereich keine Studierenden gibt und die entsprechende Fachbereichs-ID daher nicht in der Studierendentabelle existiert. Aus diesem Grund wurde der Fachbereich „Mathematik“ vom EXISTS-Operator ignoriert.
SQLite NICHT
Reverses ist das Ergebnis des vorhergehenden Operators, der danach folgt. Zum Beispiel:
- NOT BETWEEN – Es wird „true“ zurückgegeben, wenn BETWEEN „false“ zurückgibt 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.
Ejemplo:
Im folgenden Beispiel verwenden wir den Operator NOT mit dem Operator EXISTS, um die Namen der Abteilungen 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 DepartmentName FROM Departments AS d WHERE NOT EXISTS (SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId);
Ausgang:
Es wird nur der Fachbereich „Mathematik“ zurückgegeben. Da es nur diesen einen Fachbereich gibt, existiert dieser nicht in der Studierendentabelle.
Begrenzen und Bestellen
SQLite Order
SQLite Die Reihenfolge 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:
- Zuerst 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, nach dem die Daten sortiert werden sollen. Dieser Ausdruck kann ein Spaltenname oder ein Ausdruck sein.
- Nach dem Ausdruck können Sie optional eine 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 angeben, indem Sie das „“ zwischeneinander verwenden.
Beispiel
Im folgenden Beispiel wählen wir alle Studierenden in absteigender Reihenfolge nach ihren Namen und dann in aufsteigender Reihenfolge nach dem Namen der Abteilung aus:
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;
Dadurch erhalten Sie:
- SQLite ordnet zunächst alle Studierenden nach ihrem Fachbereichsnamen in aufsteigender Reihenfolge
- Dann werden für jeden Abteilungsnamen alle Studenten unter diesem Abteilungsnamen in absteigender Reihenfolge nach ihren Namen angezeigt
SQLite Grenze:
Sie können die Anzahl der von Ihrer SQL-Abfrage zurückgegebenen Zeilen begrenzen, indem Sie die LIMIT-Klausel verwenden. Mit LIMIT 10 erhalten Sie beispielsweise nur 10 Zeilen und ignorieren alle anderen Zeilen.
In der LIMIT-Klausel können Sie mithilfe der OFFSET-Klausel eine bestimmte Anzahl von Zeilen ab einer bestimmten Position auswählen. Beispielsweise ignoriert „LIMIT 4 OFFSET 4“ die ersten vier Zeilen und gibt vier Zeilen ab der fünften Zeile zurück, also die Zeilen 4, 4, 5,6,7 und 8.
Beachten Sie, dass die OFFSET-Klausel optional ist. Sie können sie auch so schreiben: „LIMIT 4, 4“. Das Ergebnis ist dann exakt.
Ejemplo:
Im folgenden Beispiel geben wir mithilfe der Abfrage nur 3 Studenten zurück, beginnend mit der Studenten-ID 5:
SELECT * FROM Students LIMIT 4,3;
Dadurch erhalten Sie ab Zeile 5 nur drei Studenten. Sie erhalten also die Zeilen mit den Studenten-IDs 5, 6 und 7:
Duplikate entfernen
Wenn Ihre SQL-Abfrage doppelte Werte zurückgibt, können Sie das Schlüsselwort „DISTINCT“ verwenden, um diese Duplikate zu entfernen und nur eindeutige Werte zurückzugeben. Sie können nach dem Schlüsselwort „DISTINCT“ mehrere Spalten angeben.
Ejemplo:
Die folgende Abfrage gibt doppelte „Abteilungsnamenwerte“ zurück: Hier haben wir doppelte Werte mit den Namen IT, Physik und Kunst.
SELECT d.DepartmentName FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Dadurch erhalten Sie doppelte Werte für den Abteilungsnamen:
Beachten Sie, dass 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.DepartmentName FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Dadurch erhalten Sie nur drei eindeutige Werte für die Spalte „Abteilungsname“:
Aggregat
SQLite Aggregate sind integrierte Funktionen, die in definiert sind SQLite Dadurch werden mehrere Werte mehrerer Zeilen zu einem Wert zusammengefasst.
Hier sind die Aggregate, die von unterstützt werden SQLite:
SQLite AVG()
Gibt den Durchschnitt für alle x-Werte zurück.
Ejemplo:
Im folgenden Beispiel ermitteln wir die Durchschnittsnote aller Prüfungen, die die Schüler erreichen:
SELECT AVG(Mark) FROM Marks;
Dadurch erhalten Sie den Wert „18.375“:
Diese Ergebnisse ergeben sich aus der Summierung aller Markierungswerte dividiert durch ihre Anzahl.
COUNT() – COUNT(X) oder COUNT(*)
Gibt die Gesamtzahl der Vorkommen des x-Werts zurück. 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 ermittelt.
Beispiel
Im folgenden Beispiel ermitteln wir die Gesamtzahl der Abteilungen mit COUNT(DepartmentId), COUNT(*) und COUNT(DISTINCT DepartmentId) und zeigen, wie sie sich unterscheiden:
SELECT COUNT(DepartmentId), COUNT(DISTINCT DepartmentId), COUNT(*) FROM Students;
Dadurch erhalten Sie:
Wie folgt:
- COUNT(DepartmentId) gibt Ihnen die Anzahl aller Abteilungs-IDs und ignoriert die Nullwerte.
- COUNT(DISTINCT DepartmentId) gibt Ihnen unterschiedliche Werte von DepartmentId, die nur 3 sind. Das sind die drei verschiedenen Werte des Abteilungsnamens. Beachten Sie, dass der Name des Studenten 8 Werte für den Abteilungsnamen enthält. Aber nur die verschiedenen drei Werte: Mathematik, Informatik und Physik.
- COUNT(*) zählt die Anzahl der Zeilen in der Schülertabelle, also 10 Zeilen für 10 Schüler.
GROUP_CONCAT() – GROUP_CONCAT(X) oder GROUP_CONCAT(X,Y)
Die Aggregatfunktion GROUP_CONCAT verkettet mehrere Werte zu einem Wert und trennt sie durch Kommas. Sie bietet die folgenden Optionen:
- GROUP_CONCAT(X): Dadurch werden alle Werte von x in einer Zeichenfolge verkettet, wobei das Komma „“ als Trennzeichen zwischen den Werten verwendet wird. NULL-Werte werden ignoriert.
- GROUP_CONCAT(X, Y): Dadurch werden die Werte von x in 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 in einer Zeichenfolge verkettet, wobei das Komma „“ als Trennzeichen zwischen den Werten verwendet wird. NULL-Werte werden ignoriert.
Beispiel für GROUP_CONCAT(DepartmentName).
Die folgende Abfrage verkettet alle Werte des Abteilungsnamens aus der Studenten- und der Abteilungstabelle in einer durch Kommas getrennten Zeichenfolge. Anstatt also eine Liste von Werten zurückzugeben, einen Wert pro Zeile, wird nur ein Wert pro Zeile zurückgegeben, wobei alle Werte durch Kommas getrennt sind:
SELECT GROUP_CONCAT(d.DepartmentName) FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Dadurch erhalten Sie:
Dadurch erhalten Sie eine Liste mit acht Abteilungsnamenwerten, die in einer durch Kommas getrennten Zeichenfolge verkettet sind.
Beispiel für GROUP_CONCAT(DISTINCT DepartmentName).
Die folgende Abfrage verkettet die unterschiedlichen Werte des Abteilungsnamens aus den Tabellen „Studenten“ und „Abteilungen“ zu einer durch Kommas getrennten Zeichenfolge:
SELECT GROUP_CONCAT(DISTINCT d.DepartmentName) FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Dadurch erhalten Sie:
Beachten Sie, dass sich das Ergebnis vom vorherigen Ergebnis unterscheidet. Es wurden nur drei Werte zurückgegeben, bei denen es sich um die Namen der unterschiedlichen Abteilungen handelt, und die doppelten Werte wurden entfernt.
GROUP_CONCAT(DepartmentName ,'&') Beispiel
Die folgende Abfrage verkettet alle Werte der Spalte „Abteilungsname“ aus der Tabelle „Studenten und Abteilungen“ zu einem String, verwendet jedoch als Trennzeichen das Zeichen „&“ anstelle eines Kommas:
SELECT GROUP_CONCAT(d.DepartmentName, '&') FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Dadurch erhalten Sie:
Beachten Sie, dass das Zeichen „&“ anstelle des Standardzeichens „“ verwendet wird, um die Werte zu trennen.
SQLite MAX MIN()
MAX(X) gibt Ihnen den höchsten Wert der X-Werte zurück. MAX gibt einen NULL-Wert zurück, wenn alle Werte von x null sind. Wohingegen MIN(X) Ihnen den kleinsten Wert der X-Werte 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 Punktzahl aus der Tabelle „Noten“ zu ermitteln:
SELECT MAX(Mark), MIN(Mark) FROM Marks;
Dadurch erhalten Sie:
SQLite SUMME(x), Gesamt(x)
Beide geben die Summe aller x-Werte zurück. Sie unterscheiden sich jedoch in Folgendem:
- 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 SUMME und GESAMTSUMME, um die Summe aller Noten in den Tabellen „Noten“ zu erhalten:
SELECT SUM(Mark), TOTAL(Mark) FROM Marks;
Dadurch erhalten Sie:
Wie Sie sehen, gibt TOTAL immer einen Gleitkommawert zurück. SUM gibt jedoch einen ganzzahligen Wert zurück, da die Werte in der Spalte „Mark“ möglicherweise ganze Zahlen sind.
Unterschied zwischen SUM und TOTAL Beispiel:
In der folgenden Abfrage zeigen wir den Unterschied zwischen SUM und TOTAL, wenn sie die SUMME von NULL-Werten erhalten:
SELECT SUM(Mark), TOTAL(Mark) FROM Marks WHERE TestId = 4;
Dadurch erhalten Sie:
Beachten Sie, dass es für TestId = 4 keine Markierungen gibt, 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 den gleichen Werten werden in Gruppen zusammengefasst (angeordnet).
Für jede andere Spalte, die nicht in der Gruppierung nach Spalten enthalten ist, können Sie eine Aggregatfunktion dafür verwenden.
Ejemplo:
Die folgende Abfrage gibt Ihnen die Gesamtzahl der in jeder Abteilung anwesenden Studierenden an.
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;
Dadurch erhalten Sie:
Die GROUPBY DepartmentName-Klausel gruppiert alle Studenten in Gruppen, eine für jeden Abteilungsnamen. Für jede Gruppe der „Abteilung“ werden die darin enthaltenen Studenten 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 zum Filtern dieser Gruppen verwendet.
Beispiel
In der folgenden Abfrage wählen wir die Fachbereiche aus, in denen es nur zwei Studierende gibt:
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;
Dadurch erhalten Sie:
Die Klausel HAVING COUNT(S.StudentId) = 2 filtert die zurückgegebenen Gruppen und gibt nur die Gruppen zurück, die genau zwei Studenten enthalten. In unserem Fall hat die Kunstabteilung 2 Studenten, daher wird dies in der Ausgabe angezeigt.
SQLite Abfrage und Unterabfrage
Innerhalb jeder Abfrage können Sie eine andere Abfrage entweder in einer SELECT-, INSERT-, DELETE-, UPDATE- oder 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 Tutorial zum Ändern von Daten werden wir jedoch sehen, wie wir Unterabfragen mit INSERT-, DELETE- und UPDATE-Anweisungen verwenden können.
Verwendung einer Unterabfrage im Beispiel der FROM-Klausel
In der folgenden Abfrage fügen wir eine Unterabfrage in die FROM-Klausel ein:
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;
Die Abfrage:
SELECT StudentId, Mark FROM Tests AS t INNER JOIN Marks 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 in der Abfrage auf die von ihm zurückgegebenen Spalten verweisen können.
Diese Abfrage gibt Ihnen Folgendes:
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 die Noten an, die jeder dieser Schüler erhalten hat
Verwendung einer Unterabfrage im Beispiel der WHERE-Klausel
In der folgenden Abfrage werden wir eine Unterabfrage in die WHERE-Klausel aufnehmen:
SELECT DepartmentName FROM Departments AS d WHERE NOT EXISTS (SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId);
Die Abfrage:
SELECT DepartmentId FROM Students AS s WHERE 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 Folgendes:
In der obigen Abfrage haben wir die Fakultät ausgewählt, in der kein Student eingeschrieben ist. Das ist hier die Abteilung „Mathe“.
Stelle den Operationen – UNION,Intersect
SQLite unterstützt die folgenden SET-Operationen:
UNION & UNION ALLE
Es kombiniert eine oder mehrere Ergebnismengen (eine Gruppe von Zeilen), die von mehreren SELECT-Anweisungen zurückgegeben werden, in einer Ergebnismenge.
UNION gibt unterschiedliche Werte zurück. Allerdings wird UNION ALL keine Duplikate enthalten und wird dies auch tun.
Beachten Sie, dass der Spaltenname der in der ersten SELECT-Anweisung angegebene Spaltenname ist.
UNION-Beispiel
Im folgenden Beispiel erhalten wir die Liste der DepartmentIds aus der Tabelle „Students“ und die Liste der DepartmentIds aus der Tabelle „Departments“ in derselben Spalte:
SELECT DepartmentId AS DepartmentIdUnioned FROM Students UNION SELECT DepartmentId FROM Departments;
Dadurch erhalten Sie:
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 DepartmentIds aus der Tabelle „Students“ und die Liste der DepartmentIds aus der Tabelle „Departments“ in derselben Spalte:
SELECT DepartmentId AS DepartmentIdUnioned FROM Students UNION ALL SELECT DepartmentId FROM Departments;
Dadurch erhalten Sie:
Die Abfrage gibt 14 Zeilen zurück, 10 Zeilen aus der Tabelle „Studenten“ und 4 aus der Tabelle „Abteilungen“. Beachten Sie, dass die zurückgegebenen Werte Duplikate enthalten. Beachten Sie außerdem, dass der Spaltenname derjenige war, der in der ersten SELECT-Anweisung angegeben wurde.
Sehen wir uns nun an, 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 beiden Tabellen „Students“ und „Departments“ in der Spalte „DepartmentId“ vorhanden sind:
SELECT DepartmentId FROM Students Intersect SELECT DepartmentId FROM Departments;
Dadurch erhalten Sie:
Die Abfrage gibt nur drei Werte zurück: 1, 2 und 3. Das sind die Werte, die in beiden Tabellen vorhanden sind.
Die Werte Null und 4 wurden jedoch nicht berücksichtigt, da der Nullwert nur in der Tabelle „Studenten“ und nicht in der Tabelle „Abteilungen“ vorhanden ist. Und der Wert 4 existiert in der Abteilungstabelle und nicht in der Studententabelle.
Aus diesem Grund wurden die beiden Werte NULL und 4 ignoriert und nicht in die zurückgegebenen Werte einbezogen.
AUSSER
Angenommen, Sie haben zwei Listen mit Zeilen, list1 und list2, und Sie möchten nur die Zeilen aus list1, die in list2 nicht vorhanden sind. Dann können Sie die Klausel „EXCEPT“ verwenden. Die Klausel EXCEPT vergleicht die beiden Listen und gibt die Zeilen zurück, die in list1 vorhanden, aber in list2 nicht vorhanden sind.
Beispiel
In der folgenden Abfrage wählen wir die DepartmentId-Werte aus, die in der Tabelle „Departments“ vorhanden sind, in der Tabelle „Students“ jedoch nicht:
SELECT DepartmentId FROM Departments EXCEPT SELECT DepartmentId FROM Students;
Dadurch erhalten Sie:
Die Abfrage gibt nur den Wert 4 zurück. Dies ist der einzige Wert, der in der Abteilungstabelle vorhanden ist und in der Studententabelle nicht vorhanden ist.
NULL-Behandlung
Der Wert „NULL“ ist ein Sonderwert in SQLiteEs dient zur Darstellung eines unbekannten oder fehlenden Wertes. Beachten Sie, dass ein Nullwert etwas völlig anderes ist als „0“ oder ein leerer Wert. Denn 0 und der leere Wert sind bekannte Werte, der Nullwert hingegen ist unbekannt.
NULL-Werte erfordern eine besondere Behandlung SQLite, wir werden nun sehen, wie mit den NULL-Werten umgegangen wird.
Suchen Sie nach NULL-Werten
Sie können den normalen Gleichheitsoperator (=) nicht verwenden, um nach Nullwerten zu suchen. Die folgende Abfrage sucht beispielsweise nach den Studenten, deren DepartmentId-Wert Null ist:
SELECT * FROM Students WHERE DepartmentId = NULL;
Diese Abfrage liefert kein Ergebnis:
Da der NULL-Wert keinem anderen Wert entspricht, einschließlich eines Nullwerts selbst, wurde kein Ergebnis zurückgegeben.
Damit die Abfrage funktioniert, müssen Sie jedoch den Operator „IS NULL“ verwenden, um nach Nullwerten zu suchen, wie folgt:
SELECT * FROM Students WHERE DepartmentId IS NULL;
Dadurch erhalten Sie:
Die Abfrage gibt die Studenten zurück, die einen DepartmentId-Wert von Null haben.
Wenn Sie die Werte erhalten möchten, die nicht null sind, müssen Sie den Operator „IS NOT NULL“ wie folgt verwenden:
SELECT * FROM Students WHERE DepartmentId IS NOT NULL;
Dadurch erhalten Sie:
Die Abfrage gibt diejenigen Studenten zurück, die keinen NULL-DepartmentId-Wert haben.
Bedingte Ergebnisse
Wenn Sie eine Liste mit Werten haben und einen davon basierend auf bestimmten Bedingungen auswählen möchten. Dazu muss 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 wahr 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 dazu den CASE-Ausdruck verwenden.
Dies kann verwendet werden, um eine gewisse Logik in der SELECT-Klausel zu definieren, sodass Sie bestimmte Ergebnisse abhängig von bestimmten Bedingungen auswählen können, z. B. einer if-Anweisung.
Der CASE-Operator kann mit verschiedenen Syntaxen wie folgt definiert werden:
Sie können verschiedene Bedingungen verwenden:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 WHEN condition3 THEN result3 … ELSE resultn END
Oder Sie können nur einen Ausdruck verwenden und verschiedene mögliche Werte zur Auswahl angeben:
CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 WHEN value3 THEN result3 … ELSE restuln END
Beachten Sie, dass die ELSE-Klausel optional ist.
Beispiel
Im folgenden Beispiel verwenden wir den CASE-Ausdruck mit dem Wert NULL in der Spalte „department Id“ der Tabelle „Students“, um den Text „Keine Abteilung“ wie folgt anzuzeigen:
SELECT StudentName, CASE WHEN DepartmentId IS NULL THEN 'No Department' ELSE DepartmentId END AS DepartmentId FROM Students;
- 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 unten gezeigte Ausgabe:
Gemeinsamer Tabellenausdruck
Common Table Expressions (CTEs) sind Unterabfragen, die innerhalb der SQL-Anweisung mit einem bestimmten Namen definiert werden.
Sie hat gegenüber den Unterabfragen den Vorteil, dass sie aus den SQL-Anweisungen definiert wird und die Abfragen einfacher zu lesen, zu warten und zu verstehen macht.
Ein allgemeiner Tabellenausdruck kann definiert werden, indem man die WITH-Klausel wie folgt vor eine SELECT-Anweisung setzt:
WITH CTEname AS ( SELECT statement ) SELECT, UPDATE, INSERT, or update statement here FROM CTE
Der „CTE-Name“ ist ein beliebiger Name, den Sie der CTE geben können; Sie können ihn später verwenden, um darauf zu verweisen. Beachten Sie, dass Sie SELECT-, UPDATE-, INSERT- oder DELETE-Anweisungen für CTEs definieren können.
Sehen 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:
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;
In dieser Abfrage haben wir eine CTE definiert und ihr den Namen „AllDepartments“ gegeben. Diese CTE wurde aus einer SELECT-Abfrage definiert:
SELECT DepartmentId, DepartmentName FROM Departments
Nachdem wir den CTE definiert hatten, verwendeten wir ihn in der darauf folgenden SELECT-Abfrage.
Beachten Sie, dass allgemeine Tabellenausdrücke keinen Einfluss auf die Ausgabe der Abfrage haben. Es ist eine Möglichkeit, eine logische Ansicht oder Unterabfrage zu definieren, um sie in derselben Abfrage wiederzuverwenden. Gängige 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 Folgendes:
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 Studierenden für jede Abteilung
- Die Namen der Schüler werden durch Komma und getrennt
- Zeigt, dass die Fakultät mindestens drei Studierende hat
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;
Wir haben eine JOIN-Klausel hinzugefügt, um den DepartmentName aus der Tabelle Departments abzurufen. Anschließend haben wir eine GROUP BY-Klausel mit zwei Aggregatfunktionen hinzugefügt:
- „ZÄHLEN“, um die Studenten für jede Abteilungsgruppe zu zählen.
- GROUP_CONCAT, um Schüler für jede Gruppe durch Kommas getrennt in einer Zeichenfolge zu verketten.
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 wird wie folgt aussehen:




















































