SQLite Abfrage: Auswählen, Wo, LIMIT, OFFSET, Anzahl, Gruppieren nach

Um SQL-Abfragen in eine zu schreiben 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

  1. Öffnen Sie „Arbeitsplatz“ und navigieren Sie zum folgenden Verzeichnis „C:\sqlite" und
  2. Dann öffnen Sie „sqlite3.exe"

Daten mit Select lesen

Schritt 2) Öffnen Sie die Datenbank“TutorialsSampleDB.db“ durch den folgenden Befehl:

Daten mit Select lesen

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:

Daten mit Select lesen

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:

Daten mit Select lesen

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:

Daten mit Select lesen

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:

Namen und Alias

Beachten Sie, dass der Spaltenname immer noch „Name des Studenten„; 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 es eingeben, etwa so:

SELECT StudentName 'Student Name' FROM Students;

Und Sie erhalten genau die gleiche Ausgabe wie bei der vorherigen Abfrage:

Namen und Alias

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“:

Namen und Alias

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:

Namen und Alias

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 „Studenten“ einen Alias ​​„s“ und der Tabelle „Abteilungen“ einen Alias ​​„d“ gegeben.
  • Anstatt den vollständigen Namen der Tabelle zu verwenden, haben wir dann deren Aliase verwendet, um auf sie zu verweisen.
  • INNER JOIN verbindet zwei oder mehr Tabellen mithilfe einer Bedingung. In unserem Beispiel haben wir die Tabelle „Studenten“ mit der Tabelle „Abteilungen“ und der Spalte „DepartmentId“ verbunden. Eine ausführliche Erklärung zum INNER JOIN gibt es auch im „SQLite Joins“-Tutorial.

Dadurch erhalten Sie die exakte Ausgabe wie bei der vorherigen Abfrage:

Namen und Alias

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 wird verwendet, um die von zurückgegebene Ergebnismenge zu filtern SQL-Abfrage. 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 ​​verkettet „StudentIdWithName"

  • Der literale Zeichenfolgenwert „ID mit Name: "
  • mit dem Wert des „Studenten ID” Spalte und
  • mit dem Wert von „Name des Studenten" Spalte

SQLite der Verkettungsoperator '||'

SQLite CAST-Operator:

Der CAST-Operator wird verwendet, um einen Wert von einem Datentyp in einen anderen zu konvertieren Datentyp.

Wenn Sie beispielsweise einen numerischen Wert wie diesen als Zeichenfolgewert gespeichert haben: '12.5' ” und Sie möchten es in einen numerischen Wert umwandeln, 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 Ganzzahl wie diesen „CAST(12.5 AS INTEGER)“ 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:

SQLite CAST OperaDo.

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:

  • Zusatz „+„“ – Geben Sie die Summe der beiden Operanden an.
  • Subtraktion“-„“ – subtrahiert die beiden Operanden und ergibt die Differenz.
  • Multiplikation“*„“ – das Produkt der beiden Operanden.
  • Erinnerung (modulo)“%„“ – gibt den Rest an, der sich aus der Division eines Operanden durch den zweiten Operanden ergibt.
  • Aufteilung "/„“ – gibt den Quotienten zurück, der sich aus der Division des linken Operanden durch den rechten Operanden ergibt.

Beispiel:

Im folgenden Beispiel werden wir die fünf arithmetischen Operatoren mit literalen numerischen Werten in derselben

select-Klausel:

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

Dadurch erhalten Sie:

SQLite Arithmetik Operatoren

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.
  • "=" und "==” – gibt true zurück, wenn die beiden Operanden gleich sind. Beachten Sie, dass beide Operatoren gleich sind und es keinen Unterschied zwischen ihnen gibt.
  • "!=" und "<>” – gibt true zurück, wenn die beiden Operanden nicht gleich sind. Beachten Sie, dass beide Operatoren gleich sind und es keinen Unterschied zwischen ihnen gibt.

Beachten Sie, dass, SQLite drückt den wahren Wert mit 1 und den falschen Wert mit 0 aus.

Beispiel:

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 Vergleich Operatoren

SQLite Mustervergleichsoperatoren

"LIKE” – wird für den Mustervergleich verwendet. Mit „Like„können Sie nach Werten suchen, die einem mit einem Platzhalter 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 Muster. Zum Beispiel, Studentenname LIKE '%a%' – Dadurch wird nach den Namen der Studenten gesucht, die den Buchstaben „a“ an einer beliebigen Position in der Spalte „StudentName“ enthalten.
  • Beginnt mit dem Muster. Zum Beispiel, "Studentenname LIKE 'a%'” – Suchen Sie nach den Namen der Schüler, die mit dem Buchstaben „a“ beginnen.
  • Endet mit dem Muster. Zum Beispiel, "Studentenname LIKE '%a'” – Suchen Sie nach den Namen der Schüler, die mit dem Buchstaben „a“ enden.
  • Übereinstimmung eines beliebigen einzelnen Zeichens in einer Zeichenfolge mit dem Unterstrichbuchstaben „_“. Zum Beispiel, "Studentenname 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 beliebige weitere Zeichen enthalten.

Beispiele für Mustervergleiche:

  1. Rufen Sie Schülernamen ab, die mit dem Buchstaben „j“ beginnen:
    SELECT StudentName FROM Students WHERE StudentName LIKE 'j%';

    Ergebnis:

    SQLite Musterabgleich Operatoren

  2. Rufen Sie ab, dass die Namen der Schüler mit dem Buchstaben „y“ enden:
    SELECT StudentName FROM Students WHERE StudentName LIKE '%y';

    Ergebnis:

    SQLite Musterabgleich Operatoren

  3. Rufen Sie die Namen der Schüler ab, die den Buchstaben „n“ enthalten:
    SELECT StudentName FROM Students WHERE StudentName LIKE '%n%';

    Ergebnis:

    SQLite Musterabgleich Operatoren

„GLOB“ – ist äquivalent zum LIKE-Operator, aber GLOB ist im Gegensatz zum LIKE-Operator case-sensitiv. Die folgenden beiden Befehle geben beispielsweise unterschiedliche Ergebnisse zurück:

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

Dadurch erhalten Sie:

SQLite Musterabgleich Operatoren

  • 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.

Beispiel:

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%');

SQLite UND OperaDo.

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.

Beispiel:

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:

SQLite OR OperaDo.

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 BETWEEN werden diejenigen Werte ausgewählt, die innerhalb eines Bereichs von zwei Werten liegen. Zum Beispiel, "X ZWISCHEN Y UND Z„“ gibt 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" ist äquivalent zu "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 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 ZWISCHEN OperaDo.

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 was: "Spalte IN(x, y, z)„. Dies entspricht „ (col=x) oder (col=y) oder (col=z) ".

Beispiel:

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:

SQLite IN OperaDo.

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. Der „WHERE StudentId IN(2, 4, 6, 8)" ist äquivalent zu " WHERE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8);"

Liken:

SQLite IN OperaDo.

SQLite NICHT IN

Der Operand „NOT IN“ ist das Gegenteil des IN-Operators. Aber mit derselben Syntax; er nimmt einen Operanden und eine Liste von Operanden. Er gibt „true“ zurück, wenn der erste Operandenwert nicht gleich einem der Operandenwerte aus der Liste ist. Das heißt, er gibt „true“ (0) zurück, wenn die Liste der Operanden den ersten Operanden nicht enthält. So: „col NOT IN(x, y, z)„. Dies entspricht „(col<>x) AND (col<>y) AND (col<>z)".

Beispiel:

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

SQLite NICHT IN OperaDo.

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:

SQLite NICHT IN OperaDo.

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.

Beispiel:

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:

SQLite VORHANDEN OperaDo.

Nur die drei Abteilungen“IT, Physik und Kunst" Wird zurückgegeben. Und der Abteilungsname „Mathe” wird nicht zurückgegeben, da es in dieser Abteilung keinen Studenten gibt und die Abteilungs-ID daher in der Studententabelle nicht vorhanden ist. Aus diesem Grund ignorierte der EXISTS-Operator das „Mathe" Abteilung.

SQLite NICHT

Reversetzt das Ergebnis des vorhergehenden Operators, der danach kommt. 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.

Beispiel:

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:

SQLite NICHT OperaDo.

Nur die Abteilung „Mathe " Wird zurückgegeben. Weil das "Mathe„Abteilung“ ist die einzige Abteilung, die in der Studententabelle nicht vorhanden ist.

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:

Begrenzen und Bestellen

  • 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. Zum Beispiel, "LIMIT 4 OFFSET 4„ignoriert die ersten 4 Zeilen und gibt ab der fünften Zeile 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 folgt schreiben:LIMIT 4, 4” und Sie erhalten die genauen Ergebnisse.

Beispiel:

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:

Begrenzen und Bestellen

Duplikate entfernen

Wenn Ihre SQL-Abfrage doppelte Werte zurückgibt, können Sie „DISTINCT”-Schlüsselwort, um diese Duplikate zu entfernen und unterschiedliche Werte zurückzugeben. Sie können nach der DISTINCT-Schlüsselarbeit 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.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Dadurch erhalten Sie doppelte Werte für den Abteilungsnamen:

Duplikate entfernen

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“:

Duplikate entfernen

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.

Beispiel:

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“:

Aggregat:SQLite AVG()

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:

Aggregate:COUNT() – COUNT(X) oder COUNT(*)

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:

Aggregat:GROUP_CONCAT() – GROUP_CONCAT(X) oder GROUP_CONCAT(X,Y)

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:

Aggregate:GROUP_CONCAT(DISTINCT DepartmentName) Beispiel

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:

Aggregate:GROUP_CONCAT(DepartmentName ,'&') Beispiel

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 Note aus dem „Markierungen" Tisch:

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

Dadurch erhalten Sie:

Aggregat:SQLite MAX MIN()

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 SUM und total, um die Summe aller Markierungen im „Markierungen” Tabellen:

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

Dadurch erhalten Sie:

Aggregat:SQLite SUMME(x), Gesamt(x)

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:

Aggregat:Differenz zwischen SUM und TOTAL Beispiel

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.

Beispiel:

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:

Group BY:HAVING-Klausel

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:

Gruppiere nach

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:

SQLite Abfrage und Unterabfrage: Verwendung einer Unterabfrage in der FROM-Klausel

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:

SQLite Abfrage und Unterabfrage: Unterabfrage in der WHERE-Klausel verwenden

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:

Stelle den  Operationen - UNION-Beispiel

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:

Stelle den  Operationen - UNION-Beispiel

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:

Stelle den  Operationen - INTERSECT

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:

Stelle den  Operationen - AUSSER

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

Das "NULL„Wert ist ein besonderer Wert in SQLite. Es wird verwendet, um einen unbekannten oder fehlenden Wert darzustellen. Beachten Sie, dass der Nullwert völlig anders ist als „0” oder leerer „“-Wert. Da 0 und der Leerwert jedoch ein bekannter Wert sind, ist der Nullwert 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:

NULL-Behandlung

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 die verwenden "IST NULL" Operator zum Suchen nach Nullwerten wie folgt:
SELECT * FROM Students WHERE DepartmentId IS NULL;

Dadurch erhalten Sie:

NULL-Behandlung

Die Abfrage gibt die Studenten zurück, die einen DepartmentId-Wert von Null haben.

  • Wenn Sie Werte erhalten möchten, die nicht null sind, müssen Sie „IST NICHT NULL“-Operator wie folgt:
SELECT * FROM Students WHERE DepartmentId IS NOT NULL;

Dadurch erhalten Sie:

NULL-Behandlung

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:

  1. Sie können verschiedene Bedingungen verwenden:
CASE 
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  WHEN condition3 THEN result3
  …
  ELSE resultn
END
  1. 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 die CASE Ausdruck mit NULL Wert in der Spalte „Abteilungs-ID“ in der Tabelle „Studenten“, 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:

Bedingte Ergebnisse

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

Das "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 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 einen CTE definiert und ihm den Namen „Alle Abteilungen„. Dieser 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:

Gemeinsamer Tabellenausdruck

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 ein hinzugefügt JOIN -Klausel, um den DepartmentName aus der Departments-Tabelle abzurufen. Danach 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:

Erweiterte Abfragen

Zusammenfassung

Dies war eine Einführung in das Schreiben SQLite Abfragen und die Grundlagen der Datenbankabfrage und wie Sie die zurückgegebenen Daten filtern können. Sie können jetzt Ihr eigenes schreiben SQLite Abfragen.