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.
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 …".
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.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |