3.4 WHERE

Soll das Abfrageergebnis nur Datensätze enthalten, die eine oder mehrere Bedingungen erfüllen, können diese mit Hilfe der WHERE-Klausel angegeben werden.

Beispiele
  1. Wähle aus der Tabelle Kunde alle Datensätze aus, die in der Spalte Nachname den Wert Maier besitzen.
    SQL
    SELECT *
    FROM Kunde
    WHERE Nachname = "Maier";
    Abb. 3-26: SQL – Auswahl aller Datensätze, die eine bestimmte Bedingung erfüllen

    Abfrageergebnis

    ID Vorname Nachname
    1 Max Maier
    3 Eva Maier
    Abb. 3-27: Abfrageergebnis der SQL-Anweisung aus Abb. 3-26.
  2. Wähle aus der Tabelle Mietvertrag alle Datensätze aus, die in der Spalte Mietdauer einen Wert von höchstens 3 besitzen.
    SQL
    SELECT *
    FROM Mietvertrag
    WHERE Mietdauer <= 3;
    Abb. 3-28: SQL – Auswahl einer Spalte

    Abfrageergebnis

    ID Abschlussdatum Mietbeginn Mietdauer Kunde_ID
    1 2015-08-11 2015-08-12 3 1
    Abb. 3-29: Abfrageergebnis der SQL-Anweisung aus Abb. 3-28.
  3. Wähle aus der Tabelle Mietvertrag alle Datensätze aus, die in der Spalte Mietbeginn einen Datumswert besitzen, der nach dem 12.08.2015 liegt.
    SQL
    SELECT *
    FROM Mietvertrag
    WHERE Mietbeginn > "2015-08-12";
    Abb. 3-30: SQL – Auswahl einer Spalte

    Abfrageergebnis

    ID Abschlussdatum Mietbeginn Mietdauer Kunde_ID
    2 2015-08-13 2015-08-15 5 2
    Abb. 3-31: Abfrageergebnis der SQL-Anweisung aus Abb. 3-30.

Soll das Abfrageergebnis nur Datensätze enthalten, die eine oder mehrere Bedingungen erfüllen, können diese mit Hilfe der WHERE-Klausel angegeben werden.

Enthält eine Bedingung Auswahlkriterien vom Typ Text oder Datum, müssen diese in einfache ('...') oder doppelte ("...") Anführungszeichen eingeschlossen werden.

SQL
SELECT [DISTINCT] spalte [, ...]
FROM tabelle
[WHERE bedingung]
[ORDER BY {spalte [ASC|DESC]} [, ...]];
Abb. 3-32: SQL Syntax – SELECT-Anweisung inklusive WHERE-Abschnitt

MySQL unterstützt folgende Vergleichsoperatoren:

Operator Bedeutung
= gleich
!= ungleich
< kleiner als
> größer als
<= kleiner gleich
>= größer gleich
Abb. 3-32b: Vergleichsoperatoren
Merke: Das Abfrageergebnis enthält nur Datensätze, die die in der WHERE-Klausel angegebenen Bedingungen erfüllen.
Aufgabe

Aufgabe 3-4: Bedingungen

Datenbank Firmenwagen

Erstellen Sie jeweils eine SQL-Anweisung, die als Abfrageergebnis eine Tabelle mit den gewünschten Daten zurückgibt:

  1. alle Reservierungen mit dem Zweck 'Messe', Lösung
    Lösung
    SQL
    SELECT *
    FROM Reservierung
    WHERE Zweck = "Messe";
    Abb. 3-33: SQL-Anweisung
  2. alle Instandhaltungen bei Fahrzeugen mit einem Kilometerstand von unter 12000 km, aufsteigend nach dem Kilometerstand sortiert, Lösung
    Lösung
    SQL
    SELECT *
    FROM Instandhaltung
    WHERE KmStand < 12000
    ORDER BY KmStand ASC;
    Abb. 3-34: SQL-Anweisung
  3. alle Firmenwagen, die seit dem 01.01.2015 angeschafft worden sind, absteigend nach dem Anschaffungsdatum sortiert. Bei gleichem Anschaffungsdatum soll nach der Fahrzeugmodell_ID aufsteigend sortiert werden. Lösung
    Lösung
    SQL
    SELECT *
    FROM Fahrzeug
    WHERE Anschaffungsdatum >= "2015-01-01"
    ORDER BY Anschaffungsdatum DESC, Fahrzeugmodell_ID ASC;
    Abb. 3-35: SQL-Anweisung

NOT-Operator

In der Informatik verneint der NOT-Operator eine Bedingung. In der Alltagssprache entspricht dies der Verneinung mit „nicht“. In einer SELECT-Anweisung kann der NOT-Operator in der WHERE-Klausel verwendet werden, um Datensätze zu auszuwählen, die eine bestimmte Bedingung NICHT erfüllen.

Beispiele
Wähle aus der Tabelle Kunde alle Datensätze aus, die in der Spalte Nachname nicht den Wert "Maier" besitzen.
SQL
SELECT *
FROM Kunde
WHERE NOT (Nachname="Maier");
Abb. 3-35a: SQL – Auswahl aller Datensätze, die eine bestimmte Bedingung erfüllen (Nutzung eines logischen Operators)

Abfrageergebnis

ID Vorname Nachname
2 Fritz Haug
4 Anja Sommer
Abb. 3-35b: Abfrageergebnis der SQL-Anweisung aus Abb. 3-35a.
Aufgabe

Aufgabe 3-4 II: NOT-Operator

Datenbank Firmenwagen

Erstellen Sie eine SQL-Anweisung, die als Abfrageergebnis alle Fahrzeugmodelle zurückgibt, die nicht vom Hersteller VW sind.

Lösung
Lösung
SQL
SELECT *
FROM Fahrzeugmodell
WHERE NOT (Hersteller = "VW");
Abb. 3-35c: SQL-Anweisung

Verknüpfung mehrerer Bedingungen

Mehrere Bedingungen können mit Hilfe der logischen Operatoren AND bzw. OR miteinander verknüpft werden.

Die logischen Operatoren NOT, AND und OR werden gemäß der folgenden Priorität ausgewertet werden:

Der NOT-Operator hat die höchste Priorität und wird vorrangig ausgewertet. Danach folgt der AND-Operator und schließlich der OR-Operator mit der niedrigsten Priorität. Durch das Setzen von Klammern kann die Auswertungsreihenfolge individuell festgelegt werden.

Merke: Das Abfrageergebnis enthält nur Datensätze, die die in der WHERE-Klausel angegebenen Bedingungen erfüllen.
Beispiele
  1. Wähle aus der Tabelle Mietvertrag alle Datensätze aus, die in der Spalte Abschlussdatum einen Datumswert vor dem 12.08.2015 oder nach dem 01.09.2015 besitzen.
    SQL
    SELECT *
    FROM Mietvertrag
    WHERE Abschlussdatum < "2015-08-12" OR Abschlussdatum > "2015-09-01";
    Abb. 3-36: SQL – Auswahl aller Datensätze, die eine bestimmte Bedingung erfüllen (Nutzung eines logischen Operators)

    Abfrageergebnis

    ID Abschlussdatum Mietbeginn Mietdauer Kunde_ID
    1 2015-08-11 2015-08-12 3 1
    Abb. 3-37: Abfrageergebnis der SQL-Anweisung aus Abb. 3-36.
  2. Wähle aus der Tabelle Kunde alle Datensätze aus, die in der Spalte Vorname den Wert Eva und in der Spalte Nachname den Wert Maier besitzen.
    SQL
    SELECT *
    FROM Kunde
    WHERE Vorname = "Eva" AND Nachname = "Maier";
    Abb. 3-38: SQL – Auswahl aller Datensätze, die eine bestimmte Bedingung erfüllen (Nutzung eines logischen Operators)

    Abfrageergebnis

    ID Vorname Nachname
    3 Eva Maier
    Abb. 3-39: Abfrageergebnis der SQL-Anweisung aus Abb. 3-38.
  3. Wähle alle Mietverträge mit einer Mietdauer von drei Tagen aus, deren Abschlussdatum entweder der 11.08.2015 oder der 13.08.2015 ist.
    SQL
    SELECT *
    FROM Mietvertrag
    WHERE Mietdauer = 3 AND (Abschlussdatum = "2015-08-11" OR Abschlussdatum = "2015-08-13");
    Abb. 3-39a: SQL – Die Klammern sind notwendig, da der AND-Operator Vorrang vor dem OR-Operator hat.

    Abfrageergebnis

    ID Abschlussdatum Mietbeginn Mietdauer Kunde_ID
    1 2015-08-11 2015-08-12 3 1
    Abb. 3-39b: Abfrageergebnis der SQL-Anweisung aus Abb. 3-39a.
  4. Wähle alle Mietverträge aus, die sowohl eine Mietdauer von drei Tagen haben als auch am 11.08.2025 abgeschlossen wurden. Außerdem sollen auch alle Mietverträge ausgewählt werden, deren Abschlussdatum der 13.08.2015 ist, unabhängig von deren Mietdauer.
    SQL
    SELECT *
    FROM Mietvertrag
    WHERE Mietdauer = 3 AND Abschlussdatum = "2015-08-11" OR Abschlussdatum = "2015-08-13";
    Abb. 3-39c: SQL – Der AND-Operator hat Vorrang vor dem OR-Operator, so dass Klammern nicht notwendig sind. Sie würden jedoch die Verständlichkeit und Lesbarkeit verbessern.

    Abfrageergebnis

    ID Abschlussdatum Mietbeginn Mietdauer Kunde_ID
    1 2015-08-11 2015-08-12 3 1
    2 2015-08-13 2015-08-15 5 2
    Abb. 3-39d: Abfrageergebnis der SQL-Anweisung aus Abb. 3-39c.
Aufgabe

Aufgabe 3-5: Verknüpfung mehrerer Bedingungen

Datenbank Firmenwagen

Erstellen Sie jeweils eine SQL-Anweisung, die als Abfrageergebnis eine Tabelle mit den gewünschten Daten zurückgibt:

  1. alle Fahrzeugmodelle (Bezeichnung, Kraftstoff, Verbrauch) mit einem Dieselmotor, deren Verbrauch höchstens 5 Liter beträgt, Lösung
    Lösung
    SQL
    SELECT Bezeichnung, Kraftstoff, Verbrauch
    FROM Fahrzeugmodell
    WHERE Kraftstoff = "Diesel" AND Verbrauch <= 5;
    Abb. 3-40: SQL-Anweisung
  2. alle Instandhaltungen deren Kosten höchsten 350,00 EUR oder mehr als 600,00 EUR betragen. Lösung
    Lösung
    SQL
    SELECT *
    FROM Instandhaltung
    WHERE Kosten <= 350 OR Kosten > 600;
    Abb. 3-41: SQL-Anweisung

Intervall als Auswahlkriterium

Mit Hilfe von 'BETWEEN ... AND ...' kann als Auswahlkriterium ein Intervall angegeben werden. Dabei sind die angegebene Ober- und Untergrenze Teil des Intervalls.

Beispiel

Wähle aus der Tabelle Mietvertrag alle Datensätze aus, die in der Spalte Mietbeginn einen Datumswert zwischen dem 01.08.2015 und dem 12.08.2015 besitzen.

SQL
SELECT *
FROM Mietvertrag
WHERE Mietbeginn BETWEEN "2015-08-01" AND "2015-08-12";
Abb. 3-42: SQL – Auswahl aller Datensätze, die eine bestimmte Bedingung erfüllen (Nutzung eines Intervalls)

Abfrageergebnis

ID Abschlussdatum Mietbeginn Mietdauer Kunde_ID
1 2015-08-11 2015-08-12 3 1
Abb. 3-43: Abfrageergebnis der SQL-Anweisung aus Abb. 3-42.
Aufgabe

Aufgabe 3-6: Intervall als Auswahlkriterium

Datenbank Firmenwagen

Erstellen Sie eine SQL-Anweisung, die als Abfrageergebnis eine Tabelle zurückgibt, die alle Fahrzeuge (Kennzeichen, Anschaffungskosten) enthält, die in der Anschaffung mindestens 26.000 € und höchsten 30.000 € gekostet haben, absteigend sortiert nach den Anschaffungskosten.

Lösung
Lösung
SQL
SELECT Kennzeichen, Anschaffungskosten
FROM Fahrzeug
WHERE Anschaffungskosten BETWEEN 26000 AND 30000
ORDER BY Anschaffungskosten DESC;
Abb. 3-44: SQL-Anweisung

Werteliste als Auswahlkriterium

Mit Hilfe von IN( ... ) kann für eine Spalte als Auswahlkriterium eine Menge von Werten angegeben werden. Das Abfrageergebnis enthält dann alle Datensätze, die in der betreffenden Spalte einen der angegebenen Werte enthalten.

Beispiel

Wähle aus der Tabelle Kunde alle Datensätze aus, die in der Spalte Vorname einen der folgenden Werte besitzen: Fritz, Eva oder Anja.

SQL
SELECT *
FROM Kunde
WHERE Vorname IN ("Fritz", "Eva", "Anja");
Abb. 3-44a: SQL – Auswahl aller Datensätze, die eine bestimmte Bedingung erfüllen (Nutzung einer Werteliste)

Abfrageergebnis

ID Vorname Nachname
2 Fritz Haug
3 Eva Maier
4 Anja Sommer
Abb. 3-44b: Abfrageergebnis der SQL-Anweisung aus Abb. 3-42.
Aufgabe

Aufgabe 3-7: Werteliste als Auswahlkriterium

Datenbank Firmenwagen

Erstellen Sie eine SQL-Anweisung, die als Abfrageergebnis eine Tabelle zurückgibt, die die Daten der Fahrzeuge mit den folgenden Kennzeichen enthält: HN-AB-45, TBB-A-678, TBB-D-9781, WÜ-A-2435.

Lösung
Lösung
SQL
SELECT *
FROM Fahrzeug
WHERE Kennzeichen IN ("HN-AB-45", "TBB-A-678", "TBB-D-9781", "WÜ-A-2435");
Abb. 3-44c: SQL-Anweisung

Platzhalter

Der LIKE-Operator erlaubt bei Auswahlkriterien vom Typ Text die Verwendung von Platzhaltern. In MySQL dient das Prozentzeichen ("%") dabei als Platzhalter für beliebig viele Zeichen, der Unterstrich ("_") als Platzhalter für genau ein Zeichen.

Beispiel

Wähle aus der Tabelle Kunde alle Datensätze aus, die in der Spalte Nachname einen Wert besitzen, der mit einem M beginnt.

SQL
SELECT *
FROM Kunde
WHERE Nachname LIKE "M%";
Abb. 3-45: SQL – Auswahl aller Datensätze, die eine bestimmte Bedingung erfüllen (Nutzung eines Platzhalters)

Abfrageergebnis

ID Vorname Nachname
1 Max Maier
3 Eva Maier
Abb. 3-46: Abfrageergebnis der SQL-Anweisung aus Abb. 3-45.
Aufgabe

Aufgabe 3-8: Platzhalter

Datenbank Firmenwagen

Erstellen Sie jeweils eine SQL-Anweisung, die als Abfrageergebnis eine Tabelle mit den gewünschten Daten zurückgibt:

  1. alle Fahrzeuge, die im Landkreis Main-Tauber-Kreis zugelassen sind, Lösung
    Lösung
    SQL
    SELECT *
    FROM Fahrzeug
    WHERE Kennzeichen LIKE "TBB%";
    Abb. 3-47: SQL-Anweisung
  2. alle Fahrzeugmodelle (Bezeichnung, Kraftstoff, Verbrauch), in deren Modellbezeichnung das Kürzel 'TDI' vorkommt, Lösung
    Lösung
    SQL
    SELECT Bezeichnung, Kraftstoff, Verbrauch
    FROM Fahrzeugmodell
    WHERE Bezeichnung LIKE "%TDI%";
    Abb. 3-48: SQL-Anweisung
  3. alle Fahrzeuge, die im Landkreis Main-Tauber-Kreis zugelassen sind und in deren Kennzeichen die Ziffernkombination '73' vorkommt, Lösung
    Lösung
    SQL
    SELECT *
    FROM Fahrzeug
    WHERE Kennzeichen LIKE "TBB%73%";
    Abb. 3-49: SQL-Anweisung