SOME | ANY(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

스칼라 값을 단일 열 집합 값과 비교합니다. SOME과 ANY는 동일합니다.

Transact-SQL 구문 표기 규칙

Syntax

scalar_expression { = | <> | != | > | >= | !> | < | <= | !< }   
     { SOME | ANY } ( subquery )   

참고 항목

SQL Server 2014(12.x) 및 이전 버전에 대한 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조 하세요.

인수

scalar_expression
유효한 입니다.

{ = | <> | != | > | >= | !> | < | <= | !< }
유효한 비교 연산자입니다.

SOME | ANY

비교해야 함을 지정합니다.

subquery

하나의 열로 구성된 결과 집합을 갖는 하위 쿼리입니다. 반환되는 열의 데이터 형식은 scalar_expression과 같은 데이터 형식이어야 합니다.

결과 형식

Boolean

결과 값

모든 쌍(scalar_expressionx)에 대해 지정된 비교 값이 TRUE일 경우 SOME이나 ANY는 TRUE를 반환하고 그렇지 않으면 FALSE를 반환합니다. 여기서 x은 단일 열 집합의 값입니다.

설명

SOME의 경우 하위 쿼리에서 반환한 하나 이상의 값을 정확하게 비교하려면 scalar_expression이 필요합니다. 하위 쿼리에서 반환한 모든 값을 정확하게 비교하기 위해 scalar_expression이 필요한 문에 대한 자세한 내용은 ALL(Transact-SQL)을 참조하세요. 예를 들어 하위 쿼리에서 값 2와 3을 반환할 경우 scalar_expression = SOME(하위 쿼리)은 2의 scalar_express에 대해 TRUE로 계산됩니다. 하위 쿼리에서 값 2와 3을 반환할 경우에는 하위 쿼리 값(값 3)의 일부가 식의 조건을 만족하지 않으므로 scalar_expression = ALL(하위 쿼리)은 FALSE로 계산됩니다.

A. 간단한 예 실행

다음 문에서는 간단한 테이블을 만들고 1 열에 값 2, 3, 4ID를 추가합니다.

CREATE TABLE T1  
(ID INT) ;  
GO  
INSERT T1 VALUES (1) ;  
INSERT T1 VALUES (2) ;  
INSERT T1 VALUES (3) ;  
INSERT T1 VALUES (4) ;  

다음 쿼리는 TRUE이 테이블의 일부 값보다 작기 때문에 3를 반환합니다.

IF 3 < SOME (SELECT ID FROM T1)  
PRINT 'TRUE'   
ELSE  
PRINT 'FALSE' ;  

다음 쿼리는 FALSE이 테이블의 모든 값보다 작기 때문에 3를 반환합니다.

IF 3 < ALL (SELECT ID FROM T1)  
PRINT 'TRUE'   
ELSE  
PRINT 'FALSE' ;  

B. 실제 예 실행

다음 예에서는 SalesOrderID 데이터베이스에서 지정한 AdventureWorks2022의 모든 구성 요소를 지정된 기간 내에 제조할 수 있는지 여부를 결정하는 저장 프로시저를 만듭니다. 이 예에서는 하위 쿼리를 사용하여 특정 DaysToManufacture의 모든 구성 요소에 대해 SalesOrderID 값의 숫자 목록을 만든 다음 하위 쿼리에서 반환한 값 중 지정된 일 수를 초과하는 값이 있는지 테스트합니다. 반환된 DaysToManufacture의 모든 값이 제공된 숫자보다 작을 경우 조건은 TRUE이며 첫 번째 메시지가 출력됩니다.

-- Uses AdventureWorks

CREATE PROCEDURE ManyDaysToComplete @OrderID INT, @NumberOfDays INT  
AS  
IF   
@NumberOfDays < SOME  
   (  
    SELECT DaysToManufacture  
    FROM Sales.SalesOrderDetail  
    JOIN Production.Product   
    ON Sales.SalesOrderDetail.ProductID = Production.Product.ProductID   
    WHERE SalesOrderID = @OrderID  
   )  
PRINT 'At least one item for this order can''t be manufactured in specified number of days.'
ELSE   
PRINT 'All items for this order can be manufactured in the specified number of days or less.' ;

프로시저를 테스트하려면 SalesOrderID``49080일이 필요한 한 개의 구성 요소 및 0일이 필요한 두 개의 구성 요소가 포함되어 있는 2을 사용하여 프로시저를 실행합니다. 첫 번째 문은 조건을 만족합니다. 두 번째 쿼리는 만족하지 않습니다.

EXECUTE ManyDaysToComplete 49080, 2 ;  

결과 집합은 다음과 같습니다.

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

EXECUTE ManyDaysToComplete 49080, 1 ;  

결과 집합은 다음과 같습니다.

At least one item for this order can't be manufactured in specified number of days.

추가 정보