ALL (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

スカラー値を単一列で構成される値のセットと比較します。

Transact-SQL 構文表記規則

構文

scalar_expression { = | <> | != | > | >= | !> | < | <= | !< } ALL ( subquery )  

引数

scalar_expression
任意の有効なを指定します。


比較演算子です。

subquery
1 列の結果セットを返すサブクエリです。 返される列のデータ型は、scalar_expression のデータ型と同じである必要があります。

制限された SELECT ステートメントです。ORDER BY 句および INTO キーワードは使用できません。

戻り値の型

Boolean

結果の値

指定された比較が (scalar_expression, x) の任意の組で TRUE の場合、TRUE を返します。ここで、x は単一列セットの中の値です。 それ以外の場合は、False を返します。

解説

ALL の場合、scalar_expression ではサブクエリによって返されるすべての値に対し肯定的な比較を行う必要があります。 たとえば、サブクエリによって値 2 と 3 が返される場合、scalar_expression<= ALL (subquery) は、scalar_expression が 2 の場合、TRUE と評価されます。 サブクエリによって値 2 と値 3 が返される場合、scalar_expression = ALL (subquery) は FALSE と評価されます。これは、サブクエリのいくつかの値 (値 3) が式の条件を満たさないためです。

サブクエリによって返される 1 つの値に対し肯定的な比較を行うために scalar_expression を必要とするステートメントについては、「SOME | ANY (Transact-SQL)」を参照してください。

2 つの式の等価性を比較し、true または false の結果を保証するには、「IS [NOT] DISTINCT FROM (Transact-SQL)」を参照してください。

この記事では、ALL をサブクエリと共に使用する場合を想定しています。 ALL は UNION および SELECT と共に使用できます。

次の例では、AdventureWorks2022 データベース内にある指定した SalesOrderID のすべての部品が、指定した日数で製造できるかどうかを判定するストアド プロシージャを作成します。 この例では、サブクエリを使用して、特定の DaysToManufacture のすべての部品に対する SalesOrderID の値一覧を作成し、その中のすべての DaysToManufacture が指定した日数以内であることを確認します。

-- Uses AdventureWorks

CREATE PROCEDURE DaysToBuild @OrderID INT, @NumberOfDays INT  
AS  
IF   
@NumberOfDays >= ALL  
   (  
    SELECT DaysToManufacture  
    FROM Sales.SalesOrderDetail  
    JOIN Production.Product   
    ON Sales.SalesOrderDetail.ProductID = Production.Product.ProductID   
    WHERE SalesOrderID = @OrderID  
   )  
PRINT 'All items for this order can be manufactured in specified number of days or less.'  
ELSE   
PRINT 'Some items for this order can''t be manufactured in specified number of days or less.' ;  

このプロシージャをテストするには、SalesOrderID 49080 を使用してプロシージャを実行します。この注文内容には、必要な日数が 2 日の部品が 1 つと 0 日の部品が 2 つが含まれています。 次に示す最初のステートメントは条件を満たします。 2 番目のクエリはそうではありません。

EXECUTE DaysToBuild 49080, 2 ;  

結果セットは次のとおりです。

All items for this order can be manufactured in specified number of days or less.

EXECUTE DaysToBuild 49080, 1 ;  

結果セットは次のとおりです。

Some items for this order can't be manufactured in specified number of days or less.

関連項目