Kategorien:

Abfragesyntax

WHERE

Die WHERE-Klausel filtert das Ergebnis der FROM-Klausel.

Syntax

SELECT ...
FROM ...
WHERE <predicate>
[ ... ]
Prädikat

Ein boolescher Ausdruck. Der Ausdruck kann logische Operatoren enthalten, beispielsweise AND, OR und NOT.

Nutzungshinweise

Verknüpfungen in der WHERE-Klausel

  • In der WHERE-Klausel können Verknüpfungen ausgedrückt werden, entweder zusätzlich zu oder anstelle ihrer Angabe in der FROM-Klausel; dazu müssen Verknüpfungsbedingungen in die WHERE-Klausel aufgenommen werden.

    Die folgenden zwei äquivalenten Abfragen zeigen, wie sich eine Verknüpfung in der FROM- oder WHERE-Klausel ausdrücken lässt:

    SELECT c1, c2
    FROM t1 INNER JOIN t2
            ON c1 = c2
    ORDER BY 1,2;
    
    SELECT c1, c2
    FROM t1, t2
    WHERE c1 = c2
    ORDER BY 1,2;
    
  • Prädikate in der WHERE-Klausel verhalten sich so, als würden sie nach der FROM-Klausel ausgewertet werden (auch wenn das Optimierungsprogramm Prädikate neu anordnen kann, wenn das keine Auswirkungen auf die Ergebnisse hat). Wenn beispielsweise ein Prädikat in der WHERE-Klausel auf Spalten einer Tabelle verweist, die Teil einer äußeren Verknüpfung in der FROM-Klausel ist, werden die von der Verknüpfung zurückgegebenen Zeilen (die mit NULLs aufgefüllt sein können) verarbeitet.

  • Äußere Verknüpfungen können in der WHERE-Klausel mit der (+)-Syntax angegeben werden. Um eine äußere Verknüpfung mit (+) anzugeben, werden die Spalten aus der NULL-erweiterten Tabelle der Verknüpfung in der WHERE-Klausel mit (+) versehen.

    Die folgenden zwei äquivalenten Abfragen zeigen, wie sich eine äußere Verknüpfung in der FROM- oder WHERE-Klausel ausdrücken lässt:

    SELECT c1, c2
    FROM t1 LEFT OUTER JOIN t2
            ON c1 = c2;
    
    SELECT c1, c2
    FROM t1, t2
    WHERE c1 = c2(+);
    

    Bemerkung

    Es gibt viele Beschränkungen hinsichtlich der Frage, wo die (+)-Anmerkung erscheinen kann; äußere Verknüpfungen der FROM-Klausel sind ausdrucksvoller. Snowflake empfiehlt, die Notation (+) nur zum Portieren von Code zu verwenden, der diese Notation bereits nutzt. Bei neuem Code sollten Sie diese Notation vermeiden.

    Beschränkungen beinhalten:

    • Sie können die (+)-Notation nicht zum Erstellen von FULL OUTER JOIN verwenden; Sie können lediglich LEFT OUTER JOIN und RIGHT OUTER JOIN erstellen.

Beispiele

Im Folgenden werden einige einfache Anwendungen der WHERE-Klausel veranschaulicht:

SELECT * FROM invoices
  WHERE invoice_date < '2018-01-01';

SELECT * FROM invoices
  WHERE invoice_date < '2018-01-01' AND paid = False;

In diesem Beispiel kommt eine Unterabfrage zum Einsatz und werden alle Rechnungen angezeigt, deren Rechnungsbeträge unter dem Durchschnitt liegen:

SELECT * FROM invoices
  WHERE amount < (SELECT AVG(amount) FROM invoices);