Операторы сравнения (Transact-SQL)
Операторы сравнения позволяют проверить, одинаковы ли два выражения. Операторы сравнения можно применять ко всем выражениям, за исключением выражений типов text, ntext и image. Операторы сравнения Transact-SQL приведены в следующей таблице.
| Оператор | Значение |
|---|---|
| = (равно) | Равно |
| > (Больше чем) | Больше чем |
| < (Меньше чем) | Меньше чем |
| >= (Больше или равно) | Больше или равно |
| Меньше или равно | |
| <> (Не равно) | Не равно |
| != (не равно) | Не равно (не определено стандартом ISO) |
| !< (Не меньше) | Не меньше (не определено стандартом ISO) |
| !> (Не больше) | Не больше (не определено стандартом ISO) |
Логический тип данных
Результат выполнения оператора сравнения имеет тип данных Boolean. Он имеет три значения: TRUE, FALSE и UNKNOWN. Выражения, возвращающие значения типа Boolean, называются логическими.
В отличие от других типов данных SQL Server, тип Boolean не может быть типом столбца таблицы или переменной и не может быть возвращен в результирующем наборе.
Если параметр SET ANSI_NULLS имеет значение ON, оператор, в число операндов которого входит хотя бы одно выражение NULL, возвращает UNKNOWN. Если параметр SET ANSI_NULLS имеет значение OFF, применяются те же правила, за исключением операторов равенства (=) и неравенства (<>). Если параметр SET ANSI_NULLS имеет значение OFF, эти операторы обрабатывают значение NULL как известное значение, эквивалентное любым другим значениям NULL, и возвращают только значение TRUE или FALSE (и никогда UNKNOWN).
Выражения со значениями типа Boolean используются в предложении WHERE для фильтрации строк, удовлетворяющих условиям поиска, и в инструкциях языка управления потоком, таких как IF и WHILE, например:
-- Uses AdventureWorks DECLARE @MyProduct INT; SET @MyProduct = 750; IF (@MyProduct <> 0) SELECT ProductID, Name, ProductNumber FROM Production.Product WHERE ProductID = @MyProduct;
>= (больше или равно) (Transact-SQL)
Сравнивает два выражения на верность того, больше или равно одно выражение другому (оператор сравнения).
Синтаксис
expression >= expression
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
выражение
Любое допустимое выражение expression. Оба выражения должны иметь типы данных, допускающие неявное преобразование. Преобразование зависит от правил приоритетов типов данных.
Типы результата
Замечания
При сравнении выражений, чьи значения отличны от NULL, результат будет равен TRUE, если левый операнд имеет значение, большее или равное значению правого операнда; иначе результат равен FALSE.
В отличие от оператора сравнения = (равенство) результат сравнения >= двух значений, равных NULL, не зависит от свойства ANSI_NULLS.
Примеры
А. Использование >= в простом запросе
В следующем примере возвращаются все строки из таблицы HumanResources.Department , содержащие в столбце DepartmentID значение, которое больше или равно 13.
-- Uses AdventureWorks SELECT DepartmentID, Name FROM HumanResources.Department WHERE DepartmentID >= 13 ORDER BY DepartmentID;
DepartmentID Name ------------ -------------------------------------------------- 13 Quality Assurance 14 Facilities and Maintenance 15 Shipping and Receiving 16 Executive (4 row(s) affected)
Как сравнить два столбца в sql
Для сравнения двух столбцов в SQL можно использовать оператор сравнения = или <> .
Например, чтобы выбрать все строки, где значения в столбце A равны значениям в столбце B , можно написать следующий запрос:
А чтобы выбрать все строки, где значения в столбце A не равны значениям в столбце B , можно написать следующий запрос:
Важно учитывать, что сравнение может быть выполнено только между столбцами с одним и тем же типом данных. Если типы данных не совпадают, необходимо преобразовать значения в одинаковый тип данных, например, с помощью функции CAST или CONVERT .
SELECT — операторы сравнения, логические и специальные.
На предыдущем шаге мы использовали оператор равенства = в предложении WHERE для выбора записей из таблиц. Transact-SQL позволяет строить сложные условия отбора записей и для этого предоставляет операторы отношения, логические операторы и специальные операторы. Операторы отношения это:
- = Равно
- > Больше чем
- Меньше чем
- >= Больше или равно
- Меньше или равно
- Не равно
Предположим, что нам надо увидеть всех заказчиков в рейтингом выше 200:
SELECT * FROM Customers WHERE rating > 200
Результат таков:
CNUM CNAME CITY RATING SNUM ----- --------------------------------- ---------- ------- ----- 2004 Концерн "Дети лейтенанта Шмидта" Бобруйск 300 1002 2008 ОАО "Валют-транзит" Караганда 300 1007
- AND логическое «И»
- OR логическое «ИЛИ»
- NOT логическое отрицание
Использование логических операторов значительно увеличивает возможности команды SELECT. Например, для просмотра заказчиков из Караганды, которые имеют рейтинг выше 200 достаточно команды:
SELECT * FROM Customers WHERE city = 'Караганда' AND rating > 200
В нашей БД имеется только один заказчик, удовлетворяющий этому условию.
CNUM CNAME CITY RATING SNUM ----- --------------------------------- ---------- ------- ----- 2008 ОАО "Валют-транзит" Караганда 300 1007
Если использовать OR, то получим всех заказчиков, находящихся в Караганде или имеющих рейтинг выше 200:
SELECT * FROM Customers WHERE city = 'Караганда' OR rating > 200
Результат запроса:
CNUM CNAME CITY RATING SNUM ----- --------------------------------- ---------- ------- ----- 2004 Концерн "Дети лейтенанта Шмидта" Бобруйск 300 1002 2008 ОАО "Валют-транзит" Караганда 300 1007
NOT используется для инвертирования значений. Запрос:
SELECT * FROM Customers WHERE city = "Караганда" OR NOT rating > 200
CNUM CNAME CITY RATING SNUM ----- -------------------- --------- ------- ------ 2001 ТОО Рога и копыта Москва 100 1001 2002 AО Бендер и К Одесса 200 1003 2003 Фирма ХХХ Рязань 200 1002 2006 Clemens Лондон 100 1001 2007 ОАО "ООО" ТОМСК 100 1004 2008 ОАО "Валют-транзит" Караганда 300 1007
Для группировки выражений Transact-SQL позволяет использовать круглые скобки ( ). Например:
SELECT * FROM Customers WHERE NOT (city = 'Караганда' OR rating > 200)
Этот запрос отбирает заказчиков, которые НЕ находятся в Караганде или НЕ имеют рейтинг больше 200. Результат:
CNUM CNAME CITY RATING SNUM ----- ------------------ ------- ------- ----- 2001 ТОО Рога и копыта Москва 100 1001 2002 AО Бендер и К Одесса 200 1003 2003 Фирма ХХХ Рязань 200 1002 2006 Clemens Лондон 100 1001 2007 ОАО "ООО" ТОМСК 100 1004
Рассмотрим теперь специальные операторы: IN, BETWEEN, LIKE, IS NULL.
Оператор IN определяет список значений, в который должно входить значение поля. Например, если Вы хотите найти всех продавцов находящихся в Москве или Хабаровске, Вы должны использовать такой запрос:
SELECT * FROM Salespeople WHERE city = 'Москва' OR city = 'Хабаровск'
Но есть есть более простой способ:
SELECT * FROM Salespeople WHERE city IN ( 'Москва', 'Хабаровск' )
Результат этого запроса:
SNUM SNAME CITY COMM ----- ------- ---------- ----- 1001 Иванов Москва 12.0 1002 Петров Хабаровск 13.0
Набор значений для оператора IN заключается в круглые скобки, значения разделяются запятыми.
Оператор BETWEEN похож на оператор IN. В отличие от списка допустимых значений BETWEEN определяет диапазон значений. В запросе Вы должны указать слово BETWEEN затем начальное значение, ключевое слово AND и конечное значение. Первое значение должно быть меньше второго. Следующий запрос выберет Агентов с комиссионными между 10 и 12:
SELECT * FROM Salespeople WHERE comm BETWEEN 10 AND 12
SNUM SNAME CITY COMM ----- -------- ---------- ----- 1001 Иванов Москва 12.0 1003 Егоров Караганда 10.0 1004 Сидоров Сочи 11.0
Оператор LIKE применим только к символьным полям, с которыми он используется, чтобы находить подстроки. Т.е. он ищет поле символа, чтобы видеть совпадает ли с условием часть его строки. В качестве условия он использует специальные символы:
- символ подчеркивания _ — замещает любой одиночный символ. Например, ‘к_т’ будет соответствовать ‘кот’ и ‘кит’, но не ‘крот’.
- знак процента % — замещает последовательность любого числа символов. Например, ‘%м%р’ будет соответствовать ‘компьютер’ и ‘омар’.
SELECT * FROM Customers WHERE cname LIKE 'О%'
CNUM CNAME CITY RATING SNUM ----- -------------------- ---------- ------- ----- 2008 ОАО "Валют-транзит" Караганда 300 1007 2007 ОАО "ООО" ТОМСК 100 1004
LIKE удобен поиске значений, если Вы точно не помните как они пишутся. Вы просто можете использовать ту часть, которую помните.
Так как NULL указывает на отсутствие значения Вы не можете знать каков бужет результат любого сравнения с NULL. Часто Вам различать строки, содержащие значения NULL в каком-либо столбце. Для этого существует специальный оператор IS NULL. Выберем из нашей БД заказчиков с NULL значениями в столбце city:
SELECT * FROM Customers WHERE city IS NULL
В БД таких записей нет, но они могут возникнуть при добавлении нового заказчика без прикрепления к нему агента.
Теперь Вы знаете как можно строить запросы к таблицам, используя любые условия. Далее следует: агрегатные функции и просто функции, GROUP BY,ORDER BY.
