SOME | ANY(Transact-SQL)

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

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

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

인수

  • scalar_expression
    유효한 입니다.

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

  • SOME | ANY
    비교해야 함을 지정합니다.

  • subquery
    한 열의 결과 집합을 갖는 하위 쿼리입니다. 반환되는 열의 데이터 형식은 scalar_expression과 같은 데이터 형식이어야 합니다.

결과 형식

Boolean

결과 값

모든 쌍(scalar_expression**,**x)에 대해 지정된 비교 값이 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로 계산됩니다.

1. 간단한 예

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

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

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

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

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

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

2. 실제 예

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

USE AdventureWorks ;
GO

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 cannot 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.' ;

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

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 cannot be manufactured in specified number of days.