!= (не равно) (Entity SQL)!= (Not Equal To) (Entity SQL). Не равно в sql


sql - Определите конкретное поле, которое не равно в sql

У меня есть запрос, который несколько равен следующему:

SELECT @address = a.Id FROM dbo.[Address] AS a, dbo.Item as u WHERE a.Name = u.Name AND ISNULL(a.Number, '') = ISNULL(u.Number, '') AND ISNULL(a.Floor, '') = ISNULL(u.Floor, '') AND ISNULL(a.Door, '') = ISNULL(u.Door, '') AND a.Zip = u.Zip AND u.ItemId = @id;

Вся идея состоит в том, чтобы найти адреса из dbo.Address, которые соответствуют таблице dbo.Item.

Теперь проблема заключается в том, что из этого запроса мне нужно иметь несоответствующие и определить причину, по которой они не соответствуют примеру: мы не можем найти Имя, или Номер, или пол и т.д. У меня есть пытались выполнить это, используя последовательные SELECT:

SELECT @addressId = a.Id FROM dbo.[Address] AS a, dbo.Item as u WHERE a.Name = u.Name AND u.ItemId = @id; -- Name not found IF @addressId IS NULL BEGIN SET @retval = 4 RETURN @retval; END ELSE BEGIN SELECT @addressId = a.Id FROM dbo.[Address] AS a, dbo.Item as u WHERE a.Name = u.Name AND a.Number = ISNULL(u.HusNr, '') AND u.ItemId = @id; -- Number not found IF @addressId IS NULL BEGIN SET @retval = 5 RETURN @retval; END ... and so on

но это медленно, и я думаю, что для этого нужно сделать более разумный способ.

ПРИМЕЧАНИЕ (на ответе Икара):

Проблема с этим подходом заключается в том, что он пытается объединить несколько полей одновременно. Sql пытается соединить все поля и, таким образом, вернет NULL для всей строки, а не для конкретных столбцов. Если нам нужны конкретные столбцы, нам нужно будет сделать что-то вроде:

SELECT a.Id , case when a.Name is null then 1 when a.Number is null then 2 when a.Floor is null and a.Door is null and a.Zip is null then 3 when a.Number is not null and a. Floor is not null and a.Door is not null and a.Zip is not null then 0 end as Reason FROM dbo.Item u1 left join dbo.[Address] a ON a.Name = u1.Name left join dbo.Item u2 ON a.Number = u2.Number left join dbo.Item u3 ON a.Floor = u3.Floor left join dbo.Item u4 ON a.Door = u4.Door left join dbo.Item u5 ON a.Zip = u5.Zip where u.ItemId = @id;

... но тогда мы получаем кучу результатов, которые нам не нужны, т.е. все возможные комбинации, которые снова... нам не нужны. и если мы используем приведенное выше CASE, то первое всегда верно, потому что первым результатом является все NULLs

qaru.site

Операторы сравнения Oracle PL/SQL | Oracle PL/SQL •MySQL •SQL Server

В этом учебном пособии описаны все операторы сравнения, используемые в Oracle PL/SQL для проверки равенства и неравенства, а также более продвинутые операторы.

Описание

Операторы сравнения используются в предложении WHERE, чтобы определить, какие записи выбрать. Вот список операторов сравнения, которые вы можете использовать в Oracle PL/SQL:

Операторы сравнения Описание
= Равно
, != Не равно
> Больше, чем
>= Больше или равно
Меньше, чем
Меньше или равно
IN ( ) Соответствует значению в списке
NOT
Отрицает условие
IS NULL Значение NULL
IS NOT NULL Значение, не NULL
LIKE Соответствие шаблону % и _
REGEXP_LIKE Сопоставление шаблонов с регулярными выражениями
EXISTS Условие выполняется, если подзапрос возвращает хотя бы одну строку

Рассмотрим примеры операторов сравнения, которые вы можете использовать в Oracle PL/SQL.

Пример оператора равенства

В Oracle PL/SQL вы можете использовать оператор = для проверки равенства в запросе.Например:

SELECT * FROM contacts WHERE last_name = 'Bernard';

SELECT *

FROM contacts

WHERE last_name = 'Bernard';

В этом примере оператора SELECT, возвращает все строки из таблицы contacts, где last_name равно Bernard.

Пример оператора неравенства , !=

В Oracle PL/SQL вы можете использовать операторы или !=. Для проверки неравенства в запросе.

Например, мы могли бы проверить неравенство с помощью оператора следующим образом:

SELECT * FROM contacts WHERE last_name <> 'Bernard';

SELECT *

FROM contacts

WHERE last_name <> 'Bernard';

В этом примере оператор SELECT вернет все строки из таблицы contacts, где last_name не равно Bernard.

Или вы также можете написать этот запрос с помощью оператора != следующим образом:

SELECT * FROM contacts WHERE last_name != 'Bernard';

SELECT *

FROM contacts

WHERE last_name != 'Bernard';

Оба этих запроса возвратят одинаковые результаты.

Пример оператора больше чем >

Вы можете использовать оператор > в Oracle PL/SQL для проверки выражения «более чем».

SELECT * FROM contacts WHERE contact_id > 20;

SELECT *

FROM contacts

WHERE contact_id > 20;

В этом примере оператор SELECT будет возвращать все строки из таблицы contacts, где contact_id больше 20. В набор результатов не будет включен contact_id, равный 20.

Пример оператора больше или равно >=

В Oracle PL/SQL вы можете использовать оператор >= для проверки выражения, «больше или равно».

SELECT * FROM contacts WHERE contact_id >= 20;

SELECT *

FROM contacts

WHERE contact_id >= 20;

В этом примере оператор SELECT вернет все строки из таблицы contacts, где contact_id больше или равен 20. В этом случае contact_id равный 20, будет включен в результирующий набор.

Пример оператора меньше чем

Вы можете использовать оператор в Oracle PL/SQL для проверки выражения «меньше чем».

SELECT * FROM contacts WHERE contact_id < 150;

SELECT *

FROM contacts

WHERE contact_id < 150;

В этом примере оператор SELECT вернет все строки из таблицы contacts, где contact_id меньше 150. contact_id равный 150, не будет включен в результирующий набор.

Пример оператора меньше или равно

В Oracle PL/SQL вы можете использовать оператор для проверки выражения, которое «меньше или равно».

SELECT * FROM contacts WHERE contact_id <= 150;

SELECT *

FROM contacts

WHERE contact_id <= 150;

В этом примере оператор SELECT вернет все строки из таблицы contacts, где contact_id меньше или равно 150. В этом случае product_id, равный 150, будет включен в результирующий набор.

oracleplsql.ru

!= (не равно) (Entity SQL)

  • 03/30/2017
  • Время чтения: 2 мин
  • Соавторы

В этой статье

Сравнивает два выражения, чтобы определить, является ли значение левого выражения не равным значению правого выражения.Compares two expressions to determine whether the left expression is not equal to the right expression. Действие оператора != (не равно) эквивалентно действию оператора <>.The != (Not Equal To) operator is functionally equivalent to the <> operator.

СинтаксисSyntax

expression != expression or expression <> expression

АргументыArguments

expressionЛюбое допустимое выражение.Any valid expression. Оба выражения должны иметь типы данных, допускающих неявное преобразование.Both expressions must have implicitly convertible data types.

Типы результатаResult Types

true , если значение левого выражения не равно значению правого; в противном случае - false.true if the left expression is not equal to the right expression; otherwise, false.

ПримерExample

В следующем запросе Entity SQL оператор != используется для сравнения двух выражений, чтобы определить, отличается ли значение левого выражения от значения правого.The following Entity SQL query uses the != operator to compare two expressions to determine whether the left expression is not equal to the right expression. Запрос основан на модели AdventureWorks Sales.The query is based on the AdventureWorks Sales Model. Для компиляции и запуска этого запроса выполните следующие шаги.To compile and run this query, follow these steps:

  1. Выполните процедуру из статьи Практическое руководство. Выполнение запроса, возвращающего результаты StructuralType.Follow the procedure in How to: Execute a Query that Returns StructuralType Results.

  2. Передайте следующий запрос в качестве аргумента методу ExecuteStructuralTypeQuery :Pass the following query as an argument to the ExecuteStructuralTypeQuery method:

-- != SELECT VALUE product FROM AdventureWorksEntities.Products AS product where product.ListPrice != @price -- <> SELECT VALUE product FROM AdventureWorksEntities.Products AS product where product.ListPrice <> @price

См. такжеSee Also

Справочник по Entity SQLEntity SQL Reference

docs.microsoft.com

(Не равно) (Transact-SQL)

 

ПРИМЕНЯЕТСЯ К: SQL Server (начиная с 2008) База данных SQL Azure Хранилище данных SQL Azure Parallel Data Warehouse

Сравнивает два выражения (оператор сравнения). При сравнении ненулевых выражений результат принимает значение TRUE, если левый операнд не равен правому, в противном случае результат принимает значение FALSE. Если один или оба операнда имеют значение NULL, см. в разделе SET ANSI_NULLS (Transact-SQL).

  Синтаксические обозначения в Transact-SQL

-- Syntax for SQL Server, Azure SQL Database, Azure SQL Data Warehouse, Parallel Data Warehouse expression <> expression

выражениеЛюбое допустимое выражение. Оба выражения должны иметь типы данных, допускающие неявное преобразование. Преобразование зависит от правил приоритетов типов данных.

Логическое значение

A. С помощью <> в простом запросе

В следующем примере возвращаются все строки из таблицы Production.ProductCategory, которые содержат значение в ProductCategoryID, равное 3 или 2.

SELECT ProductCategoryID, Name FROM Production.ProductCategory WHERE ProductCategoryID <> 3 AND ProductCategoryID <> 2;

Ниже приводится результирующий набор.

ProductCategoryID Name ----------------- -------------------------------------------------- 1 Bikes 4 Accessories (2 row(s) affected)

Типы данных (Transact-SQL) Операторы (Transact-SQL) Операторы сравнения (Transact-SQL)

technet.microsoft.com

sql - SQL-индексы для поиска "не равно"

Возможно, это поможет написать:

SELECT person FROM PhonesPersons WHERE phone < '+33 1234567' UNION ALL SELECT person FROM PhonesPersons WHERE phone > '+33 1234567'

или просто

SELECT person FROM PhonesPersons WHERE phone > '+33 1234567' OR phone < '+33 1234567'

PostgreSQL должен иметь возможность определить, что избирательность операции диапазона очень велика и рассмотреть возможность использования индекса для него.

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

Обоснование: поиск индекса для всех значений, не равных определенному, требует сканирования полного индекса. Напротив, поиск всех элементов меньше определенного ключа означает поиск самого большого несоответствующего элемента в дереве и сканирование назад. Аналогичным образом, поиск всех элементов больше определенного ключа в противоположном направлении. Эти операции легко выполнить с использованием b-древовидных структур. Кроме того, статистика, которую собирает PostgreSQL, должна указывать на то, что "+33 1234567" - известное частое значение: путем удаления частоты этих и нулей от 1 мы имеем долю оставшихся строк для выбора: границы гистограммы будут укажите, перекошены ли они с одной стороны или нет. Но если исключение нулей и эта частая ценность подталкивают долю рядов, остающихся достаточно низкими (Istr около 20%), должно быть целесообразно сканирование индекса. Проверьте статистику для столбца в pg_stats, чтобы узнать, какую долю он действительно рассчитал.

Обновление. Я пробовал это в локальной таблице с неопределенно похожим распределением, и обе формы выше дали нечто иное, чем простое сканирование seq. Последний (с использованием "ИЛИ" ) был сканированием растровых изображений, которое фактически может быть передано только в виде сканирования seq, если смещение к вашей общей ценности особенно экстремально... хотя планировщик может видеть это, я не думаю, что он будет автоматически перепишите на "Append (Index Scan, Index Scan)" внутренне. Отключение "enable_bitmapscan" просто заставило его вернуться к сканированию seq.

PS: индексирование текстового столбца и использование операторов неравенства может быть проблемой, если в вашем местоположении базы данных нет C. Вам может потребоваться добавить дополнительный индекс, который использует text_pattern_ops или varchar_pattern_ops; это похоже на проблему индексации для предикатов column LIKE 'prefix%'.

Альтернатива: вы можете создать частичный индекс:

CREATE INDEX PhonesPersonsOthers ON PhonesPersons(phone) WHERE phone <> '+33 1234567'

это приведет к тому, что оператор select <> -using просто сканирует этот неполный индекс: поскольку он исключает большую часть записей в таблице, он должен быть небольшим.

qaru.site

Операторы сравнения MySQL | Oracle PL/SQL •MySQL •SQL Server

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

Описание

Операторы сравнения используются в предложении WHERE, чтобы определить, какие записи выбрать. Вот список операторов сравнения, которые вы можете использовать в MySQL:

Операторы сравнения Описание
= Равно
Равно (безопасное сравнение значения NULL)
, != Не равно
> Больше, чем
>= Больше или равно
Меньше, чем
Меньше или равно
IN ( ) Соответствует значению в списке
NOT Отрицает условие
BETWEEN В пределах диапазона (включительно)
IS NULL Значение NULL
IS NOT NULL Значение, не NULL
LIKE Соответствие шаблону % и _
EXISTS Условие выполняется, если подзапрос возвращает хотя бы одну строку

Рассмотрим примеры операторов сравнения, которые вы можете использовать в MySQL.

Пример оператора равенства

В MySQL вы можете использовать оператор = для проверки равенства в запросе. Оператор может проверять только равенство со значениями, которые не являются NULL.Например:

SELECT * FROM contacts WHERE last_name = 'Bernard';

SELECT *

FROM contacts

WHERE last_name = 'Bernard';

В этом примере оператора SELECT, возвращает все строки из таблицы contacts, где last_name равно Bernard.

Пример оператора равенства (безопасный с нулевыми значениями)

Поскольку оператор = только сравнивает значения, отличные от NULL, использовать значения NULL небезопасно. Чтобы преодолеть это ограничение, MySQL добавил оператор, чтобы вы могли проверить равенство как со значениями NULL, так и с не NULL значениями.

Чтобы лучше объяснить разницу между оператором = и оператором , мы будем включать некоторые примеры как с запросами, так и с данными.

Предполагая, что у нас в MySQL есть таблица, называемая contacts, которая заполнена следующими данными:

contact_id last_name site1 site2
1 Arnold alexa.com
2 Gypsie
3 Boyson bing.com bing.com
4 Juan google.ru google.com

Мы могли бы использовать оператор = в следующем запросе:

SELECT * FROM contacts WHERE site1 = site2;

SELECT *

FROM contacts

WHERE site1 = site2;

Получим следующий результат:

contact_id last_name site1 site2
3 Boyson bing.com bing.com

В вышеприведенном примере оператор SELECT возвращает все строки из таблицы contacts, где site1 равен site2. Он не возвращает вторую запись, в которой значения site1 и site2 имеют значения NULL.

Теперь давайте посмотрим, что произойдет, когда мы перепишем наш запрос с помощью оператора , который безопасен для использования со значениями NULL:

SELECT * FROM contacts WHERE site1 <=> site2;

SELECT *

FROM contacts

WHERE site1 <=> site2;

Поскольку мы используем оператор , мы получим следующий результат:

contact_id last_name site1 site2
2 Gypsie
3 Boyson bing.com bing.com

Теперь наш запрос возвращает все строки из таблицы contacts, где site1 равен site2, включая те записи, где site1 и site2 имеют значения NULL.

Пример оператора неравенства

В MySQL вы можете использовать операторы или !=. Для проверки неравенства в запросе.

Например, мы могли бы проверить неравенство с помощью оператора следующим образом:

SELECT * FROM contacts WHERE last_name <> 'Bernard';

SELECT *

FROM contacts

WHERE last_name <> 'Bernard';

В этом примере оператор SELECT вернет все строки из таблицы contacts, где last_name не равно Bernard.

Или вы также можете написать этот запрос с помощью оператора != следующим образом:

SELECT * FROM contacts WHERE last_name != 'Bernard';

SELECT *

FROM contacts

WHERE last_name != 'Bernard';

Оба этих запроса возвратят одинаковые результаты.

Пример оператора >

Вы можете использовать оператор > в MySQL для проверки выражения «более чем».

SELECT * FROM contacts WHERE contact_id > 20;

SELECT *

FROM contacts

WHERE contact_id > 20;

В этом примере оператор SELECT будет возвращать все строки из таблицы contacts, где contact_id больше 20. В набор результатов не будет включен contact_id, равный 20.

Пример оператора >=

В MySQL вы можете использовать оператор >= для проверки выражения, «больше или равно».

SELECT * FROM contacts WHERE contact_id >= 20;

SELECT *

FROM contacts

WHERE contact_id >= 20;

В этом примере оператор SELECT вернет все строки из таблицы contacts, где contact_id больше или равен 20. В этом случае contact_id равный 20, будет включен в результирующий набор.

Пример оператора

Вы можете использовать оператор в MySQL для проверки выражения «меньше чем».

SELECT * FROM contacts WHERE contact_id < 150;

SELECT *

FROM contacts

WHERE contact_id < 150;

В этом примере оператор SELECT вернет все строки из таблицы contacts, где contact_id меньше 150. contact_id равный 150, не будет включен в результирующий набор.

Пример оператора

В MySQL вы можете использовать оператор для проверки выражения, которое «меньше или равно».

SELECT * FROM contacts WHERE contact_id <= 150;

SELECT *

FROM contacts

WHERE contact_id <= 150;

В этом примере оператор SELECT вернет все строки из таблицы contacts, где contact_id меньше или равно 150. В этом случае product_id, равный 150, будет включен в результирующий набор.

oracleplsql.ru