Powinienem użyć!= or < > for not equal in T-SQL?

Widziałem SQL, który używa zarówno != jak i <> do nie równe. Jaka jest preferowana składnia i dlaczego?

Lubię !=, Ponieważ <> przypomina mi Visual Basic.

Author: DineshDB, 2009-04-07

14 answers

Technicznie działają tak samo, jeśli używasz SQL Server AKA T-SQL. Jeśli używasz go w procedurach przechowywanych, nie ma powodu do działania, aby używać jednego nad drugim. Następnie sprowadza się do osobistych preferencji. Wolę używać , ponieważ jest zgodny z ANSI.

Możesz znaleźć linki do różnych standardów ANSI na stronie...

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

 464
Author: DBAndrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-01 19:28:15

Większość baz danych obsługuje != (popularne języki programowania) i <> (ANSI).

Bazy danych obsługujące zarówno != jak i <>:

Bazy danych obsługujące standardowy operator ANSI, wyłącznie :

  • IBM DB2 UDB 9.5: <>
  • Microsoft Access 2010: <>
 667
Author: Bill Karwin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 10:05:27

'<>' jest ze Standardu SQL-92 i '!=' jest operatorem zastrzeżonym T-SQL. Jest on dostępny również w innych bazach danych, ale ponieważ nie jest to standard, musisz wziąć go indywidualnie.

W większości przypadków będziesz wiedział, do jakiej bazy danych się łączysz, więc nie jest to naprawdę problem. W najgorszym przypadku może być konieczne przeszukanie i zastąpienie w SQL.

 94
Author: Adam Lassek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-29 16:38:46

Standard ANSI SQL definiuje <> jako operator "nie równy",

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

Nie istnieje operator != zgodnie ze standardem ANSI/SQL 92.

 37
Author: Mehrdad Afshari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-01 06:49:25

<> jest poprawnym SQL zgodnie ze standardem SQL-92.

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

 23
Author: Justin Niessner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-06 06:50:41
 18
Author: madcolor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-20 11:33:43

Wydaje się, że Microsoft woli <> od !=, o czym świadczą ograniczenia tabel. Osobiście wolę używać !=, ponieważ wyraźnie odczytuję to jako "nie równe", ale jeśli wpiszesz [field1 != field2] i zapiszesz to jako ograniczenie, następnym razem, gdy zapytasz, pojawi się to jako [field1 <> field2]. To mówi mi, że poprawnym sposobem jest <>.

 14
Author: Kyle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-06 06:51:44

!=, pomimo tego, że nie jest ANSI, jest bardziej w prawdziwym duchu SQL jako języka czytelnego. To krzyczy nie równe. <> mówi, że to dla mnie (mniej niż, więcej niż), co jest po prostu dziwne. Wiem, że intencją jest to, że jest albo mniejsza, albo większa niż stąd nie równa, ale to naprawdę skomplikowany sposób powiedzenia czegoś naprawdę prostego.

Po prostu musiałem wziąć kilka długich zapytań SQL i umieścić je w pliku XML z wielu głupich powodów nie pójdę do.

Wystarczy powiedzieć, że XML w ogóle nie jest z <> i musiałem je zmienić na != i sprawdzić sam zanim się ruszyłem.

 13
Author: Fat Albert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-06 06:52:23

Możesz użyć dowolnego, co chcesz w T-SQL. Dokumentacja mówi, że oba działają w ten sam sposób. Preferuję !=, ponieważ czyta się "nie równa" mojemu (opartemu na C/C++/C#) umysłowi, ale Guru baz danych wydają się preferować <>.

 9
Author: Steve Haigh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-12 15:13:39

Rozumiem, że składnia C != jest w SQL Server ze względu na uniksowe dziedzictwo (w czasach Sybase SQL Server, pre Microsoft SQL Server 6.5).

 7
Author: Karl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-04 02:14:57

Alternatywą byłoby użycie operatora NULLIF innego niż <> lub !=, który zwraca NULL, jeśli oba argumenty są równe NULLIF w dokumentach Microsoft . Więc uważam, że gdzie klauzula może być zmodyfikowana dla <> i != w następujący sposób:

NULLIF(arg1, arg2) IS NOT NULL

Jak stwierdziłem, używanie <> i != w niektórych przypadkach nie działa. Stąd użycie powyższego wyrażenia nie jest potrzebne.

 4
Author: jitendrapurohit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-10 10:26:59

Wolałem używać != zamiast <>, ponieważ czasami używam składni <s></s> do pisania poleceń SQL. Użycie != jest bardziej przydatne, aby uniknąć błędów składniowych w tym przypadku.

 0
Author: Andrea Antonangeli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-10 17:57:49

Oba są akceptowane w T-SQL. Wydaje się jednak, że za pomocą <> działa dużo szybciej niż !=. Po prostu uruchomiłem złożone zapytanie, które używało !=, i trwało to średnio około 16 sekund. Zmieniłem je na <> i zapytanie zajmuje teraz średnio około 4 sekund, aby uruchomić. To ogromna poprawa!

 -4
Author: Hamlet Javier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-29 16:43:18

Chociaż działają one w ten sam sposób, != oznacza dokładnie "nie równe", podczas gdy {[1] } oznacza większe i mniejsze od przechowywanej wartości.

Rozważ >= lub <=, a to będzie miało sens przy faktorowaniu w Twoich indeksach zapytań... <> będą działać szybciej w niektórych przypadkach (z odpowiednim indeksem), ale w innych przypadkach (bez indeksów) będą działać tak samo.

Zależy to również od tego, jak Twój system baz danych odczytuje wartości != i <>. Dostawca bazy danych może po prostu skróć go i spraw, aby funkcjonowały tak samo, więc nie ma żadnej korzyści. PostgreSQL i SQL Server nie skracają tego skrótu; jest on odczytywany tak, jak widać powyżej.

 -9
Author: Kevin Kinchen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-29 16:44:59