TurboSQL Guide

Unterabfragen

Previous  Top  Next

Suchbedingungen in SELECT, INSERT und UPDATE Statements können eingebettete Abfragen beinhalten, die mit einem der folgenden Operatoren mit der Hauptabfrage verglichen werden können. Außerdem kann eine geklammerte Unterabfrage überall da verwendet werden, wo ein Ausdruck erwartet wird. TurboSQL erlaubt sowohl korrelierte als auch unkorrelierte Unterabfragen.

IN

Prüfung ob der Wert eines Ausdrucks in der Ergebnismenge der Unterabfrage gefunden werden kann.

Beispiel

select * from SALESINFO
where customerName in (
select name from CUSTOMER where state = 'CA'
)

Liefert alle Verkäufe an Kunden aus Kalifornien und ist im Allgemeinen dasselbe wie

select * from SALESINFO join CUSTOMER on customerName = name
where state = 'CA'

Exists

Prüft ob die Unterabfrage mindesten einen Datensatz enthält

Beispiel

select * from SALESINFO
where exists (
select * from CUSTOMER
where name = SALESINFO.customerName and state = 'CA'
)

Liefert dasselbe Ergebnis wie das erste Beispiel. Zu beachten ist aber, dass die Unterabfrage jetzt eine Spaltenreferenz auf die äußere Abfrage enthält. Dies wird als korrelierte Unterabfrage bezeichnet.

Any/Some

Überprüft, ob es mindestens einen Datensatz in der Ergebnismenge der Unterabfrage gibt, der die Suchbedingung erfüllt.

Beispiel

select * from SALESINFO
where amount > any (
select averageAmount from CUSTOMER
where name = SALESINFO.customerName
)

Liefert alle Verkäufe, die für den jeweiligen Kunden größer als der Durchschnitt sind.

All

Überprüft, ob alle Datensätze der Ergebnismenge der Unterabfrage der Suchbedingung genügen.

Beispiel

select * from SALESINFO
where amount > all (
select averageAmount from CUSTOMER
where state = 'CA'
)

Liefert die Verkäufe, die für jeden einzelnen Kunden in Kalifornien größer als der Durchschnitt sind.

Unterabfrage als Ausdruck

Eine Unterabfrage in Klammern kann also skalarer Ausdruck verwendet werden. Der Typ des Ausdrucks ist der Typ der ersten Spalte der Ergebnismenge. Der Wert des skalaren Ausdrucks ist Wert der ersten Spalte in der ersten Zeile. Wenn die Ergebnismenge keine Spalte enthält, ist der Ausdruck ungültig. Enthält sie keine Zeile, ist der Wert NULL.

Beispiele

select * from [TableB] where C1 like (select C2 from TableB) || '%'

set A = (select Count(*) from TableA)

Kompatibilität

Die Verwendung von Unterabfragen als Ausdrücke ist nur in TurboDB Managed verfügbar.

Siehe auch

WHERE