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
비교값을 정렬한 후.
언급URL : https://stackoverflow.com/questions/1630239/sql-between-vs-and
'programing' 카테고리의 다른 글
SQL Server Management Studio에서 테이블 편집 후 변경 사항 저장 (0) | 2023.04.07 |
---|---|
SQL Server의 CASE 문에서는 OR이 지원되지 않습니다. (0) | 2023.04.07 |
.NET 콘솔애플리케이션의 글로벌 예외 핸들러 (0) | 2023.04.07 |
콘솔에 유니코드 문자를 쓰는 방법 (0) | 2023.04.07 |
저장 프로시저를 만들기 전에 저장 프로시저가 있는지 확인하는 방법 (0) | 2023.04.07 |