programing

SQL : <=와 >= 사이

telebox 2023. 4. 7. 21:08
반응형

SQL : <=와 >= 사이

SQL Server 2000 및 2005의 경우:

  • 두 개의 입니까?WHERE★★★★★★★★★★★★★★★★★?
  • 어떤 시나리오에서 어떤 것을 사용해야 할까요?

질문 1:

SELECT EventId, EventName
FROM EventMaster
WHERE EventDate BETWEEN '10/15/2009' AND '10/18/2009'

질문 2:

SELECT EventId, EventName
FROM EventMaster
WHERE EventDate >='10/15/2009'
  AND EventDate <='10/18/2009'

(편집: 두 번째 이벤트 날짜가 원래 누락되었기 때문에 쿼리가 구문적으로 잘못되었습니다.)

다 똑같아요.BETWEEN는, 양쪽의긴입니다( 「어느 쪽인가」, 「어느 쪽인가」).EventDate >= '10/15/2009' and EventDate <= '10/19/2009'를 참조해 주세요.

긴 합니다.BETWEEN다하면 안 둘 다 하면 안 때문에) 동작하지 .

Select EventId,EventName from EventMaster
where EventDate >= '10/15/2009' and EventDate < '10/19/2009'

())<<=두째번조조조조 。

둘 다 똑같아요.

주의할 점은 DATETIME에 대해 이 항목을 사용할 경우 종료 날짜에 대한 일치가 하루의 시작이 된다는 것입니다.

<= 20/10/2009

다음과 같지 않습니다.

<= 20/10/2009 23:59:59

(과() 일치합니다.<= 20/10/2009 00:00:00.000)

일일 ~일도 although although although although 。BETWEEN읽기 쉽고 유지보수가 용이하며, 시간 구성요소가 없어도 날짜 문제가 될 수 있기 때문에 사용을 권장하는 경우는 거의 없습니다.

를 들어가 일반적입니다.BETWEEN first AND last 게 더dt >= first AND dt < next-first인 문제도 - 부터 (시간적인 문제를 해결한다.) - 시간적인 문제를 해결한다.last, 「1」의 보다 1 .next-first( 루 ( (빼 )

또한 하한과 상한을 올바른 순서로 지정해야 합니다(예:BETWEEN low AND high를 참조해 주세요.

일반적으로는 차이가 없습니다.BETWEEN키워드는 모든 RDBMS 플랫폼에서 지원되는 것은 아니지만 지원되는 경우 2개의 쿼리는 같아야 합니다.

그것들은 동일하기 때문에 속도나 그 밖의 어떤 점에서도 차이가 없습니다.당신이 보기엔 좀 더 자연스러운 것을 사용하세요.

@marc_s, @Cloud 등이 설명한 바와 같이폐쇄 범위에서도 기본적으로 동일합니다.

단, 시간 값이 소수일 경우 마지막 순간 이후 종료 이 있는 하프 오픈 범위(더 크거나 같거나 더 작거나)가 아닌 닫힌 범위(더 크거나 같거나 작거나)에서 문제가 발생할 수 있습니다.

따라서 쿼리가 다음과 같이 다시 작성되지 않도록 해야 합니다.

SELECT EventId, EventName
  FROM EventMaster
 WHERE (EventDate >= '2009-10-15' AND
        EventDate <  '2009-10-19')    /* <<<== 19th, not 18th */

★★BETWEEN반오픈 인터벌에서는 동작하지 않습니다.사용하는 날짜/시간 쿼리를 항상 꼼꼼히 살펴봅니다.이치

는 조금 더 요.BETWEEN한 필드에 범위가 있는지 확인하고 있음을 독자에게 즉시 알 수 있기 때문입니다.이는 테이블에 유사한 필드 이름이 있는 경우에 특히 해당됩니다.

를 들어 우리 둘 다 transactiondate a. a. a.transitiondate

transactiondate between ...

나는 이 테스트의 양끝이 이 한 분야에 반대한다는 것을 즉시 알았다.

내가 읽으면

transactiondate>='2009-04-17' and transactiondate<='2009-04-22'

두 필드가 동일한지 확인하기 위해 잠시 시간을 더 들여야 합니다.

또한 쿼리는 시간이 지남에 따라 편집되기 때문에 엉성한 프로그래머가 두 필드를 분리할 수 있습니다.이런 질문들을 많이 봐왔어요

where transactiondate>='2009-04-17'
  and salestype='A'
  and customernumber=customer.idnumber
  and transactiondate<='2009-04-22'

만약 그들이 이걸 시도한다면BETWEEN물론 구문 오류가 발생하여 즉시 수정됩니다.

제 생각에 유일한 차이는 각각의 질의에 대한 구문설탕의 양입니다. BETWEN은 두 번째 질의와 정확히 같은 말을 하는 교묘한 방법일 뿐입니다.

RDBMS 고유의 차이가 있을 수 있습니다만, 실제로는 그렇게 생각하지 않습니다.

논리적으로 전혀 차이가 없다.성능 면에서는 일반적으로 대부분의 DBMS에서 차이가 없습니다.

논리적으로는 무한히 동등한 진술이 있지만, 세 가지를 고려하겠습니다.

사례 1: 표준 순서에서의 두 가지 비교 (평가 순서 확정)

A > = 최소 바인딩 및 A <= 최대 바인딩

사례 2: 구문설탕 (평가 순서는 작성자가 선택하지 않음)

A 최소값과 최대값 사이

사례 3: 교육받은 순서대로 두 가지 비교 (평가 순서는 기입 시 선택)

A > = 최소 바인딩 및 A <= 최대 바인딩

또는

A <= MaxBound AND >= MinBound

내 경험상 케이스 1과 케이스 2는 데이터셋을 잘 모르기 때문에 성능 면에서 일관되거나 눈에 띄는 차이가 없습니다.

그러나 사례 3은 실행 시간을 크게 단축할 수 있습니다.특히 대규모 데이터 세트를 사용하고 있으며 A가 MaxBound보다 클 가능성이 높은지 MinBound보다 작은지에 대한 경험적 지식이 있는 경우 사례 3을 사용하여 비교 순서를 지정함으로써 실행 시간을 현저하게 향상시킬 수 있습니다.

한 가지 사용 사례는 특정 간격 내의 레코드에 대해 인덱싱되지 않은 날짜가 포함된 대규모 기록 데이터 세트를 쿼리하는 것입니다.쿼리를 작성할 때 지정된 간격 이전 또는 지정된 간격 이후 데이터가 더 있는지 파악하여 그에 따라 비교 순서를 지정할 수 있습니다.데이터셋의 크기, 쿼리의 복잡성, 첫 번째 비교로 필터링된 레코드의 양에 따라 실행 시간이 절반까지 단축되었습니다.

이 시나리오에서는col BETWEEN ... AND ...그리고.col <= ... and col >= ...동등합니다.


SQL Standard는 또한 T461 Symmetric BETWEN 술어를 정의합니다.

 <between predicate part 2> ::=
 [ NOT ] BETWEEN [ ASYMMETRIC | SYMMETRIC ]
 <row value predicand> AND <row value predicand>

Transact-SQL은 이 기능을 지원하지 않습니다.

BETWEEN값을 정렬해야 합니다.예:

SELECT 1 WHERE 3 BETWEEN 10 AND 1
-- no rows

<=>

SELECT 1 WHERE 3 >= 10 AND 3 <= 1
-- no rows

한편, 다음과 같습니다.

SELECT 1 WHERE 3 BETWEEN SYMMETRIC 1 AND 10;
-- 1

SELECT 1 WHERE 3 BETWEEN SYMMETRIC 10 AND 1
-- 1

정상적으로 동작합니다.BETWEEN비교값을 정렬한 후.

db <> 데모 표시

언급URL : https://stackoverflow.com/questions/1630239/sql-between-vs-and

반응형