Home
SQL / MySQL
Datenbanken?
  ---------------
Select
Insert
Update
Delete
  ---------------
Where
Order By
Group By
  ---------------
Create Table
Alter Table
Rename Table
Drop Table
Optimize Table
Repair Table
Backup Table
Restore Table
Show Tables
Describe Table
  ---------------
Use DB
Create DB
Drop DB
Show DBs
  ---------------
Funktionen
Indizes
Fulltext
Feldtypen
Gästebuch
Download
Kontakt
 
57953 Seitenaufrufe

Where-Klausel



Bedeutung:
Die WHERE-Klausel wird in Verbindung mit dem UPDATE- und dem SELECT-Statement verwendet. Mit ihr lassen sich Bedingungen formulieren, mit denen die Anzahl der betroffenen Datensätze (Zeilen) eingeschränkt werden. Innerhalb der WHERE-Klausel lassen sich Boolsche-Operatoren wie 'AND' oder 'OR' verwenden. Mit dem Klammern von Bedingungen kann man die Ergebnismenge genauer spezifizieren.

Allgemeine Form:
SELECT:
SELECT * FROM tabelle WHERE feld1 = 'wert1'

UPDATE:
UPDATE tabelle SET feld1 = 'wert1' WHERE feld1 = 'wert1'


Um zwei oder mehrere Bedingungen zu formulieren kann man 'AND' und/oder 'OR' benutzen:

SELECT * FROM tabelle
WHERE feld1 = 'wert1'
AND
 (
 feld2 = 'wert2'
 OR
 feld3 = 'wert3'
 )


Neben dem oben mehrmals verwendeten Operator '=' gibt es noch weitere wichtige Operatoren:
  • '!=' (ungleich) bzw. 'NOT'
  • '>=' (größer gleich)
  • '<=' (kleiner gleich)
  • 'LIKE' ("ähnlich wie")
  • 'IN' ("Liste von Werten")
  • 'BETWEEN' ("zwischen zwei Werten")


Beispiele:
Alle Beispiele gehen von der folgenden Tabelle aus:

anrede vorname nachname strasse plz ort
Herr Ludwig Laberbacke Laberstrasse 11 11223 Lordhausen
Frau Paula Tratschig Sonnenstraße 56 34567 Augustburg
Frau Petra Timmers Sonnenstraße 56 23226 Langenort

Die Verwendung der WHERE-Klausel ist bei SELECT und UPDATE identisch. Die Beispiele beziehen sich daher nur auf das SELECT-Statement.

Tipp:
Möchte man per UPDATE-Statement eine Anzahl von Spalten in einer Tabelle ändern so kann man sich - wenn man das Statement zu einer SELECT-Abfrage umformuliert - erst einmal ansehen, welche Datensätze von dieser Ändrung betroffen sein würden. Vorraussetzung dafür ist allerdings, das die Bedingungen in der WHERE-Klausel identisch sind.


a) Selektierung von Datensätzen über '=':
SELECT vorname, nachname, ort
FROM adressen
WHERE anrede = 'Frau'

Die Ergebnismenge enthält genau zwei Datensätze: Paula und Petra jeweils mit den entsprechenden Nachnamen und den Orten. Das gleiche Resultat lässt sich über folgenden zwei Abfragen realisieren:


b) Selektierung von Datensätzen über '!=':
SELECT vorname, nachname, ort
FROM adressen
WHERE anrede != 'Herr'


c) Selektierung von Datensätzen über 'NOT':
SELECT vorname, nachname, ort
FROM adressen
WHERE NOT anrede = 'Herr'

Die Abfrage b) ist im Grunde identisch mit der Abfrage c). Nur die Schreibweise ist verkürzt. Wichtig bei der Verwendung von 'NOT' ist, daß 'NOT' vor dem Feldnamen steht, für den die Bedingung gelten soll.


d) Selektierung von Datensätzen über den Operator 'LIKE':
SELECT vorname, nachname, ort
FROM adressen
WHERE ort LIKE '%g%'

Der Operator 'LIKE' unterscheidet sich insofern von den bisher dargestellten als dass er 'Wildcards' zuläßt. So werden mit dem obigen Statement z.B. alle Datensätze ausgegeben, die irgendwo(!) im Ortsnamen ein 'g' enthalten. Also Augustburg und Langenort inklusive der zum Datensatz gehörenden Vor- und Nachnamen.

Wichtig:
Bei der Verwendung von 'LIKE' ist die Angabe der 'Wildcards'. In diesem Fall das Prozentzeichen vor und nach dem gesuchten Wert (g). Läßt man diese Prozentzeichen weg, so verhält sich die Suche mit 'LIKE' genauso wie die mit '='. Die Ergebnismenge wäre dieselbe. Aus der obigen Tabelle würde kein Datensatz ausgewählt da kein Ort g in der Tabelle vorhanden ist.

Bedeutung der Wildcards:
  • % (Prozent) steht für beliebig viele Zeichen
  • _ (Unterstrich) steht für genau ein Zeichen
Beispiel für die Wildcard '?':
SELECT vorname, nachname, ort
FROM adressen
WHERE vorname LIKE 'P____'

Die Ergebnismenge wäre wiederum identisch mit der aus den Abfragen a), b) und c).


f) Selektierung von Datensätzen über 'IN':
SELECT vorname, nachname, ort
FROM adressen
WHERE vorname IN ('Paula', 'Petra')

Bei der Verwendung von 'IN' gibt man die zugelassenen Werte als kommaseparierte Liste innerhalb einer Klammer an. Die Ergebnismenge dieser Abfrage wäre wiederum identisch mit der aus den Abfragen a), b), c) und dem letzten Beispiel in d).


g) Selektierung von Datensätzen über 'BETWEEN':
SELECT vorname, nachname, ort
FROM adressen
WHERE plz BETWEEN '20000' AND 40000

Die Ergebnismenge dieser Abfrage wäre wiederum identisch mit der aus den Abfragen a), b), c), f) und dem letzten Beispiel in d).


h) Selektierung von Datensätzen über '>=' bzw. '<=':
SELECT vorname, nachname, ort
FROM adressen
WHERE plz >= '20000'
AND plz <= '40000'

Die Ergebnismenge dieser Abfrage wäre wiederum identisch mit der aus den Abfragen a), b), c), f), g) und dem letzten Beispiel in d).

Eine kleine Änderung am Statement hätte eine andere Ergebnismenge zur Folge:
SELECT vorname, nachname, ort
FROM adressen
WHERE plz >= '20000'
OR plz <= '40000'

Wenn man - wie hier geschehen - 'AND' durch 'OR' ersetzt so würden alle Datensätze aus der Tabelle zurückgegeben da jeder der drei Datensätze mindestens eine der beiden Bedingungen erfüllt.
 
Letzte Änderung: 17. Mai 2002, 22:26 Uhr


© 2002, Klaus Becker, becker-k@web.de