Udostępnij za pośrednictwem


Subqueries with EXISTS

Gdy wprowadza się ze słowem kluczowym podkwerenda EXISTS funkcji podkwerenda w teście istnienia.Klauzula WHERE kwerendy zewnętrzne sprawdza, czy wiersze są zwracane przez podkwerenda istnieje.Podkwerenda faktycznie nie daje żadnych danych; zwraca wartość PRAWDA lub FAŁSZ.

Wprowadzone z podkwerenda EXISTS ma następującą składnię:

WHERE [NOT] EXISTS (subquery)

Następująca kwerenda powoduje znalezienie nazwy wszystkich produktów, które znajdują się w Wheels podkategorie:

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

Here is the result set.

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)

Aby zrozumieć, w wyniku tej kwerendy, należy wziąć pod uwagę nazwę każdego produktu z kolei.Ta wartość powoduje wykonania podkwerenda zwraca co najmniej jeden wiersz?Innymi słowy kwerendy powoduje, że test istnienia ocenić wartość PRAWDA?

Należy zauważyć, że podkwerend, które są wprowadzane z EXISTS są 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 wyboru podkwerenda wprowadzonymi EXISTS prawie zawsze składa się z gwiazdką **.Ponieważ po prostu testujesz, czy istnieją wiersze, które spełniają warunki określone w podkwerendzie ma powodów listę nazw kolumn.

Słowo kluczowe EXISTS ma istotne znaczenie, ponieważ często nie ma żadnych alternatywnych, formułowania nonsubquery.Mimo że nie można wyrazić niektórych kwerend utworzonych przy użyciu EXISTS żaden inny sposób, wiele kwerendy można użyć w lub operator porównania zmodyfikowana przez ANY lub wszystko w celu uzyskania podobnych wyniki.

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

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