Widziałem, SQL
że używa obu !=
i <>
dla nie równych . Jaka jest preferowana składnia i dlaczego?
Lubię !=
, bo <>
mi przypomina Visual Basic
.
sql
sql-server
tsql
Bob The Janitor
źródło
źródło
NOT (A = B)
.Odpowiedzi:
Technicznie działają one tak samo, jeśli używasz SQL Server AKA T-SQL. Jeśli używasz go w procedurach przechowywanych, nie ma powodu do wydajności, aby używać jednego nad drugim. Sprowadza się to do osobistych preferencji. Wolę używać <>, ponieważ jest zgodny z ANSI.
Linki do różnych standardów ANSI można znaleźć w ...
http://en.wikipedia.org/wiki/SQL
źródło
!=
ze względu na jego istnienie w każdym używanym przeze mnie języku, a dokumentacja Pythona mówi: „Formy<>
i!=
są równoważne;!=
preferowana jest spójność z C ; tam, gdzie!=
wspomniano poniżej,<>
jest również akceptowane.<>
pisownia jest uważane za przestarzałe.” Ale SQL to nie Python!<>
w!=
celu zachowania zgodności z ANSI, np. W zestawie szkoleniowym Microsoft Press do egzaminu 70-461 „Zapytanie o Microsoft SQL Server”, mówią „Jako przykład kiedy wybrać standardowy formularz, T-SQL obsługuje dwa„ nie równa się operatorom: <> i! =. Pierwszy jest standardowy, a drugi nie. W tym przypadku powinien być nobrainer: wybierz standardowy!Większość baz danych obsługuje
!=
(popularne języki programowania) i<>
(ANSI).Bazy danych, które obsługują zarówno
!=
a<>
:!=
i<>
!=
i<>
!=
i<>
!=
i<>
!=
oraz<>
!=
i<>
!=
i<>
!=
i<>
!=
i<>
Bazy danych obsługujące standardowego operatora ANSI, wyłącznie :
<>
<>
źródło
NOT (a = b)
zamiast(a <> b)
lub(a != b)
. Czy to samo wewnętrznie?'<>'
jest z SQL-92 i'!='
jest zastrzeżonym operatorem T-SQL. Jest on dostępny również w innych bazach danych, ale ponieważ nie jest to standard, musisz brać go indywidualnie.W większości przypadków będziesz wiedział, z którą bazą danych się łączysz, więc to nie jest tak naprawdę problem. W najgorszym wypadku może być konieczne wyszukiwanie i zamiana kodu SQL.
źródło
!=
nie jest jego częścią. Chociaż dla wszystkich praktycznych celów jest to standard defacto, nie powinniśmy mylić, jakie są i nie są standardowymi funkcjami.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 ma
!=
operatora zgodnie ze standardem ANSI / SQL 92.źródło
<>
jest poprawnym SQL zgodnie ze standardem SQL-92.http://msdn.microsoft.com/en-us/library/aa276846(SQL.80).aspx
źródło
Oba są ważne i takie same w odniesieniu do SQL Server ,
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/not-equal-to-transact-sql-exclamation
źródło
Wydaje się, że Microsoft sami wolą
<>
się!=
czym świadczy w swoich ograniczeń tabeli. Osobiście wolę używać,!=
ponieważ wyraźnie czytam to jako „nie równe”, ale jeśli wprowadzisz[field1 != field2]
i zapiszesz jako constrait, przy następnym zapytaniu pojawi się jako[field1 <> field2]
. To mówi mi, że poprawny sposób to zrobić<>
.źródło
!=
, mimo że nie jest ANSI, jest bardziej w prawdziwym duchu SQL jako czytelnego języka. Wrzaski nie są równe.<>
mówi, że to dla mnie (mniej niż, więcej niż), co jest po prostu dziwne. Wiem, że intencją jest, aby była mniejsza lub większa niż odtąd nie równa, ale to naprawdę skomplikowany sposób powiedzenia czegoś naprawdę prostego.Właśnie musiałem wziąć kilka długich zapytań SQL i umieścić je z miłością w pliku XML z wielu głupich powodów, dla których nie będę wchodził.
Wystarczy powiedzieć, że XML wcale nie działa
<>
i musiałem je zmienić!=
i sprawdzić się, zanim sfałszowałem się.źródło
W T-SQL możesz używać dowolnych opcji. Dokumentacja mówi, że oba działają w ten sam sposób. Wolę
!=
, ponieważ czyta „nie równe” mojemu umysłowi (opartemu na C / C ++ / C #), ale guru bazy danych wydają się preferować<>
.źródło
Rozumiem, że składnia C
!=
jest w SQL Server ze względu na jej dziedzictwo uniksowe (w czasach Sybase SQL Server, wcześniejszych niż Microsoft SQL Server 6.5).źródło
Jedną alternatywą byłoby użycie operatora NULLIF innego niż
<>
lub!=
zwracającego NULL, jeśli dwa argumenty są równe NULLIF w Dokumentach Microsoft . Więc wierzę WHERE mogą być modyfikowane dla<>
i!=
, co następuje:Jak się przekonałem, w niektórych przypadkach używanie
<>
i!=
nie działa w przypadku daty. Dlatego użycie powyższego wyrażenia robi to, co potrzebne.źródło
<>
w odniesieniu do użycia indeksu we wszystkich przypadkach narożnych. Poza tym czytelność jest zdecydowanie gorsza ...Wolałem używać
!=
zamiast,<>
ponieważ czasami używam<s></s>
składni do pisania poleceń SQL. Użycie!=
jest bardziej przydatne, aby uniknąć błędów składniowych w tym przypadku.źródło
Oba są akceptowane w T-SQL. Wydaje się jednak, że korzystanie
<>
działa znacznie szybciej niż!=
. Właśnie uruchomiłem złożone zapytanie, którego!=
uruchomienie zajęło mi średnio około 16 sekund. Zmieniłem je na,<>
a uruchomienie zapytania zajmuje teraz średnio około 4 sekund. To ogromna poprawa!źródło
Chociaż działają w ten sam sposób,
!=
oznaczają dokładnie „nie równy”, a<>
oznaczają większą i mniejszą niż przechowywana wartość.Zastanów się
>=
lub<=
, a to będzie miało sens, gdy uwzględnisz swoje indeksy w zapytaniach ...<>
w niektórych przypadkach będzie działać szybciej (z odpowiednim indeksem), ale w niektórych innych przypadkach (bez indeksu) będą działać tak samo.Zależy to również od tego, jak system baz danych odczytuje wartości
!=
i<>
. Dostawca bazy danych może po prostu skrócić go i sprawić, by działały tak samo, więc nie ma żadnej korzyści w żaden sposób.PostgreSQL i SQL Server nie skracają tego; jest czytany tak, jak pokazano powyżej.źródło