Есть ли разница между «! =» И «<>» в Oracle Sql?


123

Я хотел бы знать, есть ли различия между этими двумя not equalоператорами <>и !=в Oracle.

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


5
возможный дубликат Oracle Not Equals Operator
месоп

1
Возможный дубликат Oracle Not Equals Operator

Ответы:


110

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

Вот текущая ссылка на SQL: https://docs.oracle.com/database/121/SQLRF/conditions002.htm#CJAGAABC

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


14
! = проще хранить в файле XML!
Mark McLaren

Является IS NOTэквивалентом / синонимом / .. к <>и !=? Можно ли использовать все три одинаково?
Безумный о Натти

50

На самом деле существует четыре формы этого оператора:

<>
!=
^=

и даже

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

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


2
И варианты вроде NOT(x = y), может быть !(x = y), и т. Д.?
MatBailie

1
Интересный! Я не знал про the ^=(сам впервые выложил ссылку на мануал). Но ваша точка зрения о кешированных запросах верна.
a_horse_with_no_name

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

3
¬= -- worked on some obscure platforms in the dark ages- Да, они назывались «мэйнфреймы IBM». С тех времен, когда мужчины были мужчинами, женщины были женщинами, динозавры бродили по земле, а компьютеры охлаждались водой. :-)
Боб Джарвис - Reinstate Monica

1

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


14
Стандарт SQL (только) определяет <>оператор «не равно». Так что я бы рассмотрел это как «лучшую практику»
a_horse_with_no_name

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

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

1
Стандарты кодирования часто зависят от работодателя. Если у вашего работодателя нет стандарта кодирования, команде рекомендуется выбрать общедоступный.
Дениз Скидмор

-3

Согласно этой статье! = Работает быстрее

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


18
Несмотря на свою популярность, этот сайт, к сожалению, не является надежным источником по многим темам. Этот вопрос обсуждался здесь ранее . Несмотря на награду, никто не смог создать тестовый пример, демонстрирующий заметную разницу в производительности. Но мое предложение все еще в силе - я дам вам 500 баллов, если вы сможете создать тестовый пример, показывающий, что! = Быстрее, чем другие операторы не равенства.
Джон Хеллер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.