Kriterien

Ausdrücke

Eine der wichtigsten Fähigkeiten von Abfragen ist, Datensätze nach beliebigen Kriterien bzw. Bedingungen zu filtern. Hier ein einfaches Beispiel:

Abfrage1
tblOrte
*
IDOrt
txtOrt
lngLand
Feld: txtOrt  
Tabelle: tblOrte  
Sortierung:    
Anzeigen:
Kriterien: "München"  
oder:    
     

Die Abfrage gibt jetzt nur noch Datensätze aus, bei denen im Feld txtOrt „München“ eingetragen ist:

SELECT txtOrt
FROM tblOrte
WHERE txtOrt = "München";
Abfrage1
txtOrt
München

Auch im Zusammenhang mit Kriterien ist es manchmal sinnvoll, Felder nicht anzuzeigen:

Feld: tblOrte.* txtOrt
Tabelle: tblOrte tblOrte
Sortierung:    
Anzeigen:
Kriterien:   "München"
oder:    
     
SELECT *
FROM tblOrte
WHERE txtOrt = "München";
Abfrage1
IDOrt txtOrt lngLand
1 München 2

Operatoren

Es ist möglich, als Kriterium nicht nur einen festen Ausdruck, sondern auch Operatoren einzugeben:

Feld: tblOrte.* lngLand
Tabelle: tblOrte tblOrte
Sortierung:    
Anzeigen:
Kriterien:   >2
oder:    
     

So werden alle Datensätze ausgegeben, bei denen im Feld lngLand ein Wert größer als 2 steht:

SELECT *
FROM tblOrte
WHERE lngLand > 2;
Abfrage1
IDOrt txtOrt lngLand
3 Berlin 3

Hier eine Auflistung von Operatoren:

Operatoren
Operator Beispiel Bedeutung
= =1 gleich
<> <>1 ungleich
< <1 kleiner als
> >1 größer als
<= <=1 kleiner oder gleich
>= >=1 größer oder gleich
Zwischen ... und  Zwischen 1 und 3  Zwischen zwei Werten (jeweils einschließlich)
Wie Wie "X*" entspricht einem Textmuster
In In ('Müller', 'Mayer', 'Schulze') in einer Liste enthaltene Werte

Darüber hinaus gibt es noch den Null-Operator, mit dem man nach leeren Feldern suchen kann. Dies ist nicht zu verwechseln mit einer leeren Zeichenfolge oder dem Zahlenwert 0: In einem Zahlenfeld kann entweder den Wert 0 stehen oder, wenn es in den Feldeinstellungen erlaubt ist, gar nichts. Um nach einer 0 zu suchen, hieße das Kriterium =0, um nach einem leeren Feld zu suchen, würde es Ist Null heißen. Eine leere Zeichenfolge hingegen sucht man mit "" (ohne Leerzeichen dazwischen).

Operatoren funktionieren auch für Textfelder:

Feld: txtOrt  
Tabelle: tblOrte  
Sortierung:    
Anzeigen:
Kriterien: >"C"  
oder:    
     

Nun erhält man alle Ortsnamen, die alphabetisch nach „C“ kommen:

SELECT txtOrt
FROM tblOrte
WHERE txtOrt > "C";
Abfrage1
txtOrt
München
Stuttgart

Der Wie-Operator

Für Textfelder gibt es zusätzlich noch den Wie−Operator. Mit ihm können Platzhalterzeichen verwendet werden, um alle Elemente zu finden, die einem Muster entsprechen:

Feld: tblOrte.* txtOrt
Tabelle: tblOrte tblOrte
Sortierung:    
Anzeigen:
Kriterien:   Wie "B*"
oder:    
     

Die Abfrage gibt jetzt alle Datensätze aus, bei denen der Ortsname mit „B“ beginnt:

SELECT *
FROM tblOrte
WHERE txtOrt Like "B*";
Abfrage1
IDOrt txtOrt lngLand
2 Bamberg 2
5 Bayreuth 2
3 Berlin 3

Folgende Platzhalterzeichen sind möglich:

Platzhalterzeichen
Symbol Beispiel Ergebnis Verwendung
* Wie "*er" findet Maier, Müller, Junker Eine beliebige Anzahl Zeichen
? Wie "Ma?er" findet Maier, Majer und Mayer Ein beliebiges einzelnes Zeichen
# Wie "1#3" findet 103, 113, 123 Eine einzelne Ziffer
[ ] Wie "Ma[iy]er" findet Maier und Mayer, aber nicht Majer Ein einzelnes Zeichen in den eckigen Klammern
! Wie "Ma[!iy]er" findet Majer, aber nicht Maier oder Mayer Ein einzelnes, nicht aufgelistetes Zeichen
- Wie "b[a-c]d" findet bad, bbd und bcd Ein einzelnes Zeichen im angegebenen Bereich

Der In-Operator

Der oben aufgeführte in-Operator ist eine Besonderheit: Man könnte mit In ('Müller', 'Mayer', 'Schulze') nach Datensätzen suchen, die in einer Liste enthalten sind. So etwas ist normalerweise mit „oder“ sinnvoller (siehe mehrere Kriterien). Spannend wird es erst im Zusammenhang mit Unterabfragen: In der folgenden Abfrage steckt im In-Operator selbst wieder SQL-Code. Sie gibt alle Orte aus, die in einem Bundesland liegen, in denen es auch einen Ort namens „Neustadt“ gibt - ohne, dass man wissen muss, in welchen Bundesländern ein solcher Ort existiert.

SELECT txtOrt, lngLand
FROM tblOrte
WHERE In (SELECT lngLand
          FROM tblOrte
          WHERE txtOrt = "Neustadt"
         );
Feld: txtOrt lngLand
Tabelle: tblOrte tblOrte
Sortierung:    
Anzeigen:
Kriterien:   In (SELECT lngLand FROM tblOrte WHERE txtOrt = "Neustadt")
oder:    
     

Unterabfragen können auch in der Zeile „Feld“ stehen, wenn man einen Feldnamen überhaupt erst per Abfrage ermitteln will. Sogar im FROM-Abschnitt in SQL sind Unterabfragen möglich. Unterabfragen sind also recht mächtig - führen allerdings für dieses Tutorial erst einmal zu weit.