Udostępnij za pośrednictwem


Podkwerendy z EXISTS

Gdy wprowadza się ze słowem kluczowym podzapytanie EXISTS funkcje podzapytanie jako badanie istnienia.Klauzuli WHERE kwerendy zewnętrzne sprawdza, czy wiersze są zwracane przez podzapytanie istnieje.podzapytanie faktycznie nie produkuje żadnych danych; Zwraca wartość PRAWDA lub FAŁSZ.

podzapytanie wprowadzone z EXISTS ma następującą składnię:

WHERE [NOT] EXISTS (subquery)

Następująca kwerenda powoduje znalezienie nazwy wszystkich produktów, które są w Wheels podkategorię:

USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE EXISTS
    (SELECT * 
     FROM Production.ProductSubcategory
     WHERE ProductSubcategoryID = 
            Production.Product.ProductSubcategoryID
        AND Name = 'Wheels')

Oto zestaw wyników.

Name
--------------------------------------------------
LL Mountain Front Wheel
ML Mountain Front Wheel
HL Mountain Front Wheel
LL Road Front Wheel
ML Road Front Wheel
HL Road Front Wheel
Touring Front Wheel
LL Mountain Rear Wheel
ML Mountain Rear Wheel
HL Mountain Rear Wheel
LL Road Rear Wheel
ML Road Rear Wheel
HL Road Rear Wheel
Touring Rear Wheel

(14 row(s) affected)

Zrozumienie wyniki tej kwerendy, należy rozważyć kolei nazwę każdego produktu.Czy ta wartość powoduje podzapytanie zwraca co najmniej jeden wiersz?Innymi słowy kwerenda spowodować istnienie badania ma wartości TRUE?

Należy zauważyć, że podkwerend, które są wprowadzone z ISTNIEJE nieco różnią się od innych podkwerendy w następujący sposób:

  • Słowo kluczowe EXISTS nie jest poprzedzony przez nazwę kolumna, stała lub inne wyrażenie.

  • Lista select podzapytanie wprowadzonych EXISTS prawie zawsze składa się z gwiazdką (*).Nie ma powodu do listy nazw kolumn, ponieważ są tylko badania czy wiersze spełniające warunki określone w podzapytanie istnieje.

Słowo kluczowe EXISTS jest ważne, ponieważ często nie ma żadnych alternatywne formy użytkowej bez podkwerend.Chociaż niektóre kwerendy utworzone za pomocą EXISTS nie wyrażone w inny sposób, wielu kwerend można używać w lub operator porównania zmodyfikowany przez wszystkie osiągnięcia podobne wyniki.

Na przykład, powyższa kwerenda może być wyrażona za pomocą IN:

USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE ProductSubcategoryID IN
    (SELECT ProductSubcategoryID
     FROM Production.ProductSubcategory
     WHERE Name = 'Wheels')