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
-
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. -
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. -
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.
FROM tabelle
[WHERE bedingung]
[ORDER BY {spalte [ASC|DESC]} [, ...]];
SELECT-Anweisung inklusive WHERE-AbschnittMySQL unterstützt folgende Vergleichsoperatoren:
| Operator | Bedeutung |
|---|---|
| = | gleich |
| != | ungleich |
| < | kleiner als |
| > | größer als |
| <= | kleiner gleich |
| >= | größer gleich |
WHERE-Klausel angegebenen Bedingungen erfüllen.
Aufgabe 3-4: Bedingungen
Datenbank Firmenwagen
Erstellen Sie jeweils eine SQL-Anweisung, die als Abfrageergebnis eine Tabelle mit den gewünschten Daten zurückgibt:
-
alle Reservierungen mit dem Zweck 'Messe',
Lösung
Lösung
SQLSELECT *
FROM Reservierung
WHERE Zweck = "Messe";Abb. 3-33: SQL-Anweisung -
alle Instandhaltungen bei Fahrzeugen mit einem Kilometerstand von unter 12000 km, aufsteigend nach dem Kilometerstand sortiert,
Lösung
Lösung
SQLSELECT *
FROM Instandhaltung
WHERE KmStand < 12000
ORDER BY KmStand ASC;Abb. 3-34: SQL-Anweisung -
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
SQLSELECT *
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.FROM Kunde
WHERE NOT (Nachname="Maier");
Abfrageergebnis
| ID | Vorname | Nachname |
|---|---|---|
| 2 | Fritz | Haug |
| 4 | Anja | Sommer |
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ösungLösung
FROM Fahrzeugmodell
WHERE NOT (Hersteller = "VW");
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.
WHERE-Klausel angegebenen Bedingungen erfüllen.Beispiele
-
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. -
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. -
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 demOR-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. -
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 demOR-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 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:
-
alle Fahrzeugmodelle (Bezeichnung, Kraftstoff, Verbrauch) mit einem Dieselmotor, deren Verbrauch höchstens 5 Liter beträgt,
Lösung
Lösung
SQLSELECT Bezeichnung, Kraftstoff, Verbrauch
FROM Fahrzeugmodell
WHERE Kraftstoff = "Diesel" AND Verbrauch <= 5;Abb. 3-40: SQL-Anweisung -
alle Instandhaltungen deren Kosten höchsten 350,00 EUR oder mehr als 600,00 EUR betragen.
Lösung
Lösung
SQLSELECT *
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.
FROM Mietvertrag
WHERE Mietbeginn BETWEEN "2015-08-01" AND "2015-08-12";
Abfrageergebnis
| ID | Abschlussdatum | Mietbeginn | Mietdauer | Kunde_ID |
|---|---|---|---|---|
| 1 | 2015-08-11 | 2015-08-12 | 3 | 1 |
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ösungLösung
FROM Fahrzeug
WHERE Anschaffungskosten BETWEEN 26000 AND 30000
ORDER BY Anschaffungskosten DESC;
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.
FROM Kunde
WHERE Vorname IN ("Fritz", "Eva", "Anja");
Abfrageergebnis
| ID | Vorname | Nachname |
|---|---|---|
| 2 | Fritz | Haug |
| 3 | Eva | Maier |
| 4 | Anja | Sommer |
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ösungLösung
FROM Fahrzeug
WHERE Kennzeichen IN ("HN-AB-45", "TBB-A-678", "TBB-D-9781", "WÜ-A-2435");
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.
FROM Kunde
WHERE Nachname LIKE "M%";
Abfrageergebnis
| ID | Vorname | Nachname |
|---|---|---|
| 1 | Max | Maier |
| 3 | Eva | Maier |
Aufgabe 3-8: Platzhalter
Datenbank Firmenwagen
Erstellen Sie jeweils eine SQL-Anweisung, die als Abfrageergebnis eine Tabelle mit den gewünschten Daten zurückgibt:
-
alle Fahrzeuge, die im Landkreis Main-Tauber-Kreis zugelassen sind,
Lösung
Lösung
SQLSELECT *
FROM Fahrzeug
WHERE Kennzeichen LIKE "TBB%";Abb. 3-47: SQL-Anweisung -
alle Fahrzeugmodelle (Bezeichnung, Kraftstoff, Verbrauch), in deren Modellbezeichnung das Kürzel 'TDI' vorkommt,
Lösung
Lösung
SQLSELECT Bezeichnung, Kraftstoff, Verbrauch
FROM Fahrzeugmodell
WHERE Bezeichnung LIKE "%TDI%";Abb. 3-48: SQL-Anweisung -
alle Fahrzeuge, die im Landkreis Main-Tauber-Kreis zugelassen sind und in deren Kennzeichen die Ziffernkombination '73' vorkommt,
Lösung
Lösung
SQLSELECT *
FROM Fahrzeug
WHERE Kennzeichen LIKE "TBB%73%";Abb. 3-49: SQL-Anweisung