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

Um SQL-Abfragen in einer SQLite-Datenbank zu schreiben, 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 erfahren Sie, wie Sie diese Klauseln verwenden und wie Sie SQLite-Klauseln schreiben.

Daten mit Select lesen

Die SELECT-Klausel ist die Hauptanweisung, die Sie zum Abfragen einer SQLite-Datenbank verwenden. 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.

Die FROM-Klausel wird verwendet, um anzugeben, wo Sie Daten auswählen möchten. Wie wir sehen werden, können Sie in der from-Klausel eine oder mehrere Tabellen oder Unterabfragen angeben, aus denen die Daten ausgewählt werden sollen later zu den Tutorials.

Beachten Sie das für alle folgendenwing Beispiele: Sie müssen sqlite3.exe ausführen und eine Verbindung zur Beispieldatenbank als flo herstellenwing:

Schritt 1) In diesem Schritt

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

Daten mit Select lesen

Schritt 2) Öffnen Sie die Datenbank“TutorialsSampleDB.db” von den folgendenwing 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 haben auch viele andere Optionen, um anzugeben, was ausgewählt werden soll. Wie folgtwing:

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 auf die gleiche Weise 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 verbinden. Anstatt den vollständigen Tabellennamen in der Abfrage zu wiederholen, können Sie jeder Tabelle einen kurzen Aliasnamen geben. Zum Beispiel im Folgendenwing Abfrage:

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 Tutorial „SQLite Joins“.

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 mithilfe der WHERE-Klausel zu filtern, müssen Sie Ausdrücke und Operatoren verwenden.

Liste der Operatoren in SQLite und deren Verwendung

Im Folgendenwing Im Abschnitt erklären wir, 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.

Im Folgendenwing Beispiele 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 Ergebniszeichenfolge aus allen verketteten Literalwerten oder Spalten erstellt. Zum 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 umzuwandeln Datentyp.

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

Beispiel

Im Folgendenwing Befehl werden wir versuchen, 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-Operator

Das Ergebnis ist wie folgtwing:

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

Arithmetische SQLite-Operatoren:

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:

  • 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 die Quotientenergebnisse aus der Division des linken Operanden durch den rechten Operanden zurück.

Beispiel:

Im Folgendenwing Als Beispiel werden wir die fünf arithmetischen Operatoren mit literalen numerischen Werten ausprobieren

select-Klausel:

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

Dadurch erhalten Sie:

Arithmetische SQLite-Operatoren

Beachten Sie, dass wir hier eine SELECT-Anweisung ohne FROM-Klausel verwendet haben. Und das ist in SQLite erlaubt, solange wir Literalwerte auswählen.

SQLite-Vergleichsoperatoren

Vergleichen Sie zwei Operanden miteinander und geben Sie wie folgt ein Wahr oder Falsch 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 den wahren Wert mit 1 und den falschen Wert mit 0 ausdrückt.

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-Vergleichsoperatoren

SQLite-Pattern-Matching-Operatoren

"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 String-Literalwert oder eine String-Spalte 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-Mustervergleichsoperatoren

  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-Mustervergleichsoperatoren

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

    Ergebnis:

    SQLite-Mustervergleichsoperatoren

„GLOB“ – entspricht dem LIKE-Operator, bei GLOB wird jedoch im Gegensatz zum LIKE-Operator die Groß-/Kleinschreibung beachtet. Zum Beispiel das Following Zwei Befehle liefern unterschiedliche Ergebnisse:

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

Dadurch erhalten Sie:

SQLite-Mustervergleichsoperatoren

  • Die erste Anweisung gibt 0(false) zurück, da beim GLOB-Operator die Groß-/Kleinschreibung beachtet wird, sodass „j“ nicht gleich „J“ ist. Die zweite Anweisung gibt jedoch 1 (wahr) zurück, da beim LIKE-Operator die Groß-/Kleinschreibung nicht beachtet wird, sodass „j“ gleich „J“ ist.

Andere Betreiber:

SQLite UND

Ein logischer Operator, der einen oder mehrere Ausdrücke kombiniert. Es wird nur dann „true“ zurückgegeben, wenn alle Ausdrücke einen „wahren“ Wert ergeben. Allerdings wird nur dann „falsch“ zurückgegeben, wenn alle Ausdrücke einen „falschen“ Wert ergeben.

Beispiel:

Die folgendenwing Die Abfrage sucht nach Studenten, deren StudentId > 5 ist und deren StudentName mit dem Buchstaben N beginnt. Die zurückgegebenen Studenten müssen die beiden Bedingungen erfüllen:

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

SQLite-AND-Operator

Als Ausgabe erhalten Sie im obigen Screenshot nur „Nancy“. Nancy ist die einzige Studentin, die beide Bedingungen erfüllt.

SQLite ODER

Ein logischer Operator, der einen oder mehrere Ausdrücke kombiniert, sodass einer der kombinierten Operatoren, wenn er „true“ ergibt, „true“ zurückgibt. Wenn jedoch alle Ausdrücke „false“ ergeben, wird „false“ zurückgegeben.

Beispiel:

Die folgendenwing Die Abfrage sucht nach Studenten, deren StudentId > 5 ist oder deren StudentName mit dem Buchstaben N beginnt. Die zurückgegebenen Studenten müssen mindestens eine der folgenden Bedingungen erfüllen:

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

Dadurch erhalten Sie:

SQLite OR-Operator

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 dem 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. Sonstigeswise, es wird false (0) zurückgeben. „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:

Im Folgendenwing Beispielabfrage: Wir schreiben eine Abfrage, um Schüler mit einem ID-Wert zwischen 5 und 8 zu erhalten:

SELECT *
FROM Students
WHERE StudentId BETWEEN 5 AND 8;

Dadurch erhalten nur die Schüler mit den IDs 5, 6, 7 und 8:

SQLite BETWEEN-Operator

SQLite IN

Akzeptiert 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 Operandenliste den ersten Operandenwert innerhalb ihrer Werte enthält. Anderewise, es wird false (0) zurückgeben.

So was: "Spalte IN(x, y, z)„. Dies entspricht „ (col=x) oder (col=y) oder (col=z) ".

Beispiel:

Die folgendenwing Die Abfrage wählt nur Schüler mit den IDs 2, 4, 6, 8 aus:

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

Liken:

SQLite IN-Operator

Die vorherige Abfrage liefert das genaue Ergebnis wie folgtwing Abfrage, weil sie gleichwertig sind:

SELECT * 
FROM Students
WHERE (StudentId = 2) OR (StudentId =  4) OR (StudentId =  6) OR (StudentId = 8);

Beide Abfragen liefern die genaue Ausgabe. Der Unterschied zwischen den beiden Abfragen besteht jedoch darin, dass wir bei der ersten Abfrage den „IN“-Operator verwendet haben. In 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-Operator

SQLite NICHT IN

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

Beispiel:

Die folgendenwing Die Abfrage wählt Schüler aus, deren IDs nicht mit einer dieser IDs 2, 4, 6, 8 übereinstimmen:

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

So

SQLite NOT IN-Operator

Bei der vorherigen Abfrage geben wir das genaue Ergebnis wie folgt anwing Abfrage, weil sie gleichwertig sind:

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

Liken:

SQLite NOT IN-Operator

Im obigen Screenshot:

Wir haben mehrere Ungleichheitsoperatoren „<>“ verwendet, um eine Liste von Schülern zu erhalten, die keinem der folgenden gleich sindwing IDs 2, 4, 6 oder 8. Diese Abfrage gibt alle anderen Schüler außer dieser ID-Liste zurück.

SQLite EXISTIERT

Die EXISTS-Operatoren akzeptieren keine Operanden; Es folgt nur eine SELECT-Klausel. Der EXISTS-Operator gibt true (1) zurück, wenn von der SELECT-Klausel Zeilen zurückgegeben werden, und er gibt false (0) zurück, wenn von der SELECT-Klausel überhaupt keine Zeilen zurückgegeben werden.

Beispiel:

Im Folgendenwing Beispiel: Wir wählen den Namen der Abteilung aus, wenn die Abteilungs-ID in der Studententabelle 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 EXISTS-Operator

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 nicht in der Studententabelle vorhanden ist. Deshalb ignorierte der EXISTS-Operator das „Mathe" Abteilung.

SQLite NICHT

Kehrt das Ergebnis des vorhergehenden Operators um, der darauf 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.

Beispiel:

Im Folgendenwing Beispielsweise verwenden wir den NOT-Operator mit dem EXISTS-Operator, um die Namen der Abteilungen abzurufen, die in der Tabelle „Studenten“ nicht vorhanden sind. Dies ist das umgekehrte Ergebnis des EXISTS-Operators. Die Suche erfolgt also über DepartmentId, die nicht in der Abteilungstabelle vorhanden ist.

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

Output:

SQLite NOT-Operator

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-Reihenfolge

SQLite Order dient dazu, 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 Folgendenwing Beispiel: Wir wählen alle Studenten aus, sortiert nach ihren Namen, aber in absteigender Reihenfolge, dann nach dem Abteilungsnamen in aufsteigender Reihenfolge:

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 sortiert zunächst alle Studierenden nach ihrem Fachbereichsnamen in aufsteigender Reihenfolge
  • Dann werden für jeden Abteilungsnamen alle Studierenden unter diesem Abteilungsnamen in absteigender Reihenfolge nach Namen angezeigt

SQLite-Limit:

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 Folgendenwing Beispiel: Wir geben mit 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 folgendenwing Die Abfrage gibt doppelte „Werte für Abteilungsnamen“ 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 in SQLite definierte integrierte Funktionen, die mehrere Werte mehrerer Zeilen in einem Wert gruppieren.

Hier sind die von SQLite unterstützten Aggregate:

SQLite AVG()

Gibt den Durchschnitt für alle x-Werte zurück.

Beispiel:

Im Folgendenwing Als Beispiel erhalten wir die Durchschnittsnote, die die Schüler bei allen Prüfungen erhalten:

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 Folgendenwing Beispiel: Wir erhalten 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;

Dadurch erhalten Sie:

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

Wie folgtwing:

  • 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 mit einem Komma, um sie zu trennen. Es hat folgendeswing 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 folgendenwing Die Abfrage verkettet alle Werte des Abteilungsnamens aus der Tabelle „Studenten“ und „Abteilungen“ in einer durch Kommas getrennten Zeichenfolge. Anstatt also eine Werteliste 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)
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 folgendenwing Die Abfrage verkettet die unterschiedlichen Werte des Abteilungsnamens aus der Tabelle „Studenten und Abteilungen“ in 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 folgendenwing Die Abfrage verkettet alle Werte der Spalte „Abteilungsname“ aus der Tabelle „Studenten und Abteilungen“ in einer Zeichenfolge, jedoch mit dem Zeichen „&“ anstelle eines Kommas als Trennzeichen:

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

Im Folgendenwing Abfrage verwenden wir die Funktionen MIN und MAX, um die höchste und die niedrigste Note aus der „Markierungen" Tisch:

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

Dadurch erhalten Sie:

Aggregat:SQLite MAX() & MIN()

SQLite SUM(x), Total(x)

Beide geben die Summe aller x-Werte zurück. Aber sie unterscheiden sich im Folgendenwing:

  • 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

Im Folgendenwing Abfrage verwenden wir SUM und total, um die Summe aller Markierungen in der „Markierungen” Tabellen:

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

Dadurch erhalten Sie:

Aggregat:SQLite SUM(x), Total(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:

Im Folgendenwing 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 folgendenwing Die Abfrage gibt Ihnen die Gesamtzahl der in jeder Abteilung anwesenden Studenten.

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

Im Folgendenwing Abfrage werden wir die Abteilungen auswählen, die nur zwei Studenten haben:

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 zwei 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

Im Folgendenwing Abfrage werden wir eine Unterabfrage in die FROM-Klausel einfügen:

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:Verwenden von Unterabfragen 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

Im Folgendenwing Abfrage werden wir eine Unterabfrage in die WHERE-Klausel einfügen:

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

Mengenoperationen – UNION,Intersect

SQLite unterstützt Folgendeswing 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 Folgendenwing Beispiel: Wir erhalten die Liste der DepartmentId aus der Studententabelle und die Liste der DepartmentId aus der Abteilungstabelle in derselben Spalte:

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

Dadurch erhalten Sie:

Mengenoperationen – 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 Folgendenwing Beispiel: Wir erhalten die Liste der DepartmentId aus der Studententabelle und die Liste der DepartmentId aus der Abteilungstabelle in derselben Spalte:

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

Dadurch erhalten Sie:

Mengenoperationen – 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

Im Folgendenwing Abfrage wählen wir die DepartmentId-Werte aus, die in den beiden Tabellen „Studenten“ und „Abteilungen“ in der Spalte „DepartmentId“ vorhanden sind:

SELECT DepartmentId FROM Students
Intersect
SELECT DepartmentId FROM Departments;

Dadurch erhalten Sie:

Operationen festlegen – 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, Liste1 und Liste2, und möchten nur die Zeilen aus Liste1, die in Liste2 nicht vorhanden sind, können Sie die Klausel „EXCEPT“ verwenden. Die EXCEPT-Klausel compares die beiden Listen und gibt die Zeilen zurück, die in Liste1 vorhanden sind, aber nicht in Liste2.

Beispiel

Im Folgendenwing Abfrage wählen wir die DepartmentId-Werte aus, die in der Abteilungstabelle vorhanden sind, aber nicht in der Studententabelle:

SELECT DepartmentId FROM Departments
EXCEPT
SELECT DepartmentId FROM Students;

Dadurch erhalten Sie:

Operationen festlegen – 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 spezielle Behandlung in 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. Zum Beispiel das Following Die Abfrage sucht nach Studenten, die einen DepartmentId-Wert von Null haben:

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 folgtwing:
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 dieser:
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öchtenwing:

– „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 wie folgt mit verschiedenen Syntaxen definiert werdenwing:

  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 Folgendenwing Als Beispiel verwenden wir die CASE Ausdruck mit NULL Wert in der Spalte „Abteilungs-ID“ in der Tabelle „Studenten“ ein, um den Text „Keine Abteilung“ wie folgt anzuzeigenwing:

SELECT 
  StudentName,
  CASE 
    WHEN DepartmentId IS NULL THEN 'No Department'
    ELSE DepartmentId 
  END AS DepartmentId
FROM Students;
  • Der CASE-Operator prü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 die WITH-Klausel wie folgt vor eine SELECT-Anweisung gesetzt wirdwing:

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

Das "CTE-Name„ ist ein beliebiger Name, den Sie für den CTE vergeben können. Sie können ihn verwenden, um darauf zu verweisen later. 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 Folgendenwing Beispielsweise definieren wir einen CTE aus einer SELECT-Anweisung und verwenden ihn dann later zu einer anderen Anfrage:

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 com enthaltenplex Joins, Unterabfragen und einige Aggregate. Im Folgendenwing Im 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
  • Showing die Abteilung hat mindestens drei Studierende
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 seinwing:

Erweiterte Abfragen

Zusammenfassung

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