Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Daten abfragen und ändern » Unterabfragen verwenden » Unterabfragen testen

 

Unterabfragen und der ALL-Test

Der ALL-Test wird mit einem der SQL-Vergleichsoperatoren (=, >, <, >=, <=, !=, <>, !>, !<) verwendet, um einen einzelnen Wert mit den von der Unterabfrage erzeugten Datenwerten zu vergleichen. Um den Test durchzuführen, benutzt SQL den angegebenen Vergleichsoperator, um den Testwert mit jedem Datenwert in der Ergebnismenge zu vergleichen. Wenn alle Vergleiche mit einem TRUE-Ergebnis enden, gibt der ALL-Test den Wert TRUE zurück.

Beispiel

Dieses Beispiel sucht die Bestellnummern und Kundennummern derjenigen Bestellungen, die aufgegeben wurden, nachdem alle Produkte der Bestellung Nr. 2001 versandt wurden.

SELECT ID, CustomerID
FROM SalesOrders
WHERE OrderDate > ALL (
   SELECT ShipDate
   FROM SalesOrderItems
   WHERE ID=2001 );
ID CustomerID
2002 102
2003 103
2004 104
2005 101
... ...

Beim Ausführen dieser Abfrage prüft die Hauptabfrage die Bestelldaten für jede Bestellung anhand der Versanddaten aller Produkte der Bestellung 2001. Wenn ein Bestelldatum nach dem Versanddatum für alle Lieferungen der Bestellung 2001 liegt, werden die ID und Kunden-ID aus der Tabelle "SalesOrders" in die Ergebnismenge übernommen. Der ALL-Test ist analog zum AND-Operator: Die oben stehende Abfrage kann wie folgt gelesen werden: "Wurde diese Bestellung aufgegeben, bevor das erste Produkt der Bestellung 2001 versandt wurde, und bevor das zweite Produkt der Bestellung 2001 versandt wurde, und …".

Hinweise zum ALL-Operator

Es gibt drei weitere wichtige Eigenheiten des ALL-Tests:

  • Leere Unterabfragen-Ergebnismenge   Wenn die Unterabfrage eine leere Ergebnismenge produziert, wird der ALL-Test als TRUE ausgewertet. Dies ist sinnvoll, denn wenn es keine Ergebnisse gibt, dann ist es wahr, dass alle Werte in der Ergebnismenge den Vergleichstest bestanden haben.

  • NULL in der Ergebnismenge der Unterabfrage   Wenn der Vergleichstest für beliebige Werte in der Ergebnismenge FALSE ergibt, gibt die ALL-Suche ebenfalls FALSE zurück. Sie gibt TRUE zurück, wenn alle Werte TRUE sind. Sonst gibt sie UNKNOWN zurück - zum Beispiel kann dies vorkommen, wenn NULL in der Ergebnismenge der Unterabfrage vorhanden ist, die Suchbedingung aber TRUE für alle Nicht-NULL-Werte ausgibt.

  • Negieren des ALL-Tests   Die folgenden Ausdrücke sind nicht entsprechend.
    NOT a = ALL (subquery)
    a <> ALL (subquery)

    Weitere Hinweise zu diesem Test finden Sie unter Unterabfrage, die ANY, ALL oder SOME folgt.