Я бачив, SQL
що використовує і те, !=
і не<>
для рівних . Що є кращим синтаксисом і чому?
Мені подобається !=
, тому що <>
мені це нагадує Visual Basic
.
NOT (A = B)
.
Я бачив, SQL
що використовує і те, !=
і не<>
для рівних . Що є кращим синтаксисом і чому?
Мені подобається !=
, тому що <>
мені це нагадує Visual Basic
.
NOT (A = B)
.
Відповіді:
Технічно вони працюють однаково, якщо ви використовуєте AKA T-SQL сервера SQL Server. Якщо ви використовуєте його в збережених процедурах, немає жодної причини для використання однієї іншої. Потім це зводиться до особистих переваг. Я вважаю за краще використовувати <>, оскільки це відповідає стандарту ANSI.
Ви можете знайти посилання на різні стандарти ANSI на ...
!=
його через кожну мову, на яку впливає С, і тому, що в документації Python сказано: "Форми <>
і !=
еквівалентні; для узгодженості з C !=
переважніше; де !=
згадується нижче <>
, також прийнято. <>
написання вважається застарілим «. Але SQL не Python!
<>
більш !=
конкретно для ANSI відповідності, наприклад , в Microsoft Press комплекту для навчання 70-461 іспиту, «Microsoft SQL Запитів сервер», вони кажуть « В якості прикладу , коли вибрати стандартну форму, T-SQL підтримує два« Не дорівнює "операторам: <> і! =. Перший є стандартним, а другий - ні. Цей випадок повинен бути нобілером: перейдіть на стандартний!"
Більшість баз даних підтримують !=
(популярні мови програмування) та <>
(ANSI).
Бази даних, що підтримують !=
і <>
:
!=
і<>
!=
і<>
!=
і<>
!=
і<>
!=
і<>
!=
і<>
!=
і<>
!=
і<>
!=
і<>
Бази даних, що підтримують оператор стандарту ANSI, винятково :
NOT (a = b)
замість (a <> b)
або (a != b)
. Це все так само внутрішньо?
'<>'
є стандартом SQL-92 і '!='
є власником оператора T-SQL. Він також доступний і в інших базах даних, але оскільки це не є стандартним, вам потрібно приймати його в кожному конкретному випадку.
У більшості випадків ви знаєте, до якої бази даних ви підключаєтесь, так що це насправді не проблема. У гіршому випадку, можливо, доведеться здійснити пошук і заміну у своєму SQL.
!=
це не є його частиною. Хоча для всіх практичних цілей це стандарт дефакто, ми не повинні плутати те, що є, а що не є стандартними функціями.
Стандарт ANSI SQL визначає <>
як "не рівний" оператору,
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt ( 5.2 <token> and <separator>
)
!=
Відповідно до стандарту ANSI / SQL 92 немає оператора.
<>
є дійсним SQL відповідно до стандарту SQL-92.
http://msdn.microsoft.com/en-us/library/aa276846(SQL.80).aspx
Вони є дійсними і однаковими щодо SQL Server ,
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/not-equal-to-transact-sql-exclamation
Схоже, що самі Microsoft вважають <>
за краще, !=
як свідчать обмеження в таблиці. Я особисто вважаю за краще використовувати, !=
тому що я чітко читаю, що як "не рівне", але якщо ви введете [field1 != field2]
і збережете це як обмеження, наступного разу, коли ви запитаєте його, воно з’явиться як [field1 <> field2]
. Це говорить мені, що це правильно <>
.
!=
, не дивлячись на те, що він не є ANSI, більше відповідає справжньому духу SQL як читається мовою. Це кричить не рівно.
<>
каже, що це для мене (менше, ніж більше), що просто дивно. Я знаю, що намір полягає в тому, що це або менше, або більше, ніж, отже, не рівне, але це дійсно складний спосіб сказати щось по-справжньому просто.
Мені просто доводилося брати довгі запити SQL і любовно розміщувати їх у XML-файлі через цілу купу дурних причин, в які я не буду вступати.
Досить сказати, що XML зовсім не піддається, <>
і мені довелося змінити їх !=
і перевірити себе, перш ніж я скрутився.
У T-SQL можна використовувати те, що вам подобається. У документації сказано, що вони обидва функціонують однаково. Я вважаю за краще !=
, тому що він читає "не рівний" моєму розуму (C / C ++ / C #), але, схоже, віддають перевагу гуру бази даних <>
.
Однією з альтернатив було б використання оператора NULLIF, відмінного від <>
або !=
який повертає NULL, якщо два аргументи рівні в NOCLIF в Документах Microsoft . Тому я вважаю , Інеко може бути змінено для <>
і !=
виглядає наступним чином :
NULLIF(arg1, arg2) IS NOT NULL
Як я з’ясував, у деяких випадках використання <>
та !=
не працює на дату. Отже, використання наведеного виразу робить необхідним.
<>
стосовно використання індексу у всіх кутових випадках. Крім того, читабельність, безумовно, набагато гірша ...
Я вважав за краще використовувати !=
замість того, <>
що іноді використовую <s></s>
синтаксис для запису команд SQL. Використання !=
зручніше, щоб уникнути помилок синтаксису в цьому випадку.
Обидва вони прийняті в T-SQL. Однак, здається, що використання <>
працює набагато швидше, ніж!=
. Я просто запустив складний запит, який використовував !=
, і в середньому на це знадобилося близько 16 секунд. Я змінив їх на <>
і запит зараз триває приблизно 4 секунди. Це величезне поліпшення!
Хоча вони функціонують однаково, !=
означає точно "не дорівнює", тоді як <>
означає більше і менше значення, що зберігається.
Розгляну >=
або <=
, і це буде мати сенс , коли факторинг в індексах на запити ... <>
буде працювати швидше , а в деяких випадках (з правом індексу), але і в деяких інших випадках (індекс безкоштовно) вони будуть працювати так само.
Це також залежить від того, як ваша система баз даних зчитує значення !=
та <>
. Постачальник баз даних може просто клацнути його і змусити їх функціонувати однаково, так що жодної користі не має. ПрограмаgregSQL і SQL Server не скорочують цього; воно читається так, як показано вище.