2012-05-18 2 views
80

Я хотел бы знать, существуют ли различия между двумя операторами not equal<> и != в Oracle.Есть ли разница между «! =» И «<>» в Oracle Sql?

Существуют ли случаи, когда они могут давать разные результаты или различную производительность?

+5

возможный дубликат [Oracle не Равно Оператора] (http://stackoverflow.com/questions/4089771/oracle-not-equals-operator) – Mesop

+1

Возможный дубликат [Oracle Not Equals Operator] (https://stackoverflow.com/questions/4089771/oracle-not-equals-operator) –

ответ

71

Нет никакой разницы вообще в функциональности.
(То же самое верно и для всех других СУБД - большинство из них поддерживает оба стиля):

Вот текущий справочник SQL: https://docs.oracle.com/database/121/SQLRF/conditions002.htm#CJAGAABC

Стандарт SQL определяет только один оператор для "не равна "и это <>

+4

! = Легче хранить в XML-файле! –

32

на самом деле, есть четыре формы этого оператора:

<> 
!= 
^= 

и даже

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

, которые являются одинаковыми, но трактуется по-разному, когда требуется дословное совпадение (хранящаяся контуры или кэшированные запросы).

+2

И такие вариации, как 'NOT (x = y)', возможно '! (X = y)' и т. Д.? – MatBailie

+1

Интересно! Я не знал о '^ =' (видел это сам в первый раз, когда я разместил ссылку на руководство). Но ваш вопрос о кешированных запросах является хорошим. –

+1

@Dems: в 'Oracle', boolean не является первоклассным типом в' SQL' (который отличается от 'PL/SQL'). I. e. вы не можете «SELECT 1 = 1 FROM dual», как в некоторых других системах. Таким образом, булевы имеют свой собственный набор операторов, действительный только в логических контекстах ('WHERE' или' HAVING' или аналогичные предложения). 'NOT' является единственным логическим оператором отрицания в Oracle' SQL' (AFAIK). – Quassnoi

1

В университете мы учили «лучшей практике» использовать! = При работе для работодателей, хотя все вышеперечисленные операторы имеют одинаковую функциональность.

+13

Стандарт SQL (только) определяет '<>' как оператор «не равно». Поэтому я бы подумал об использовании этого в качестве «лучшей практики» –

+2

Интересно. Может потребоваться проверить все остальное, чему меня учили, по стандарту SQL или нет. Спасибо, что указали это. –

+8

Наверное, мое наследие C выходит, но я не могу стоять '<>' и предпочитаю '! ='. В основном потому, что '<>' в своем высказывании «меньше или больше» мне кажется, что тип данных имеет неявный порядок (что необязательно верно, хотя оно верно для всех типов данных SQL), тогда как '! = 'говорит« не равно »в очень чистом смысле. –

-2

Согласно этой статье,! = Выполняет быстрее

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

+11

Несмотря на популярность, этот сайт, к сожалению, не является надежным источником по многим темам. Этот вопрос обсуждался ранее [здесь] (http://stackoverflow.com/q/12003127/409172).Несмотря на щедрость, никто не смог создать тестовый пример, демонстрирующий заметную разницу в производительности. Но мое предложение все еще стоит - я дам вам 500 очков, если вы сможете создать тестовый пример, показывающий, что! = Быстрее, чем другие операторы, не равные. –

Смежные вопросы