programing

SQL ANY & ALL 연산자

skycolor 2023. 9. 19. 20:57
반응형

SQL ANY & ALL 연산자

저는 sql을 사용하기 시작했고 많은 이야기를 들었습니다.ANY그리고.ALL오퍼레이터들.누가 어떤 종류의 쿼리에 사용되는지 그리고 어떻게 작동하는지 설명해 주실 수 있나요?

ANY그리고.ALL연산자를 사용하면 단일 열 값과 다른 값의 범위를 비교할 수 있습니다.예를 들어 다음과 같습니다.

select * from Table1 t1 where t1.Col1 < ANY(select value from Table2)

ANY범위의 값 중 하나에 대해 작업이 참일 경우 조건이 충족됨을 의미합니다.ALL범위의 모든 값에 대해 작업이 참일 경우에만 조건이 충족됨을 의미합니다.

가정에 더 가까이 다가갈 수 있는 예제를 사용하려면 다음을 수행합니다.

select * from Table1 t1 where t1.Col1 = ANY(select value from Table2)

이 작업을 수행하는 것과 동일합니다.

select * from Table1 t1 where t1.Col1 in (select value from Table2)

나는 많은 것을 들었습니다.ANY그리고.ALL오퍼레이터들

약간 놀랬네요.제가 직접 사용하는 경우는 거의 없습니다.더 흔히 볼 수 있는 것은WHERE val IN (subquery)그리고.WHERE EXISTS (subquery).

@Adam Robinson의 예를 빌리려면:

SELECT * 
  FROM Table1 AS t1 
 WHERE t1.Col1 < ANY (
                      SELECT value 
                        FROM Table2
                     );

저는 보통 이렇게 쓰는 것을 더 많이 봅니다.

SELECT * 
  FROM Table1 AS t1 
 WHERE EXISTS (
               SELECT *
                 FROM Table2 AS t2
                WHERE t1.Col1 < t2.value
              );

술어의 매개변수() 때문에 이 구문을 읽기가 더 쉽다고 생각합니다.t1.Col1그리고.t2.value(각각) 더 가까이에 있습니다.

위의 답변은 "ANY"의 일부 측면을 다루었으며 "ALL"은 다루지 않았습니다.

이 두 가지 모두 다른 테이블과 비교할 때 유용하며 해당 테이블의 항목이 동적으로 변경됩니다.

특히 < ANY 및 > ANY의 경우에 해당되며, 정적 인수의 경우 MAX/MIN을 각각 취하고 "ANY"를 삭제할 수 있습니다.

예를 들어, 이 쿼리는 -

SELECT 상품명, 상품제품의 ID WHERE 제품ID > ANY (100, 200, 300);

다음으로 단순화할 수 있습니다.

SELECT 상품명, 상품제품의 ID WHERE 제품ID > 100;

"ALL" 쿼리는 하나의 열 값을 ALL(...)과 비교하게 되며, "ALL" 인수가 동일하지 않은 한 항상 거짓이 됩니다.

전 - 의 경우

SELECT 상품명, 상품제품의 ID WHERE 제품ID = ALL (SELECT 상품)ID FROM 주문 세부 정보);

하위 쿼리가 -와 같이 다중 값일 때 항상 비어 있거나 거짓입니다.

SELECT 상품명, 상품제품의 ID WHERE 제품ID = ALL (10, 20, 30);

Adam의 답변에 덧붙여 구문이 모호할 수 있음을 주의하십시오.

SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;

여기서 ANY는 하위 쿼리가 부울 값을 가진 하나의 행을 반환하는 경우 하위 쿼리를 도입하거나 집합 함수로 간주할 수 있습니다.(postgresql.org 경유)

여기에 일부 컨텍스트를 넣을 수 있는 샘플 쿼리입니다.우리가 메이저리그 선수들에 대한 데이터베이스를 가지고 있고 푸에르토리코의 일반적인 성씨에 대한 데이터베이스를 가지고 있다고 가정해 보겠습니다.누군가가 푸에르토리코 선수들이 MLB에서 얼마나 흔한지 보고 싶어했다고 가정해 보겠습니다.다음 쿼리를 실행할 수 있습니다.

SELECT mlb_roster.last_name FROM mlb_roster WHERE mlb_roster.last_name = ANY (SELECT common_pr_names.last_name FROM common_pr_names)

여기서 쿼리는 MLB 로스터의 성을 비교하고 일반적인 푸에르토리코 이름 목록에도 있는 성만 표시하는 것입니다.

언급URL : https://stackoverflow.com/questions/5980474/sql-any-all-operators

반응형