Я бачив, 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 не скорочують цього; воно читається так, як показано вище.