Level 2: Zeilen mit WHERE filtern

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.

Tabelle movies (10 Zeilen)
idtitlegenreyeardurationratingdirector_id
1Night TrainThriller20151187.81
2Blue HarborDrama20181027.12
3Paper Moon CityComedy2012956.45
4Silent PeakDrama20201318.23
5Last SignalSci-Fi20191427.51
6Summer KeysComedy2016885.94
7Iron GardenSci-Fi202112583
8Dust and GoldWestern20141106.82
9The Quiet HourDrama2022977.45
10Deep CurrentThriller20171056.9NULL

Ergebnis des Beispiels

titlegenre
Blue HarborDrama
Silent PeakDrama
The Quiet HourDrama

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

  1. Geführt · Zeige den Titel der Filme mit dem Genre 'Comedy'. (Tabelle: movies)
  2. Training · Zeige den Titel und das Jahr der Filme, die nach 2018 erschienen sind (2018 ausgeschlossen). (Tabelle: movies)
  3. Training · Zeige den Namen und das Gehalt der Mitarbeitenden, die mindestens 47000 verdienen. (Tabelle: staff)
  4. Training · Zeige den Namen und die Abteilung der Mitarbeitenden, die nicht in der Abteilung 'IT' arbeiten. (Tabelle: staff)
  5. Herausforderung · 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. (Tabelle: flights)

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.

Level 2 in SpeedQL öffnen

·