Mit Hilfe von Prädikaten können Sie Bedingungen konstruieren, damit nur die Zeilen verarbeitet werden, die diese Bedingungen erfüllen. Die Prädikate BASIC werden unter Auswählen von Zeilen erläutert. Der vorliegende Abschnitt behandelt die Prädikate IN, BETWEEN, LIKE, EXISTS und Prädikate QUANTIFIED.
Mit dem Prädikat IN können Sie einen Wert mit mehreren anderen Werten vergleichen. Beispiel:
SELECT NAME FROM STAFF WHERE DEPT IN (20, 15)
Dieses Beispiel entspricht der folgenden Anweisung:
SELECT NAME FROM STAFF WHERE DEPT = 20 OR DEPT = 15
Die Operatoren IN und NOT IN können Sie verwenden, wenn eine Unterabfrage eine Gruppe von Werten zurückgibt. Beispielsweise listet die folgende Abfrage die Familiennamen der Mitarbeiter auf, die für die Projekte MA2100 und OP2012 verantwortlich sind:
SELECT LASTNAME FROM EMPLOYEE WHERE EMPNO IN (SELECT RESPEMP FROM PROJECT WHERE PROJNO = 'MA2100' OR PROJNO = 'OP2012')
Die Unterabfrage wird einmal ausgewertet, und die resultierende Liste wird direkt in die übergeordnete Abfrage eingesetzt. Wenn die oben dargestellte Unterabfrage beispielsweise die Personalnummern 10 und 330 auswählt, wird die übergeordnete Abfrage so ausgewertet, als ob sie die folgende Klausel WHERE enthielte:
WHERE EMPNO IN (10, 330)
Die durch die Unterabfrage zurückgegebene Liste von Werten kann keinen, einen oder mehrere Werte enthalten.
Das Prädikat BETWEEN vergleicht einen einzelnen Wert mit einem (im Prädikat BETWEEN benannten) inklusiven Wertebereich.
Das folgende Beispiel sucht nach den Namen der Mitarbeiter, die zwischen $ 10.000 und $ 20.000 verdienen:
SELECT LASTNAME FROM EMPLOYEE WHERE SALARY BETWEEN 10000 AND 20000
Dies entspricht der folgenden Anweisung:
SELECT LASTNAME FROM EMPLOYEE WHERE SALARY >= 10000 AND SALARY <= 20000
Das nächste Beispiel sucht nach den Namen der Mitarbeiter, die weniger als $ 10.000 oder mehr als $ 20.000 verdienen:
SELECT LASTNAME FROM EMPLOYEE WHERE SALARY NOT BETWEEN 10000 AND 20000
Mit dem Prädikat LIKE können Sie nach Zeichenfolgen suchen, die bestimmte Muster aufweisen. Das Muster wird durch Prozentzeichen und Unterstreichungszeichen angegeben.
Im folgenden Beispiel werden die Namen der Mitarbeiter mit einer Länge von sieben Zeichen und dem Anfangsbuchstaben S ausgewählt:
SELECT NAME FROM STAFF WHERE NAME LIKE 'S _ _ _ _ _ _'
Das nächste Beispiel wählt die Namen der Mitarbeiter aus, die nicht mit dem Buchstaben S beginnen:
SELECT NAME FROM STAFF WHERE NAME NOT LIKE 'S%'
Mit einer Unterabfrage können Sie überprüfen, ob eine Zeile vorhanden ist, die eine bestimmte Bedingung erfüllt. In diesem Fall wird die Unterabfrage durch das Prädikat EXISTS oder NOT EXISTS mit der übergeordneten Abfrage verbunden.
Wenn Sie eine Unterabfrage durch ein Prädikat EXISTS mit einer übergeordneten Abfrage verbinden, gibt die Unterabfrage keinen Wert zurück. Statt dessen ist das Prädikat EXISTS dann wahr (= zutreffend), wenn die Antwortgruppe der Unterabfrage eine oder mehrere Zeilen enthält, und falsch (= nicht zutreffend), wenn die Antwortgruppe keine Zeilen enthält.
Das Prädikat EXISTS wird häufig bei Unterabfragen mit Korrelationsbezug verwendet. Das folgende Beispiel listet die Abteilungen auf, für die in der Tabelle PROJECT gegenwärtig keine Einträge vorhanden sind:
SELECT DEPTNO, DEPTNAME FROM DEPARTMENT X WHERE NOT EXISTS (SELECT * FROM PROJECT WHERE DEPTNO = X.DEPTNO) ORDER BY DEPTNO
Sie können die Prädikate EXISTS und NOT EXISTS mit anderen Prädikaten verbinden, indem Sie die Operatoren AND und OR in der Klausel WHERE der übergeordneten Abfrage verwenden.
Ein Prädikate QUANTIFIED vergleicht einen Wert mit einer Gruppe von Werten. Wenn eine Gesamtauswahl mehr als einen Wert zurückgibt, müssen Sie die Vergleichsoperatoren in Ihrem Prädikat durch Anfügen des Suffixes ALL, ANY oder SOME modifizieren. Diese Suffixe legen fest, wie die zurückgegebene Gruppe von Werten im übergeordneten Prädikat behandelt werden soll. Der Vergleichsoperator > wird als Beispiel verwendet (die folgenden Anmerkungen gelten gleichfalls für die anderen Operatoren):
Das folgende Beispiel verwendet eine Unterabfrage und einen Vergleich > ALL, um den Namen und den Beruf aller Mitarbeiter zu ermitteln, die mehr als alle Führungskräfte verdienen:
SELECT LASTNAME, JOB FROM EMPLOYEE WHERE SALARY > ALL (SELECT SALARY FROM EMPLOYEE WHERE JOB='MANAGER')
Weitere Informationen zu Prädikaten und Operatoren finden Sie im Handbuch SQL Reference.