Руководство по SQL. Операторы сравнения. Операторы сравнения sql
28. ОПЕРАЦИИ СРАВНЕНИЯ ЯЗЫКА SQL
Рассмотрим операции сравнения. Реляционные операторы могут использоваться с различными элементами. При этом важно соблюдать следующее правило: элементы должны иметь сравнимые типы. Если в базе данных определены домены, то сравниваемые элементы должны относиться к одному домену.
- значение поля
- литерал
- арифметическое выражение
- агрегирующая функция
- другая встроенная функция
- значение (значения), возвращаемые подзапросом.
При сравнении литералов конечные пробелы игнорируются. Так, предложение WHERE first_name = 'Петр ' будет иметь тот же результат, что и предложение WHERE first_name = 'Петр'.
FIRST_NAME | LAST_NAME | DEPT_NO |
Terri | Leev | 000 |
Ann | Bennet | 120 |
Sue Anne | O'Brien | 670 |
Kelly | Brown | 600 |
получить список сотрудников (а также номера их отделов и страну), работающих вне США
FIRST_NAME | LAST_NAME | DEPT_NO | JOB_COUNTRY |
Ann | Bennet | 120 | England |
Roger | Reeves | 120 | England |
Willie | Stansbury | 120 | England |
Claudia | Sutherland | 140 | Canada |
Yuki | Ichida | 115 | Japan |
Takashi | Yamamoto | 115 | Japan |
Roberto | Ferrari | 125 | Italy |
Jacques | Glon | 123 | France |
Pierre | Osborne | 121 | Switzerland |
Предикат BETWEEN задает диапазон значений, для которого выражение принимает значение true. Разрешено также использовать конструкцию NOT BETWEEN.
SELECT first_name, last_name, salaryFROM employeeWHERE salary BETWEEN 20000 AND 30000получить список сотрудников, годовая зарплата которых больше 20000 и меньше 30000
FIRST_NAME | LAST_NAME | SALARY |
Ann | Bennet | 22935.00 |
Kelly | Brown | 27000.00 |
Тот же запрос с использованием операторов сравнения будет выглядеть следующим образом:
SELECT first_name, last_name, salaryFROM employeeWHERE salary >= 20000AND salary <= 30000получить список сотрудников, годовая зарплата которых больше 20000 и меньше 30000
LAST_NAME | SALARY | |
Ann | Bennet | 22935.00 |
Kelly | Brown | 27000.00 |
Запрос с предикатом BETWEEN может иметь следующий вид:
SELECT first_name, last_name, salaryFROM employeeWHERE last_name BETWEEN Nelson AND Osborneполучить список сотрудников, фамилии которых начинаются с Nelson и заканчиваются Osborne
FIRST_NAME | LAST_NAME | |
Robert | Nelson | 105900.00 |
Carol | Nordstrom | 42742.50 |
Sue Anne | O'Brien | 31275.00 |
Pierre | Osborne | 110000.00 |
Значения, определяющие нижний и верхний диапазоны, могут не являться реальными величинами из базы данных. И это очень удобно - ведь мы не всегда можем указать точные значения диапазонов!
SELECT first_name, last_name, salaryFROM employeeWHERE last_name BETWEEN Nel AND OsbFIRST_NAME | LAST_NAME | SALARY |
Robert | Nelson | 105900.00 |
Carol | Nordstrom | 42742.50 |
Sue Anne | O'Brien | 31275.00 |
В данном примере значений Nel и Osb в базе данных нет. Однако, все сотрудники, входящие в диапазон, в нижней части которого начало фамилий совпадает с Nel (т.е. выполняется условие больше или равно), а в верхней части фамилия не более Osb (т.е. выполняется условие меньше или равно - а именно O, Os, Osb), попадут в выборку. Отметим, что при выборке с использованием предиката BETWEEN поле, на которое накладывается диапазон, считается упорядоченным по возрастанию.
Предикат BETWEEN с отрицанием NOT (NOT BETWEEN) позволяет получить выборку записей, указанные поля которых имеют значения меньше нижней границы и больше верхней границы.
SELECT first_name, last_name, hire_dateFROM employeeWHERE hire_date NOT BETWEEN 1-JAN-1989 AND 31-DEC-1993получить список самых старых и самых молодых (по времени поступления на работу) сотрудников
FIRST_NAME | LAST_NAME | HIRE_DATE |
Robert | Nelson | 28-DEC-1988 |
Bruce | Young | 28-DEC-1988 |
Pierre | Osborne | 3-JAN-1994 |
John | Montgomery | 30-MAR-1994 |
Mark | Guckenheimer | 2-MAY-1994 |
IN
Предикат IN проверяет, входит ли заданное значение, предшествующее ключевому слову IN (например, значение столбца или функция от него) в указанный в скобках список. Если заданное проверяемое значение равно какому-либо элементу в списке, то предикат принимает значение true. Разрешено также использовать конструкцию NOT IN.
получить список сотрудников, занимающих должности вице-президент, администратор, финансовый директор
FIRST_NAME | LAST_NAME | JOB_CODE |
Robert | Nelson | VP |
Terri | Lee | Admin |
Stewart | Hall | Finan |
Ann | Bennet | Admin |
Sue Anne | O'Brien | Admin |
Mary S. | MacDonald | VP |
Kelly | Brown | Admin |
А вот пример запроса, использующего предикат NOT IN:
SELECT first_name, last_name, job_countryFROM employeeWHERE job_country NOT IN(USA, Japan, England)получить список сотрудников, работающих не в США, не в Японии и не в Великобритании
FIRST_NAME | LAST_NAME | JOB_COUNTRY |
Claudia | Sutherland | Canada |
Roberto | Ferrari | Italy |
Jacques | Glon | France |
Pierre | Osborne | Switzerland |
LIKE
Предикат LIKE используется только с символьными данными. Он проверяет, соответствует ли данное символьное значение строке с указанной маской. В качестве маски используются все разрешенные символы (с учетом верхнего и нижнего регистров), а также специальные символы:
- % - замещает любое количество символов (в том числе и 0),
- _ - замещает только один символ.
Разрешено также использовать конструкцию NOT LIKE.
SELECT first_name, last_nameFROM employeeWHERE last_name LIKE F%получить список сотрудников, фамилии которых начинаются с буквы F
FIRST_NAME | LAST_NAME |
Phil | Forest |
Pete | Fisher |
Roberto | Ferrari |
получить список сотрудников, имена которых заканчиваются буквами er FIRST_NAMERogerRogerWalter
LAST_NAME |
De Souza |
Reeves |
Steadman |
А такой запрос позволяет решить проблему произношения (и написания) имени:
SELECT first_name, last_nameFROM employeeWHERE first_name LIKE Jacq_esнайти сотрудника(ов), в имени которого неизвестно произношение буквы перед окончанием es FIRST_NAMEJacques
Что делать, если требуется найти строку, которая содержит указанные выше специальные символы (%, _) в качестве информационных символов? Есть выход! Для этого с помощью ключевого слова ESCAPEнужно определить так называемый escape-символ, который, будучи поставленным перед символом % или _, укажет, что этот символ является информационным. Escape-символ не может быть символом \ (обратная косая черта) и, вообще говоря, должен представлять собой символ, никогда не появляющийся в упоминаемом столбце как информационный символ. Часто для этих целей используются символы @ и ~.
SELECT first_name, last_nameFROM employeeWHERE first_name LIKE %@_% ESCAPE @получить список сотрудников, в имени которых содержится _ (знак подчеркивания)
CONTAINING
Предикат CONTAINING аналогичен предикату LIKE, за исключением того, что он не чувствителен к регистру букв. Разрешено также использовать конструкцию NOT CONTAINING.
SELECT first_name, last_nameFROM employeeWHERE last_name CONTAINING neполучить список сотрудников, фамилии которых содержат буквы ne, Ne, NE, nE
FIRST_NAME | LAST_NAME |
Robert | Nelson |
Ann | Bennet |
Pierre | Osborne |
IS NULL
В SQL-запросах NULL означает, что значение столбца неизвестно. Поисковые условия, в которых значение столбца сравнивается с NULL, всегда принимают значение unknown (и, соответственно, приводят к ошибке), в противоположность true или false, т.е.
WHERE dept_no = NULL или даже WHERE NULL = NULL.Предикат IS NULL принимает значение true только тогда, когда выражение слева от ключевых слов IS NULL имеет значение null (пусто, не определено). Разрешено также использовать конструкцию IS NOT NULL, которая означает не пусто, имеет какое-либо значение.
SELECT department, mngr_noFROM departmentWHERE mngr_no IS NULLполучить список отделов, в которых еще не назначены начальники
DEPARTMENT | MNGR_NO |
Marketing | <null> |
Software Products Div. | <null> |
Software Development | <null> |
Field Office: Singapore | <null> |
Предикаты EXIST, ANY, ALL, SOME, SINGULAR мы рассмотрим в разделе, рассказывающем о подзапросах.
it-iatu.ru
Что такое операторы SQL: логические, арифметические и сравнения
От автора: оператор является зарезервированным словом или символом, используемым в основном в инструкции WHERE оператора SQL для выполнения таких операций, как сравнения и арифметические операции. Операторы используются для указания условий в инструкции SQL, а также служит для объединения нескольких условий в инструкции.
Арифметические операторы
Операторы сравнения
Логические операторы
Операторы, используемые для изменения условий на противоположные
Бесплатный курс по PHP программированию
Освойте курс и создайте динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Получить курс сейчас!Арифметические операторы SQL
Предположим, что «переменная a» имеет значение 10, а «переменная b» — 20, тогда:
Операторы сравнения SQL
Предположим, что «переменная a» имеет значение 10, а «переменная b» — 20, тогда:
Логические операторы SQL
Ниже приводится список всех логических операторов, доступных в SQL.
Источник: https://www.tutorialspoint.com/
Редакция: Команда webformyself.
Хотите изучить MySQL?
Прямо сейчас посмотрите 24-х часовой курс по базе данных MySQL!
Смотреть курсwebformyself.com
Сравнение строк SQL, больше и меньше операторов
Операторы сравнения (в том числе < и >) «работы» со значениями строк, а также цифр.
Для MySQL
«По умолчанию, сравнения строк не чувствительны к регистру и используют текущий набор символов. По умолчанию latin1 (cp1252 западноевропейская), который также хорошо работает на английском языке.»
Сравнение строк будет чувствительным к регистру, когда сопоставление строк в сопоставлении строк чувствительно к регистру, то есть имя набора символов заканчивается на _cs, а не _ci. Нет смысла повторять всю информацию, которая доступна в Справочном руководстве MySQL здесь.
MySQL Операторы сравнения Ссылка: http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html
Более подробную информацию о MySQL charactersets/сортировки: http://dev.mysql.com/doc/refman/5.5/en/charset.html
Чтобы ответить на конкретные вопросы, которые вы просили:
Q: это возможный способ сравнения строк в SQL?
A: Да, как в MySQL и SQL Server
Q: и как она действует?
A: Оператор сравнения возвращает логическое значение: TRUE, FALSE или NULL.
Q: строка меньше, чем другой приходит раньше в словарном порядке? Например, мяч меньше, чем вода?
A: Да, потому что 'Ь' предшествует 'ш' в characteset обобщению, выражение
'ball' < 'water'возвратит TRUE. (Это зависит от CharacterSet и на комплектовки
. Q: и это сравнение чувствительны к регистру
A: ли конкретное сравнение чувствительна к регистру или нет зависит от сервера базы данных: по умолчанию SQL Server и MySQL нечувствительны к регистру.
В MySQL можно выполнить сравнение строк путем указания CharacterSet сортировки, которое чувствительно к регистру (имя CharacterSet закончится в _CS, а не _ci)
Q: Например BALL < воды, верхний регистр символов влияет эти сравнения?
A: По умолчанию, как в SQL Server и MySQL, выражение
'BALL' < 'water'возвратит TRUE.
stackoverrun.com
SQL - Операторы
Оператор | Описание |
+ | Добавление |
- | Вычитание |
* | Умножение |
/ | Деление |
% | Модуль |
Оператор | Описание |
& | Побитовое И |
| | Побитовое ИЛИ |
^ | Побитовое исключение ИЛИ |
Оператор | Описание |
= | Равно |
> | Больше |
< | Меньше |
>= | Больше или равно |
<= | Меньше или равно |
<> | Не равно |
Оператор | Описание |
+ = | Добавить равно |
- = | Вычесть равно |
*= | Умножить равно |
/= | Разделить равно |
%= | Модуль равно |
&= | Побитовое И равно |
^ - = | Побитовое исключающее равно |
| * = | Побитовое ИЛИ равно |
Оператор | Описание |
ALL | Если все значения подзапроса являются TRUE |
AND | Если все условия, разделенные И, являются TRUE |
ANY | Если какое-либо из значений подзапроса соответствует TRUE условию |
BETWEEN | Если операнд находится в диапазоне сравнения |
EXISTS | Если подзапрос возвращает одну или несколько записей |
IN | Если операнд равен одному из списка выражений |
LIKE | Если операнд соответствует шаблону |
NOT | Отображает запись, если условие (И) НЕ TRUE |
OR | Если любое из условий, разделенных OR, является TRUE. |
SOME | Если какое-либо из значений подзапроса соответствует условию |
Уважаемый пользователь! Реклама помогает поддерживать и развивать наш проект, делая его простым и удобным специально для Вас. Если проект интересный и важный для Вас, то отключите на нем блокировщик рекламы. Спасибо, что читаете сайт!
unetway.com
Руководство по SQL. Операторы сравнения. – PROSELYTE
Предположим, что у нас есть таблица developers:
mysql> select * from developers; +----+-------------------+------------+--------+ | id | name | specialty | salary | +----+-------------------+------------+--------+ | 1 | Eugene Suleimanov | Java | 2000 | | 2 | Peter Romanenko | C++ | 2500 | | 3 | Asya Suleimanova | Javascript | 1500 | | 4 | Andrei Komarov | Php | 2000 | +----+-------------------+------------+--------+ 4 rows in set (0.00 sec)Ниже приведены несколько примеров использования операторов сравнения для данной таблицы:
mysql> SELECT * FROM developers WHERE specialty LIKE 'java'; +----+-------------------+-----------+--------+ | id | name | specialty | salary | +----+-------------------+-----------+--------+ | 1 | Eugene Suleimanov | Java | 2000 | +----+-------------------+-----------+--------+ 1 row in set (0.00 sec) mysql> SELECT * FROM developers WHERE salary >= 2000; +----+-------------------+-----------+--------+ | id | name | specialty | salary | +----+-------------------+-----------+--------+ | 1 | Eugene Suleimanov | Java | 2000 | | 2 | Peter Romanenko | C++ | 2500 | | 4 | Andrei Komarov | Php | 2000 | +----+-------------------+-----------+--------+ 3 rows in set (0.00 sec) mysql> SELECT * FROM developers WHERE salary 2000; +----+------------------+------------+--------+ | id | name | specialty | salary | +----+------------------+------------+--------+ | 2 | Peter Romanenko | C++ | 2500 | | 3 | Asya Suleimanova | Javascript | 1500 | +----+------------------+------------+--------+ 2 rows in set (0.00 sec) mysql> SELECT * FROM developers WHERE salary = 2500; +----+-----------------+-----------+--------+ | id | name | specialty | salary | +----+-----------------+-----------+--------+ | 2 | Peter Romanenko | C++ | 2500 | +----+-----------------+-----------+--------+ 1 row in set (0.00 sec)На этом мы заканчиваем обзор примеров использования операторов сравнения структурированного языка запросов SQL.
proselyte.net
SQL - Примеры операторов сравнения
Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:SQL> SELECT * FROM CUSTOMERS;+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Maxim | 35 | Moscow | 21000.00 | | 2 | AndreyEx | 38 | Krasnodar | 55500.00 | | 3 | Oleg | 33 | Rostov | 34000.00 | | 4 | Masha | 35 | Moscow | 31500.00 | | 5 | Ruslan | 34 | Omsk | 43000.00 | | 6 | Dima | 32 | SP | 45000.00 | | 7 | Roma | 34 | SP | 10000.00 | +----+----------+-----+-----------+----------+ 7 rows in set (0.00 sec)
Вот некоторые простые примеры, демонстрирующие использование операторов сравнения в SQL:
Пример 1
SQL> SELECT * FROM CUSTOMERS WHERE SALARY > 45000;
Вывод
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 2 | AndreyEx | 38 | Krasnodar | 55500.00 | +----+----------+-----+-----------+----------+ 1 rows in set (0.00 sec)Пример 2
SQL> SELECT * FROM CUSTOMERS WHERE SALARY = 55000;
Вывод
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 2 | AndreyEx | 38 | Krasnodar | 55500.00 | +----+----------+-----+-----------+----------+ 1 rows in set (0.00 sec)Пример 3
SQL> SELECT * FROM CUSTOMERS WHERE SALARY != 55000;
Вывод
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Maxim | 35 | Moscow | 21000.00 | | 3 | Oleg | 33 | Rostov | 34000.00 | | 4 | Masha | 35 | Moscow | 31500.00 | | 5 | Ruslan | 34 | Omsk | 43000.00 | | 6 | Dima | 32 | SP | 45000.00 | | 7 | Roma | 34 | SP | 10000.00 | +----+----------+-----+-----------+----------+ 6 rows in set (0.00 sec)Пример 4
SQL> SELECT * FROM CUSTOMERS WHERE SALARY <> 55000;
Вывод
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Maxim | 35 | Moscow | 21000.00 | | 3 | Oleg | 33 | Rostov | 34000.00 | | 4 | Masha | 35 | Moscow | 31500.00 | | 5 | Ruslan | 34 | Omsk | 43000.00 | | 6 | Dima | 32 | SP | 45000.00 | | 7 | Roma | 34 | SP | 10000.00 | +----+----------+-----+-----------+----------+ 6 rows in set (0.00 sec)Пример 5
SQL> SELECT * FROM CUSTOMERS WHERE SALARY >= 4500;
Вывод
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 2 | AndreyEx | 38 | Krasnodar | 55500.00 | | 6 | Dima | 32 | SP | 45000.00 | +----+----------+-----+-----------+----------+ 2 rows in set (0.00 sec)
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
andreyex.ru
Операторы сравнения (Transact-SQL)
THIS TOPIC APPLIES TO: SQL Server (starting with 2012) Azure SQL Database Azure SQL Data Warehouse Parallel Data Warehouse
Операторы сравнения позволяют проверить, одинаковы ли два выражения. Операторы сравнения можно использовать для всех выражений, за исключением выражений типов текст, ntext, или изображение типов данных. Операторы сравнения Transact-SQL приведены в следующей таблице:
Результат выполнения оператора сравнения имеет логическое тип данных. Это имеет три значения: TRUE, FALSE и UNKNOWN. Выражения, возвращающие логическое тип данных, называются логических выражений.
В отличие от других SQL Server типы данных логическое тип данных не может быть указан как тип данных столбца или переменной и не возвращается в результирующем наборе.
Если параметр SET ANSI_NULLS имеет значение ON, оператор, в число операндов которого входит хотя бы одно выражение NULL, возвращает UNKNOWN. Когда параметр SET ANSI_NULLS имеет значение OFF, действуют те же правила, однако если оба выражения равны NULL, то оператор равенства (=) возвращает TRUE. Например, если параметр SET ANSI_NULLS имеет значение OFF, при обработке выражения NULL = NULL будет возвращено TRUE.
Выражения с логическое типы данных используются в предложении 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)
technet.microsoft.com