896 Stimmen

Sollte ich != oder <> für nicht gleich in T-SQL verwenden?

Ich habe gesehen SQL die sowohl != y <> para nicht gleich . Was ist die bevorzugte Syntax und warum?

Ich mag != denn <> Erinnert mich an Visual Basic .

7 Stimmen

1 Stimmen

Übertragbarkeit des Codes. Wenn Ihre Anforderungen durch ANSI-SQL leicht erfüllt werden können, ist es besser, es zu verwenden. Sie können denselben Code in allen DBs verwenden. Z.B. ein SQL-Buchautor, der die Grundlagen von SQL anhand von Beispielcode veranschaulichen möchte.

2 Stimmen

Ich möchte ein Beispiel hinzufügen, bei dem nur ANSI-SQL-Code ein Problem sein kann - Standard-SQL unterstützt die Optionen NULLS FIRST und NULLS LAST, um zu steuern, wie NULLs sortiert werden, aber T-SQL unterstützt diese Option nicht.

798voto

Bill Karwin Punkte 493880

Die meisten Datenbanken unterstützen != (gängige Programmiersprachen) und <> (ANSI).

Datenbanken, die beides unterstützen != y <> :

Datenbanken, die den ANSI-Standardoperator unterstützen, ausschließlich :

  • IBM DB2 UDB 9.5: <>
  • Microsoft Access 2010: <>

1 Stimmen

Django ORM Query Maps zu NOT (a = b) anstelle von (a <> b) o (a != b) . Ist es intern dasselbe?

7 Stimmen

@buffer, sie sind logischerweise dasselbe, d. h. es würde dieselbe Menge von Zeilen abgleichen oder ausschließen. Aber ob eine bestimmte RDBMS-Marke das Gleiche optimiert, hängt von der Implementierung ab. Es würde mich daher überraschen, wenn es Unterschiede zwischen den verschiedenen Datenbankmarken gäbe.

0 Stimmen

Nebenbemerkung: LINQ in C# müssen Sie verwenden !=

592voto

DBAndrew Punkte 6710

Technisch gesehen funktionieren sie gleich, wenn Sie SQL Server AKA T-SQL verwenden. Wenn Sie sie in gespeicherten Prozeduren verwenden, gibt es keinen Leistungsgrund, die eine oder die andere zu verwenden. Dann kommt es auf die persönliche Vorliebe an. Ich bevorzuge <>, da es ANSI-konform ist.

Links zu den verschiedenen ANSI-Normen finden Sie unter...

http://en.wikipedia.org/wiki/SQL

53 Stimmen

Ich hatte es immer vorgezogen, die != weil es in jeder C-beeinflussten Sprache, die ich benutzt habe, vorhanden ist, und weil die Python-Dokumentation sagt: "Die Formulare <> et != sind gleichwertig; aus Gründen der Kohärenz mit C, != bevorzugt wird; wobei != ist nachstehend aufgeführt <> wird ebenfalls akzeptiert. Die <> Die Rechtschreibung gilt als veraltet." Aber SQL ist nicht Python!

28 Stimmen

Ich verwende gerne <>, weil es mich an XML erinnert. Aber SQL ist nicht XML!

46 Stimmen

Ja; Microsoft selbst empfiehlt die Verwendung von <> en != speziell für die ANSI-Konformität, z.B. in der Microsoft Press-Schulungsmappe für die Prüfung 70-461, "Querying Microsoft SQL Server", heißt es: "Als Beispiel dafür, wann die Standardform zu wählen ist, unterstützt T-SQL zwei "nicht gleich"-Operatoren: <> und !=. Der erste ist Standard, der zweite nicht. In diesem Fall sollte es kein Problem sein, sich für die Standardform zu entscheiden!"

121voto

Adam Lassek Punkte 34556

'<>' ist vom SQL-92-Standard y '!=' es un proprietär T-SQL-Operator. Er ist auch in anderen Datenbanken verfügbar, aber da er nicht zum Standard gehört, müssen Sie ihn von Fall zu Fall einsetzen.

In den meisten Fällen wissen Sie, mit welcher Datenbank Sie sich verbinden, so dass dies nicht wirklich ein Problem ist. Schlimmstenfalls müssen Sie in Ihrem SQL suchen und ersetzen.

0 Stimmen

Ich habe gesehen, dass mysql sql es auch verwendet

6 Stimmen

Können wir eine so weit verbreitete Erweiterung der Standardsprache weiterhin als proprietär ein? Zum jetzigen Zeitpunkt scheint es, dass die Norm aktualisiert werden sollte, um beide Syntaxen vorzuschreiben oder zumindest zuzulassen.

6 Stimmen

@JohanBoule Nun, es gibt einen schriftlichen Standard für SQL und meines Wissens nach != ist nicht Teil davon. Auch wenn es sich in der Praxis um einen Defacto-Standard handelt, sollten wir nicht verwechseln, was Standardmerkmale sind und was nicht.

46voto

mmx Punkte 400975

Der ANSI SQL Standard definiert <> als "nicht gleich"-Operator,

http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt ( 5.2 <token> and <separator> )

Es gibt keine != Operator nach dem ANSI/SQL 92-Standard.

1 Stimmen

Sie wissen schon, dass der 92er Standard mehr als 25 Jahre alt ist? ..... Wenn Sie SQL nach einem 25 Jahre alten Standard schreiben, mache ich mir ein wenig Sorgen um Ihren Code, ehrlich gesagt.....

4 Stimmen

@Yunfei Chen Der Punkt ist nicht, dass die Leute wahrscheinlich in einem System schreiben, das nur unterstützt Dinge, die im ANSI/SQL 92-Standard enthalten sind. Der Punkt ist, dass Dinge, die im ANSI/SQL 92-Standard enthalten sind, eine breitere und konsistente Abdeckung in Datenbanksystemen haben als Dinge, die nicht im Standard enthalten sind. Das ist Grund genug, "<>" zu bevorzugen. Wenn jemand ein neues DBMS entwickelt, auf das Ihr bestehender Datenbankcode eines Tages portiert werden könnte, und es nur einen der beiden Operatoren unterstützt, ist es sehr viel wahrscheinlicher, dass es "<>" ist als "!=".

2 Stimmen

Wenn Sie DB-Code zwischen DBMS portieren, wird das Ändern von != in <> das geringste Problem sein...

40voto

Justin Niessner Punkte 235353

<> ist das gültige SQL nach dem SQL-92-Standard.

http://msdn.microsoft.com/en-us/library/aa276846(SQL.80).aspx

6 Stimmen

Beide sind gültig, aber '<>' ist der SQL-92-Standard.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X