Y a-t-il une différence entre «! =» Et «<>» dans Oracle Sql?

123

Je voudrais savoir s'il y a des différences entre les deux not equalopérateurs <>et !=dans Oracle.

Y a-t-il des cas où ils peuvent donner des résultats différents ou des performances différentes?

Mesop
la source
5
duplicata possible d' Oracle Not Equals Operator
Mesop
1

Réponses:

110

Non, il n'y a aucune différence de fonctionnalité.
(La même chose est vraie pour tous les autres SGBD - la plupart d'entre eux prennent en charge les deux styles):

Voici la référence SQL actuelle: https://docs.oracle.com/database/121/SQLRF/conditions002.htm#CJAGAABC

Le standard SQL ne définit qu'un seul opérateur pour « pas égal », c'est-à-dire<>

un cheval sans nom
la source
14
! = est plus facile à stocker dans un fichier XML!
Mark McLaren
Est-ce IS NOTéquivalent / synonome / .. à <>et !=? Les trois peuvent-ils être utilisés de la même manière?
nutty about natty
50

En fait, il existe quatre formes de cet opérateur:

<>
!=
^=

et même

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

qui sont identiques, mais traités différemment lorsqu'une correspondance verbatim est requise (contours stockés ou requêtes mises en cache).

Quassnoi
la source
2
Et des variations comme NOT(x = y), peut !(x = y)- être , etc.?
MatBailie
1
Intéressant! Je ne connaissais pas le ^=(je l'ai vu moi-même la première fois lorsque j'ai posté le lien vers le manuel). Mais votre point sur les requêtes mises en cache est bon.
a_horse_with_no_name
1
@Dems: in Oracle, boolean n'est pas un type de première classe in SQL(qui est différent de PL/SQL). C'est à dire. vous ne pouvez pas SELECT 1 = 1 FROM dualaimer dans d'autres systèmes. Alors booléens ont leur propre ensemble d'opérateurs valides que dans des contextes logiques ( WHEREou HAVINGou clauses similaires). NOTest le seul opérateur de négation booléenne dans Oracle SQL(AFAIK).
Quassnoi
3
¬= -- worked on some obscure platforms in the dark ages- ouais, ils s'appelaient "mainframes IBM". Depuis l'époque où les hommes étaient des hommes, les femmes étaient des femmes, les dinosaures parcouraient la terre et les ordinateurs étaient refroidis à l'eau. :-)
Bob Jarvis - Réintégrer Monica
1

À l'université, on nous a enseigné que la «meilleure pratique» était d'utiliser! = Quand on travaillait pour des employeurs, bien que tous les opérateurs ci-dessus aient la même fonctionnalité.


la source
14
La norme SQL (uniquement) définit <>comme l'opérateur "pas égal".
J'envisagerais
2
Intéressant. Il faudra peut-être vérifier que tout ce que j'ai appris est conforme à la norme SQL ou non. Merci de l'avoir signalé.
11
Probablement mon héritage C qui sort, mais je ne peux pas supporter <>et préférer !=. Principalement parce que <>dans son énoncé «inférieur ou supérieur à», pour moi, il semble supposer que le type de données a un ordre implicite (ce qui n'est pas nécessairement vrai, même si c'est vrai pour tous les types de données SQL), alors que !=c'est dire «pas égal» dans un sens très pur.
Jeffrey Kemp
1
Les normes de codage dépendent souvent de l'employeur. Si votre employeur n'a pas de norme de codage, c'est une bonne idée pour l'équipe d'en choisir une publique.
Denise Skidmore
-3

Selon cet article,! = Fonctionne plus rapidement

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

user5063308
la source
18
Bien que populaire, ce site Web n'est malheureusement pas une source fiable sur de nombreux sujets. Ce problème a été discuté précédemment ici . Malgré la prime, personne n'a pu créer un scénario de test démontrant une différence notable de performances. Mais mon offre tient toujours - je vous donnerai une prime de 500 points si vous pouvez créer un cas de test montrant que! = Est plus rapide que d'autres opérateurs non égaux.
Jon Heller