WHERE-Klausel
WHERE-Klauseln legen Suchbedingungen fest, welche Zeilen (Datensätze) aus einer oder mehreren Zeilen auswählen. Sie werden in SELECT-, DELETE- und UPDATE-Anweisungen eingesetzt. Suchbedingungen sind meist eine Folge von Prädikaten, die durch logische Operatoren AND oder OR verbunden sind. Die Priorisierung bzw. Klammerung bestimmt dabei die Reihenfolge der Abarbeitung.
Syntax der WHERE-Klausel
<WHERE-Klausel> ::= WHERE Suchbedingung
- Datensätze, bei denen die Suchbedingung zu wahr/TRUE ausgewertet wird, werden in die Ergebnismenge der SELECT-Anfrage aufgenommen.
- Datensätze, bei denen die Suchbedingung zu falsch/FALSE oder UNKNOWN ausgewertet wird, hingegen nicht (dreiwertige-Logik).
Beispiele
Welche Angestellte gehören der Abteilung 1 an bzw. verdienen weniger als 5000€ und gehören keiner Abteilung an. Grund: AND hat eine höhere Priorität als OR.
SELECT * FROM Angestellte WHERE Abt_Nr=1 OR Abt_Nr IS NULL AND Gehalt < 5000;
Welche Angestellte verdienen weniger als 5000€ und gehören der Abteilung 1 an bzw. verdienen weniger als 5000€ und gehören keiner Abteilung an. Grund: gesetzte Klammern und somit bezieht sich das AND auf beide OR-Bedingungen.
SELECT * FROM Angestellte WHERE (Abt_Nr=1 OR Abt_Nr IS NULL) AND Gehalt < 5000;
Welche Kunden haben Waren seit 2013 bestellt?
SELECT k.* FROM Kunden k, Auftragspositionen a WHERE a.Bestellt_am >= TO_DATE('01012013','DDMMRRRR' AND k.Knr = a.Knr)); SELECT k.* FROM Kunden k, (SELECT * FROM Auftragspositionen WHERE Bestellt_am >= TO_DATE('01012013','DDMMRRRR') ) a AND k.Knr = a.Knr)); SELECT * FROM Kunden WHERE KNr IN (SELECT Knr FROM Auftragspositionen WHERE Bestellt_am >= TO_DATE('01012013','DDMMRRRR')); SELECT * FROM Kunden k WHERE EXISTS (SELECT * FROM Auftragspositionen a WHERE a.Bestellt_am >= TO_DATE('01012013','DDMMRRRR') AND k.Knr = a.Knr);
Weitere Beispiele finden sind bei der Suchbedingung zu finden.
Quellen:
- Quellen/Standards in http://www.wiscorp.com/SQLStandards.html und http://www.jcc.com/sql.htm
- INCITS/ISO/IEC 9075-1-2008. Part 1 "SQL/Framework", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
- INCITS/ISO/IEC 9075-1-2008. Part 2 "SQL/Foundation", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
- Adams, Ralf: "SQL - Eine Einführung mit vertiefenden Exkursen", Hanser, München, 2012, ISBN 978-3-446-43200-0
- Elmasri, Ramez/Navathe, Shamkant B.: "Grundlagen von Datenbanksystemen" , Pearson Studium, München, 2002, ISBN 3-8273-7021-3
- Faeskorn-Woyke, Heide/Bertelsmeier, Birgit/Riemer, Petra/Bauer, Elena: "Datenbanksysteme - Theorie und Praxis mit SQL2003, Oracle und MySQL", Pearson Education, München, 2007, ISBN 978-3-8273-7266-6
- Kemper, Alfons/Eickler, André: "Datenbanksysteme", Oldenbourg, München, 2009, 978-3-486-59018-0
- Melton, Jim/Simon, Alan R.: "SQL: 1999 - Understanding Relational Language Components", Morgan Kaufmann, San Francisco, 2001, ISBN 1558604561
- Oracle® Database SQL Language Reference 11g Release 2 (11.2), E17118-03, August 2010, http://download.oracle.com/docs/cd/E11882_01/server.112/e17118.pdf
- Saake, Gunter/Sattler, Kai-Uwe/Heuer, Andreas: "Datenbanken - Konzepte und Sprachen", mitp-Verlag, Redline GmbH, Heidelberg, 2007, ISBN 3-8266-1664-2
- Sieben, Jürgen: "Oracle® SQL - Das umfassende Handbuch", Galileo Press, 2012, ISBN 978-3-8362-1875-7
- Vossen, Gottfried: "Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme", Oldenbourg, München, 2008, ISBN 978-3-486-27574-2