Beispiele
select genus, species from mammals
where family = 'Felidae'
order by genus;
select * from persons
where birthyear in (1880, 1881)
or birthyear between 1891 and 1898;
select name, street, borough, phone
from schools s
where exists (select * from pupils p where p.school = s.id)
order by borough, street;
select * from employees
where salary >= 10000 and position <> 'Manager';
select name from wrestlers
where region = 'Europe'
and weight > all (select weight from shot_putters
where region = 'Africa');
select id, name from players
where team_id = (select id from teams where name = 'Buffaloes');
select sum (population) from towns
where name like '%dam'
and province containing 'land';
select password from usertable
where username = current_user;
Das folgende Beispiel zeigt, was passieren kann, wenn die Suchbedingung NULL
ergibt.
Angenommen, Sie haben eine Tabelle mit den Namen einiger Kinder und der Anzahl der Murmeln (engl. marbles), die sie besitzen.Zu einem bestimmten Zeitpunkt enthält die Tabelle diese Daten:
CHILD | MARBLES |
---|---|
Anita |
23 |
Bob E. |
12 |
Chris |
<null> |
Deirdre |
1 |
Eve |
17 |
Fritz |
0 |
Gerry |
21 |
Hadassah |
<null> |
Isaac |
6 |
Beachten Sie zunächst den Unterschied zwischen NULL
und 0: Fritz hat bekannt überhaupt keine Murmeln, Chris' und Hadassah’s Murmeln sind unbekannt.
Wenn Sie nun diese SQL-Anweisung ausgeben:
select list(child) from marbletable where marbles > 10;
Sie erhalten die Namen Anita, Bob E., Eve und Gerry.Diese Kinder haben alle mehr als 10 Murmeln.
Wenn Sie den Ausdruck negieren:
select list(child) from marbletable where not marbles > 10
Deirdre, Fritz und Isaac sind an der Reihe, die Liste zu füllen.Chris und Hadassah sind nicht enthalten, da sie nicht bekannt haben, dass sie zehn Murmeln oder weniger haben.Sollten Sie diese letzte Abfrage ändern in:
select list(child) from marbletable where marbles <= 10;
das Ergebnis bleibt gleich, da der Ausdruck NULL <= 10
UNKNOWN
ergibt.Dies ist nicht dasselbe wie TRUE
, daher werden Chris und Hadassah nicht aufgeführt.Wenn Sie möchten, dass sie mit den “armen”-Kindern aufgelistet werden, ändern Sie die Abfrage in:
select list(child) from marbletable
where marbles <= 10 or marbles is null;
Jetzt wird die Suchbedingung für Chris und Hadassah wahr, da “marbles is null
” in ihrem Fall offensichtlich TRUE
zurückgibt.Tatsächlich kann die Suchbedingung jetzt für niemanden NULL
sein.
Zuletzt zwei Beispiele für SELECT
-Abfragen mit Parametern in der Suche.Es hängt von der Anwendung ab, wie Sie Abfrageparameter definieren sollten und ob dies überhaupt möglich ist.Beachten Sie, dass Abfragen wie diese nicht sofort ausgeführt werden können: Sie müssen zuerst vorbereitet werden.Nachdem eine parametrisierte Abfrage erstellt wurde, kann der Benutzer (oder der aufrufende Code) Werte für die Parameter bereitstellen und mehrmals ausführen lassen, wobei vor jedem Aufruf neue Werte eingegeben werden.Wie die Werte eingegeben und die Ausführung gestartet wird, bleibt der Anwendung überlassen.In einer GUI-Umgebung gibt der Benutzer typischerweise die Parameterwerte in ein oder mehrere Textfelder ein und klickt dann auf eine Schaltfläche "Ausführen", "Ausführen" oder "Aktualisieren".
select name, address, phone frome stores
where city = ? and class = ?;
select * from pants
where model = :model and size = :size and color = :col;
Die letzte Abfrage kann nicht direkt an die Engine übergeben werden; die Anwendung muss es zuerst in das andere Format konvertieren und benannte Parameter Positionsparametern zuordnen.