Suchbedingungen dienen dazu, die Menge der Sätze einzuschränken, die von einer Tabellenoperation oder SQL-Anweisung einer Routine betroffen sind. Es werden nur die Sätze berücksichtigt, die die angegebene Suchbedingung erfüllen. Sie können Suchbedingungen angeben beim Löschen (DELETE), Einfügen/Ändern (MERGE), Ändern (UPDATE) und Auswählen von Sätzen (SELECT), beim Verbinden von Tabellen (Join-Ausdruck) und in einem bedingten Ausdruck (CASE-Ausdruck). In Tabellen- und Spaltenbedingungen können Sie Suchbedingungen angeben, um Integritätsbedingungen zu formulieren. Auch bei AAnweisungen in Routinen treten Suchbedingungen auf.
Sie formulieren die Suchbedingung in einer WHERE-, HAVING-, ON-, CHECK- oder WHEN-Klausel oder einer Kontrollanweisung einer Routine, die in folgenden Anweisungen und Ausdrücken bzw. Abfrage-Ausdrücken vorkommen können:
WHERE-Klausel
DELETE-Anweisung
SELECT-Anweisung
SELECT-Ausdruck bei CREATE VIEW, DECLARE, INSERT
UPDATE-Anweisung
HAVING-Klausel
SELECT-Anweisung
SELECT-Ausdruck bei CREATE VIEW, DECLARE, INSERT
ON-Klausel
MERGE-Anweisung
Join-Ausdruck
CHECK-Bedingung in der CREATE TABLE- oder ALTER TABLE-Anweisung
WHEN-Klausel in einem CASE-Ausdruck mit Suchbedingung
IF-, CASE-, REPEAT- oder WHILE-Anweisung in einer Routine
Eine Suchbedingung besteht aus Prädikaten und eventuell logischen Operatoren. Die Prädikate sind die Operanden der logischen Operatoren.
Zur Auswertung der Suchbedingung werden die Operatoren auf die Ergebnisse der Operanden angewendet. Das Ergebnis ist einer der Wahrheitswerte wahr, falsch oder unbestimmt.
Die Reihenfolge der Auswertung der Operanden ist nicht festgelegt. In bestimmten Fällen wird ein Operand nicht berechnet, wenn er für die Berechnung des Gesamtergebnisses nicht benötigt wird.
suchbedingung ::= {
praedikat |
suchbedingung { AND | OR }
suchbedingung |
NOT
suchbedingung
|
(
suchbedingung
)
}
praedikat
Prädikat.
AND
Logisches UND.
Ergebnis für Op1 AND Op2
Op1 wahr | Op1 falsch | Op1 unbestimmt | |
Op2 wahr | wahr | falsch | unbestimmt |
Op2 falsch | falsch | falsch | falsch |
Op2 unbestimmt | unbestimmt | falsch | unbestimmt |
Tabelle 20: logischer Operator AND
OR
Logisches ODER.
Ergebnis für Op1 OR Op2
Op1 wahr | Op1 falsch | Op1 unbestimmt | |
Op2 wahr | wahr | wahr | wahr |
Op2 falsch | wahr | falsch | unbestimmt |
Op2 unbestimmt | wahr | unbestimmt | unbestimmt |
Tabelle 21: logischer Operator OR
NOT
Negation.
Ergebnis
NOT Op | |
Op wahr | falsch |
Op falsch | wahr |
Op unbestimmt | unbestimmt |
Tabelle 22: logischer Operator NOT
Prioritäten
Klammerausdrücke haben die höchste Priorität.
NOT hat Vorrang vor AND und OR.
AND hat Vorrang vor OR.
Operatoren gleicher Priorität werden von links nach rechts angewendet.
Beispiele
Aus den Tabellen AUFTRAG und KUNDE alle Aufträge mit zugehöriger Firma heraussuchen, die nach dem angegebenen Datum gestellt wurden.
SELECT a.anr, k.firma, a.atext, a.adatum FROM auftrag a, kunde k WHERE a.adatum > DATE '<date>' AND a.knr = k.knr anr firma atext adatum 250 Pudelshop Anke Serienbrief-Einweisung <date> 251 Pudelshop Anke Kunden-Verwaltung <date> 300 Login GmbH Netzwerk-Test/Vergleich <date> 305 Pudelshop Anke Mitarbeiterschulung <date>
Aus der Tabelle ARTIKEL alle Artikel löschen, deren Preis kleiner als 500.00 ist und deren Artikelbezeichnung aus dem Buchstaben H und einer beliebigen Zeichenfolge besteht.
DELETE FROM artikel WHERE preis < 500.00 AND artbez LIKE 'H%'
Aus der Tabelle LEISTUNG
alle Aufträge heraussuchen, die im angegebenen Zeitraum durchgeführt wurden oder bei denen keine Schulungen durchgeführt bzw. kein Schulungsmaterial und kein Handbuch erstellt wurde.
SELECT lnr, ldatum, ltext FROM leistung WHERE ldatum BETWEEN DATE '2013-04-01' AND DATE '2013-04-30>' OR ltext NOT IN('Schulung','Schulungsmaterial','Handbuch') lnr anr ldatum ltext 1 200 2013-04-19 Schulungsmaterial 2 200 2013-04-22 Schulung 3 200 2013-04-23 Schulung 4 211 2013-01-20 Systemanalyse 5 211 2013-01-28 Datenbankentwurf 6 211 2013-02-15 Kopien/Folien 10 250 2013-02-21 Reisekosten