내가 본 SQL
용도가 모두 있다는 !=
및 <>
위해 동일하지 . 선호하는 구문은 무엇이며 왜 그렇습니까?
내가 생각 !=
나기 때문에 좋아한다 .<>
Visual Basic
NOT (A = B)
.
내가 본 SQL
용도가 모두 있다는 !=
및 <>
위해 동일하지 . 선호하는 구문은 무엇이며 왜 그렇습니까?
내가 생각 !=
나기 때문에 좋아한다 .<>
Visual Basic
NOT (A = B)
.
답변:
SQL Server AKA T-SQL을 사용하는 경우 기술적으로 동일하게 작동합니다. 저장 프로 시저에서 사용하는 경우 다른 것을 사용하는 성능상의 이유가 없습니다. 그런 다음 개인 취향으로 내려갑니다. ANSI 호환이기 때문에 <>를 사용하는 것을 선호합니다.
다양한 ANSI 표준에 대한 링크를 찾을 수 있습니다 ...
!=
모든 C- 영향 언어에 존재하기 때문에 파이썬 문서 는 항상 다음과 같이 사용하는 것을 선호했습니다 . 파이썬 문서 는 " C와 일관성을 유지하기 위해 양식 <>
과 !=
동등하며 !=
선호됩니다. !=
아래 <>
에 언급 된 부분도 허용됩니다. <>
맞춤법은 시대에 뒤 떨어진 것으로 간주됩니다. " 그러나 SQL은 파이썬이 아닙니다!
<>
를 통해 !=
"T-SQL은 두 가지를 지원하는 표준 양식을 선택하는 경우의 예를 들어"없습니다 "쿼리 마이크로 소프트 SQL 서버는"그들이 말하는 특히 70-461 시험 Microsoft Press에서 교육 키트 예를 들어, ANSI 준수를위한 "연산자 : <> 및! =와 같습니다. 전자는 표준이고 후자는 그렇지 않습니다.이 경우는 참신해야합니다. 표준으로 가십시오!"
대부분의 데이터베이스는 !=
(인기 프로그래밍 언어) 및 <>
(ANSI)를 지원합니다.
데이터베이스가 모두 지원 !=
과 <>
:
!=
및<>
!=
및<>
!=
및<>
!=
및<>
!=
및<>
!=
및<>
!=
및<>
!=
및<>
!=
및<>
독점적으로 ANSI 표준 연산자를 지원하는 데이터베이스 :
NOT (a = b)
는 (a <> b)
또는 대신에 매핑됩니다 (a != b)
. 내부적으로 동일합니까?
'<>'
로부터 인 SQL-92 표준 과 '!='
A는 고유 T-SQL 연산자. 다른 데이터베이스에서도 사용할 수 있지만 표준이 아니기 때문에 사례별로 가져와야합니다.
대부분의 경우 어떤 데이터베이스에 연결하고 있는지 알기 때문에 이것이 실제로 문제가되지는 않습니다. 최악의 경우 SQL에서 검색하고 교체해야 할 수도 있습니다.
!=
는 그 일부가 아닙니다. 모든 실질적인 목적을 위해 사실상 표준이지만 표준 기능과 혼동하지 말아야합니다.
ANSI SQL 표준은 <>
"같지 않음"연산자로 정의합니다 .
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt ( 5.2 <token> and <separator>
)
!=
ANSI / SQL 92 표준에 따른 연산자 는 없습니다 .
<>
SQL-92 표준에 따른 유효한 SQL입니다.
http://msdn.microsoft.com/en-us/library/aa276846(SQL.80).aspx
SQL Server 와 관련하여 유효하고 동일합니다 .
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/not-equal-to-transact-sql-exclamation
!=
ANSI가 아니더라도 읽기 쉬운 언어로서 SQL의 진정한 정신에 더 가깝습니다. 비명을 지르지 않습니다.
<>
그것은 나에게 (보다 작거나 큼) 이상하다고 말합니다. 나는 그것이 동등하지 않은 것보다 작거나 크다는 의도를 알고 있지만, 그것은 정말 간단한 것을 말하는 정말 복잡한 방법입니다.
방금 긴 SQL 쿼리를 가져 와서 들어 가지 않을 어리석은 여러 가지 이유로 XML 파일에 사랑스럽게 배치해야했습니다.
XML이 전혀 다운되지 않았다고 말하면 충분하며 , 조작이 난파되기 전에 <>
이를 변경 !=
하고 확인해야했습니다.
한 가지 대안은 Microsoft Docs에서 두 인수가 NULLIF 인 경우 NULLIF 연산자를 사용 <>
하거나 !=
NULL을 반환하는 것 입니다. 내가 믿는 그래서 절은 수정할 수 있습니다 WHERE 와 같은 다음과 같습니다 :<>
!=
NULLIF(arg1, arg2) IS NOT NULL
내가 알았 듯이 어떤 경우에는 날짜를 사용 <>
하고 !=
작동하지 않습니다. 따라서 위의 표현을 사용하면 필요합니다.
<>
모든 경우에서 인덱스 사용과 관련하여 잘 수행되는지 확실하지 않습니다 . 게다가, 가독성은 확실히 더 나쁘다 ...
때로는 구문을 사용하여 SQL 명령을 작성 하기 때문에 !=
대신 대신 사용 하는 것이 좋습니다 . 이 경우 구문 오류를 피하기 위해 사용하는 것이 더 편리합니다.<>
<s></s>
!=
둘 다 T-SQL에서 허용됩니다. 그러나 사용 <>
하는 것보다 훨씬 빠르게 작동하는!=
것 같습니다 . 방금을 사용하는 복잡한 쿼리 !=
를 실행했으며 평균 16 초가 걸렸습니다. 나는 그것들을 변경 <>
했고 쿼리는 이제 평균 4 초가 걸립니다. 대단한 개선입니다!
그것들은 같은 방식으로 작동하지만 !=
정확히 "같지 않음"을 의미하지만<>
의미 저장된 값보다 크거나 작음 의미합니다.
고려 >=
하거나 <=
, 쿼리에 인덱스 감안하면이 이해가됩니다 ...<>
가 있습니다. 일부 경우 (올바른 인덱스 사용) 더 빨리 실행되지만 다른 경우에는 (인덱스 사용 안함) 동일하게 실행됩니다.
이것은 또한 데이터베이스 시스템이 값을 읽는 방법에 따라 달라집니다 !=
및 <>
. 데이터베이스 공급자는 바로 가기를 바로 사용하고 기능을 동일하게 만들 수 있으므로 어떤 식 으로든 이점이 없습니다 .PostgreSQL과 SQL Server는 바로 가기를 사용하지 않습니다. 위에 표시된대로 읽습니다.