Der Optimierer konvertiert eine Unterabfrage, die einem Schlüsselwort folgt, nur, falls folgende Bedingungen erfüllt werden:
Die Hauptabfrage enthält keine GROUP BY-Klausel und ist keine Aggregatabfrage, oder die Unterabfrage gibt genau einen Wert zurück.
Die Verbindung 'EXISTS (Unterabfrage)' wird nicht negiert.
Die Unterabfrage ist korreliert, d.h. sie enthält eine äußere Referenz.
Die Anforderung "Welche Kunden haben nach dem 13.07.01 Bestellungen aufgegeben?", die in einer Abfrage formuliert werden kann, deren nicht-negierte Unterabfrage die äußere Referenz Customers.ID = SalesOrders.CustomerID enthält, könnte durch den folgenden Join dargestellt werden:
SELECT GivenName, Surname FROM Customers WHERE EXISTS ( SELECT * FROM SalesOrders WHERE ( OrderDate > '2001-07-13' ) AND ( Customers.ID = SalesOrders.CustomerID ) ); |
Durch das Schlüsselwort EXISTS wird der Datenbankserver angewiesen, nach leeren Ergebnismengen zu suchen. Wenn INNER-Joins verwendet werden, zeigt der Datenbankserver automatisch nur die Zeilen an, in denen sich Daten von allen Tabellen befinden, die in der FROM-Klausel enthalten sind. Diese Abfrage gibt daher dieselben Zeilen zurück wie diejenige ohne die Unterabfrage:
SELECT DISTINCT GivenName, Surname FROM Customers, SalesOrders WHERE ( SalesOrders.OrderDate > '2001-07-13' ) AND ( Customers.ID = SalesOrders.CustomerID ); |
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 |