Level 2: Zeilen mit WHERE filtern
Aktualisiert am
Anfänger · Level 2 von 20. Ziel: Nur die Zeilen behalten, die eine Bedingung erfüllen.
Themen: WHERE = <> < > <= >=
Lektion
Eine Tabelle enthält oft viel mehr Zeilen, als dich interessieren. WHERE dient zum Filtern: Es steht nach FROM und behält nur die Zeilen, für die die Bedingung wahr ist. Die anderen verschwinden aus dem Ergebnis, bleiben aber natürlich in der Tabelle.
Eine Bedingung ist ein Vergleich. Man vergleicht eine Spalte mit einem Wert mithilfe von = (gleich), <> (ungleich), < (kleiner), > (größer), <= (kleiner oder gleich) und >= (größer oder gleich). „Mindestens 47000“ schreibt man >= 47000, „mehr als 47000“ schreibt man > 47000: Der Unterschied ändert das Ergebnis, sobald ein Wert genau 47000 ist.
Text steht zwischen einfachen Anführungszeichen: 'Drama'. Ohne Anführungszeichen hält SQL Drama für einen Spaltennamen. Eine Zahl steht ohne Anführungszeichen: 2018. Mit = beachtet der Textvergleich die Groß- und Kleinschreibung: 'drama' ist nicht gleich 'Drama'.
Du kannst auch zwei Spalten derselben Zeile vergleichen: WHERE seats_sold < capacity behält die Flüge, die nicht ausgebucht sind. Oder das Ergebnis einer Berechnung vergleichen: WHERE capacity - seats_sold > 40.
Ein wichtiger Punkt für später: SQL führt die Abfrage nicht in der Reihenfolge aus, in der man sie schreibt. Es nimmt zuerst die Tabelle (FROM), filtert dann die Zeilen (WHERE) und erzeugt erst danach die gewünschten Spalten (SELECT). Diese Ausführungsreihenfolge erklärt viele Regeln, die dir später begegnen. Zum Beispiel existiert ein im SELECT erstellter Alias zum Zeitpunkt des WHERE noch nicht: Im Standard-SQL schreibt man die Berechnung daher im WHERE erneut.
Syntax
SELECT spalten
FROM meine_tabelle
WHERE spalte >= wert;Kommentiertes Beispiel
SELECT title, genre
FROM movies
WHERE genre = 'Drama';Nur die Filme, deren Genre genau 'Drama' ist, werden behalten.
| id | title | genre | year | duration | rating | director_id |
|---|---|---|---|---|---|---|
| 1 | Night Train | Thriller | 2015 | 118 | 7.8 | 1 |
| 2 | Blue Harbor | Drama | 2018 | 102 | 7.1 | 2 |
| 3 | Paper Moon City | Comedy | 2012 | 95 | 6.4 | 5 |
| 4 | Silent Peak | Drama | 2020 | 131 | 8.2 | 3 |
| 5 | Last Signal | Sci-Fi | 2019 | 142 | 7.5 | 1 |
| 6 | Summer Keys | Comedy | 2016 | 88 | 5.9 | 4 |
| 7 | Iron Garden | Sci-Fi | 2021 | 125 | 8 | 3 |
| 8 | Dust and Gold | Western | 2014 | 110 | 6.8 | 2 |
| 9 | The Quiet Hour | Drama | 2022 | 97 | 7.4 | 5 |
| 10 | Deep Current | Thriller | 2017 | 105 | 6.9 | NULL |
Ergebnis des Beispiels
| title | genre |
|---|---|
| Blue Harbor | Drama |
| Silent Peak | Drama |
| The Quiet Hour | Drama |
Das Wichtigste
- WHERE steht immer nach FROM.
- Text in Anführungszeichen, Zahlen ohne.
- <> bedeutet „ungleich“.
Häufige Fallen
- WHERE genre = Drama ohne Anführungszeichen schreiben: SQL sucht dann eine Spalte namens Drama.
- > und >= verwechseln: „mindestens 47000“ schreibt man >= 47000.
SQLite-Besonderheit
SQLite akzeptiert einen Alias aus dem SELECT im WHERE: WHERE empty_seats > 40 funktioniert. PostgreSQL, SQL Server und Oracle lehnen das ab. Gewöhne dir die portable Variante an: Schreibe die Berechnung im WHERE erneut.
Ein weiterer Unterschied: Mit = vergleicht SQLite Texte unter Beachtung der Groß- und Kleinschreibung (Kollation BINARY). MySQL ignoriert sie mit seiner Standardkollation: 'drama' = 'Drama' ist dort wahr.
Die 5 Übungen des Levels
- Zeige den Titel der Filme mit dem Genre 'Comedy'.
- Zeige den Titel und das Jahr der Filme, die nach 2018 erschienen sind (2018 ausgeschlossen).
- Zeige den Namen und das Gehalt der Mitarbeitenden, die mindestens 47000 verdienen.
- Zeige den Namen und die Abteilung der Mitarbeitenden, die nicht in der Abteilung 'IT' arbeiten.
- Zeige die Fluggesellschaft, den Abflug- und den Ankunftsort sowie die Zahl der leeren Plätze (empty_seats) der Flüge mit mehr als 40 leeren Plätzen.
In SpeedQL wird jede Abfrage sofort geprüft: Ihr Ergebnis wird mit dem erwarteten verglichen, dann läuft die Abfrage noch einmal auf einer versteckten Kontrolldatenbank. Zu jeder Übung gibt es schriftliche Hinweise, die du nur bei Bedarf aufrufst.
Die Übungen von Level 2 machen
Kostenlos und ohne Anmeldung: Die Lektion und die 5 Übungen öffnen sich direkt in deinem Browser.
← Vorheriges Level: Eine Tabelle mit SELECT lesen · Nächstes Level: Bedingungen kombinieren →