Udostępnij za pośrednictwem


Comparison Operators Modified by ANY, SOME, or ALL

Operatory porównania wprowadzenie podkwerenda mogą być modyfikowane przez słowa kluczowe ALL lub ANY.SOME jest równoważne dla ANY standard ISO.

Podkwerendy wprowadzonych w systemie operator porównania zmodyfikowanych zwraca listę wartości zero lub więcej i może zawierać klauzulę GROUP BY lub HAVING.Te podkwerendy mogą być przekształcone z EXISTS.

Za pomocą > operator porównania, na przykład >Większa niż wartość co wszystkich środków. Innymi słowy oznacza większą niż wartość maksymalna.Na przykład >3) ALL (1, 2, oznacza większe niż 3. >DOWOLNY oznacza większe niż co najmniej jedną wartość, to jest większa niż wartość minimalna.Tak >3) Dowolny (1, 2, oznacza większą niż 1.

Dla wiersza w podkwerenda z >ALL spełniający warunki określone w kwerendzie zewnętrzne, wartość kolumna wprowadzające podkwerenda musi być większa od każdej wartości na liście wartości zwracane przez podkwerenda.

Podobnie, >DOWOLNY oznacza, że dla wiersza spełniać warunek określony w zewnętrznej kwerendy, wartość kolumna, która przedstawia podkwerendę musi być większa niż co najmniej jedną z wartości na liście wartości zwróconych przez podkwerendę.

Następująca kwerenda zawiera przykład wprowadzonych w systemie operator porównania, zmodyfikowane przez ANY podkwerenda.Program znajduje go produktów, których ceny listy są większe niż lub równa maksymalnej cena katalogowa podkategorii dowolnego produktu.

USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE ListPrice >= ANY
    (SELECT MAX (ListPrice)
     FROM Production.Product
     GROUP BY ProductSubcategoryID)

Dla każdego produktu, podkategoria w oknie kwerendy wewnętrzne wyszukuje maksymalna cena katalogowa.Kwerenda zewnętrznego przegląda wszystkie z tych wartości i określa, które poszczególnych produktów listy ceny są większe niż lub równa maksymalnej cena katalogowa podkategorii dowolnego produktu.Jeśli ANY została zmieniona na ALL, kwerenda zwróci tylko tych produktów, których cena katalogowa jest większa niż lub równa wszystkie zwrócone w kwerendzie wewnętrzne ceny listy.

Jeśli podkwerenda nie zwraca żadnych wartości, cała kwerenda nie powiedzie się do zwracania wszystkich wartości.

= ANY operator jest równoważny IN.Na przykład, aby odnaleźć nazwy wszystkich produktów, kółka Adventure Works Cycles powoduje, że, można użyć w jednej lub = ANY.

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

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

W tym polu jest wynikiem ustawione dla dowolnej kwerendy:

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)

The < >ANY operator, however, differs from NOT IN: < >Każdy środek = nie nie = b lub nie = c.NOT IN oznacza = nie nie = b i nie = c.<>ALL oznacza taki sam, jak IN. NOT

Na przykład następująca kwerenda powoduje znalezienie klientów znajdujących się na terytorium, nie obejmuje wszystkich sprzedawców.

Use AdventureWorks;
GO
SELECT CustomerID
FROM Sales.Customer
WHERE TerritoryID <> ANY
    (SELECT TerritoryID
     FROM Sales.SalesPerson)

Wyniki obejmują wszystkich klientów, z wyjątkiem tych, których obszarów sprzedaży są wartości NULL, ponieważ każdy obszar, przypisany do nabywcy jest objęte osoby sprzedaży.Wewnętrzne kwerendy znajduje obszarów sprzedaży objętych sprzedawców, a następnie dla każdego obszaru kwerendy zewnętrzne wyszukuje klientów, którzy nie są w jednym.

Z tego samego powodu przy użyciu NOT IN w tej kwerendy, wyniki obejmują żaden z klientów.

You can get the same results with the < >ALL operator, which is equivalent to NOT IN.