Czy jest jakaś różnica między „! =” I „<>” w Oracle Sql?

123

Chciałbym wiedzieć, czy są jakieś różnice między tymi dwoma not equaloperatorami <>iw !=Oracle.

Czy są przypadki, w których mogą dać inne wyniki lub inną wydajność?

Mesop
źródło
5
możliwy duplikat operatora Oracle Not Equals
Mesop
1
Możliwy duplikat operatora Oracle Not Equals

Odpowiedzi:

110

Nie, nie ma żadnej różnicy w funkcjonalności.
(To samo dotyczy wszystkich innych DBMS - większość z nich obsługuje oba style):

Oto aktualne odniesienie do SQL: https://docs.oracle.com/database/121/SQLRF/conditions002.htm#CJAGAABC

Standard SQL definiuje tylko jeden operator dla „ nie równa się ” i to jest<>

koń bez imienia
źródło
14
! = łatwiej przechowywać w pliku XML!
Mark McLaren
Czy IS NOTodpowiednik / synonomiczny / .. to <>i !=? Czy wszystkie trzy mogą być używane w ten sam sposób?
orzechowy o przystojnym
50

W rzeczywistości istnieją cztery formy tego operatora:

<>
!=
^=

i nawet

¬= -- worked on some obscure platforms in the dark ages

które są takie same, ale traktowane inaczej, gdy wymagane jest dopasowanie dosłowne (zapisane kontury lub zapytania w pamięci podręcznej).

Quassnoi
źródło
2
A odmiany takie jak NOT(x = y), może !(x = y)itp.?
MatBailie
1
Ciekawy! Nie wiedziałem o tym ^=(sam to widziałem za pierwszym razem, kiedy zamieściłem link do instrukcji). Ale twoja uwaga dotycząca zapytań w pamięci podręcznej jest dobra.
a_horse_with_no_name
1
@Dems: in Oracle, boolean nie jest typem pierwszej klasy w SQL(który różni się od PL/SQL). I. e. nie możesz SELECT 1 = 1 FROM duallubić w innych systemach. Więc booleans mieć swój własny zestaw operatorów ważny tylko w kontekstach logicznych ( WHERElub HAVINGlub podobnych klauzul). NOTjest jedynym logicznym operatorem negacji w Oracle SQL(AFAIK).
Quassnoi
3
¬= -- worked on some obscure platforms in the dark ages- tak, nazywano je „komputerami mainframe IBM”. Od czasów, gdy mężczyźni byli mężczyznami, kobiety były kobietami, dinozaury wędrowały po ziemi, a komputery były chłodzone wodą. :-)
Bob Jarvis - Przywróć Monikę
1

Na uniwersytecie uczono nas, że „najlepszą praktyką” jest używanie! = Podczas pracy dla pracodawców, chociaż wszyscy powyżsi operatorzy mają tę samą funkcjonalność.


źródło
14
Standard SQL (tylko) definiuje się <>jako operator „nie równa się”. Więc rozważę użycie tego jako „najlepszej praktyki”
a_horse_with_no_name
2
Ciekawy. Być może będę musiał sprawdzić, czy wszystko, czego mnie nauczono, jest w standardzie SQL, czy nie. Dzięki za wskazanie tego.
11
Prawdopodobnie ujawni się moje dziedzictwo C, ale nie mogę znieść <>i wolę !=. Głównie dlatego, <>że mówiąc „mniejszy lub większy niż” wydaje mi się zakładać, że typ danych ma niejawną kolejność (co niekoniecznie jest prawdą, chociaż jest prawdziwe dla wszystkich typów danych SQL), podczas gdy !=stwierdzenie „nie równe” w bardzo czystym sensie.
Jeffrey Kemp
1
Standardy kodowania są często zależne od pracodawcy. Jeśli Twój pracodawca nie ma standardu kodowania, dobrym pomysłem jest wybranie przez zespół standardu publicznego.
Denise Skidmore
-3

Zgodnie z tym artykułem! = Działa szybciej

http://www.dba-oracle.com/t_not_equal_operator.htm

user5063308
źródło
18
Chociaż popularna, ta witryna niestety nie jest wiarygodnym źródłem wielu tematów. Ta kwestia była omawiana wcześniej tutaj . Pomimo nagrody, nikt nie był w stanie stworzyć przypadku testowego wykazującego zauważalną różnicę w wydajności. Ale moja oferta jest nadal aktualna - dam ci nagrodę w wysokości 500 punktów, jeśli możesz stworzyć przypadek testowy pokazujący, że! = Jest szybszy niż inne operatory nierówne.
Jon Heller