Skip to content

28. ANY and ALL


1. ANY and ALL Operators

  • ANYALL 연산자는 단일 열 값과 다른 값의 범위를 비교할 수 있다.


2. Syntax

1) ANY

  • ANY 연산자는 결과로 부울 값을 반환하고, 하위 커리 값 중 하나라도 조건을 충족하는 경우 TRUE를 반환한다.
  • ANY 연산자는 범위의 값 중 하나에 대해 연산이 참인 경우 조건이 참임을 의미한다.


SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
    (SELECT column_name
    FROM table_name
    WHERE condition);


2) ALL

  • ALL 연산자는 결과로 부울 값을 반환하고, 모든 하위 커리 값이 조건을 충족하면 TRUE를 반환한다.
  • SELECT, WHEREHAVING 문과 함께 사용된다.
  • ALL 연산자는 범위의 모든 값에 대해 연산이 참인 경우에만 조건이 참임을 의미한다.


  • ALL Syntax With SELECT


SELECT ALL column_name(s)
FROM table_name
WHERE condition;


  • ALL Syntax With WHERE or HAVING


SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL
    (SELECT column_name
    FROM tbale_name
    WHERE condition);


Demo Database

  • 다음은 Northwind 샘플 데이터베이스의 Products 테이블이다.


001


  • 다음은 Northwind 샘플 데이터베이스의 OrderDetails 테이블이다.


002


3. ANY Examples

  • 다음은 OrderDetails 테이블에서 Quantity10인 레코드를 찾으면 ProductName을 나열한다.
  • Quantity 열의 일부 값이 10이므로 TRUE가 반환된다.


SELECT ProductName
FROM Products
WHERE ProductID = ANY
    (SELECT ProductID
    FROM OrderDetails
    WHERE Quantity = 10);


  • 다음은 OrderDetails 테이블에서 Quantity99보다 큰 레코드를 찾으면 ProductName을 나열한다.
  • Quantity 열에 99보다 큰 값이 있기 때문에 TRUE가 반환된다.


SELECT ProductName
FROM Products
WHERE ProductID = ANY
    (SELECT ProductID
    FROM OrderDetails
    WHERE Quantity > 99);


  • 다음은 OrderDetails 테이블에서 Quantity1000보다 큰 레코드를 찾으면 ProductName을 나열한다.
  • Quantity 열에 1000보다 큰 값이 없기 때문에 FALSE가 반환된다.


SELECT ProductName
FROM Products
WHERE ProductID = ANY
    (SELECT ProductID
    FROM OrderDetails
    WHERE Quantity > 1000);


4. ALL Examples

  • 다음은 모든 제품 이름을 나열한다.


SELECT ALL ProductName
FROM Products
WHERE TRUE;


  • 다음은 OrderDetails 테이블의 모든 레코드에 Quantity10인 경우 ProductName을 나열한다.
  • Quantity 열에 다양한 값(10의 값뿐만 아니라)이 있기 때문에 물론 FALSE를 반환한다.


SELECT ProductName
FROM Products
WHERE ProductID = ALL
    (SELECT ProductID
    FROM OrderDetails
    WHERE Quantity = 10);

References