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

Mit dem In-Operator könnte man z. B. mit In ("Müller", "Mayer", "Schulze") nach Datensätzen suchen, die einem Kriterium aus einer Liste entsprechen. Dieses Beispiel wäre allerdings mit „oder“ (siehe mehrere Kriterien) sinnvoller. Interessant wird es erst mit Unterabfragen: In der folgenden Abfrage steckt im In-Operator selbst wieder eine komplette Abfrage als SQL-Code. Die Unterabfrage gibt eine Liste der Nummern aller Bundesländer zurück, in denen es einen Ort namens „Neustadt“ gibt. Die Hauptabfrage gibt dann alle Orte zurück, die in einem Land liegen, in dem es einen Ort namens „Neustadt“ gibt - ohne, dass man wissen muss, in welchen Bundesländern ein solcher Ort existiert.

SELECT txtOrt, lngLand
FROM tblOrte
WHERE lngLand 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:    
     

Eine Unterabfrage kann man leider nicht unmittelbar in der Entwurfsansicht grafisch generieren. Entweder man kann ausreichend SQL, um die Unterabfrage von Hand zu erstellen, oder erstellt in der Entwurfsansicht eine Unterabfrage, wechselt in die SQL-Ansicht und kopiert von dort die Unterabfrage in die Hauptabfrage.

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