私が見てきたSQL
用途の両方のこと!=
と<>
のために一致しません。推奨される構文は何ですか?なぜですか?
思い出す!=
ので、私は好き<>
ですVisual Basic
。
NOT (A = B)
。
私が見てきたSQL
用途の両方のこと!=
と<>
のために一致しません。推奨される構文は何ですか?なぜですか?
思い出す!=
ので、私は好き<>
ですVisual Basic
。
NOT (A = B)
。
回答:
技術的には、SQL Server AKA T-SQLを使用している場合も同じように機能します。ストアドプロシージャで使用している場合は、どちらを使用してもパフォーマンス上の理由はありません。それは個人の好みに帰着します。ANSI準拠であるため、<>を使用することをお勧めします。
さまざまなANSI標準へのリンクは、次の場所にあります。
!=
したすべてのCの影響を受けた言語にその存在があり、Pythonのドキュメントに次のように記載されているため、私は常に使用することを好んでいました:「フォーム<>
と!=
同等です。Cとの一貫性のために、!=
優先!=
されます<>
。<>
スペルは旧式と考えられています。」しかし、SQLはPythonではありません。
<>
することを推奨してい!=
ます。たとえば、70-461試験用のMicrosoft Pressトレーニングキット「Querying Microsoft SQL Server」では、「標準フォームを選択するタイミングの例として、T-SQLは2つの等しい」演算子:<>と!=。前者は標準であり、後者はそうではありません。このケースは非常に簡単です:標準的なものにしてください! "
ほとんどのデータベースは!=
(人気のあるプログラミング言語)をサポートし、<>
(ANSI)を。
!=
との両方をサポートするデータベース<>
:
!=
および<>
!=
および<>
!=
および<>
!=
および<>
!=
および<>
!=
および<>
!=
および<>
!=
および<>
!=
および<>
ANSI標準演算子のみをサポートするデータベース:
NOT (a = b)
、(a <> b)
またはの代わりにマップされます(a != b)
。内部的に同じですか?
'<>'
であるSQL-92標準と'!='
され、独自の 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がまったくダウンし<>
ていないと言うだけで十分であり、私が!=
不正をする前に、XML を変更して自分自身をチェックする必要がありました。
1つの代替方法は、Microsoft Docsで 2つの引数がNULLIFと等しい場合にNULLを返す、<>
またはNULLIF !=
を返すNULLIF演算子を使用することです。句はのために修飾することができるWHEREだから私は信じているし、次のように:<>
!=
NULLIF(arg1, arg2) IS NOT NULL
私がそれを見つけたように、いくつかのケースで日付を使用する<>
と!=
機能しません。したがって、上記の式を使用する必要があります。
<>
すべてのコーナーケースでインデックスの使用に関して同様に機能するかどうかはわかりません。その上、読みやすさは確かにはるかに悪い...
私が使用して優先!=
の代わりに、<>
時々私が使用しているため、<s></s>
SQLコマンドを記述するために、構文を。!=
この場合、構文エラーを回避するには、を使用する方が便利です。
どちらもT-SQLで受け入れられます。ただし、を使用<>
すると、よりもはるかに高速に動作するようです!=
。を使用して複雑なクエリ!=
を実行したところ、実行に平均で約16秒かかりました。これらをに変更する<>
と、クエリの実行に平均で約4秒かかります。それは大きな改善です!
これらは同じように機能しますが、!=
正確に「等しくない」ことを<>
意味しますが、格納されている値よりも大きいまたは小さいことを意味します。
>=
またはを検討してください。<=
これは、クエリへのインデックスを考慮に入れるときに意味があります...<>
場合によっては(適切なインデックスを使用して)高速に実行が、他の場合(インデックスなし)はまったく同じように実行されます。
これは、データベースシステムが値!=
とを読み取る方法にも依存します<>
。データベースプロバイダーは、ショートカットを作成して同じように機能させるだけなので、どちらの方法でもメリットはありません。PostgreSQLとSQL Serverはこれをショートカットしません。上記のように読み取られます。