Вопрос 3: Фильтрация данных. Использование операторов сравнения. Логические операции.


Операторы сравнения позволяют проверить, одинаковы ли два выражения. Операторы сравнения можно применять ко всем выражениям, за исключением выражений типов text, ntext и image. Операторы сравнения Transact-SQL приведены в следующей таблице:

Оператор Значение
= (равно) Равно
> (больше) Больше чем
< (меньше) Меньше чем
>= (больше или равно) Больше или равно
<= (меньше или равно) Меньше или равно
<> (не равно) Не равно
!= (не равно) Не равно (не определено стандартом ISO)
!< (не меньше) Не меньше (не определено стандартом ISO)
!> (не больше чем) Не больше (не определено стандартом ISO)

Результат выполнения оператора сравнения имеет тип данных Boolean. Он может иметь одно из трех значений: TRUE, FALSE и UNKNOWN. Выражения, возвращающие значения типа Boolean, называются логическими. Выражения со значениями типа Boolean используются в предложении WHERE для фильтрации строк, удовлетворяющих условиям поиска, и в инструкциях языка управления потоком, таких как IF и WHILE, например:

DECLARE @MyProduct int;  
SET @MyProduct = 750;  
IF (@MyProduct <> 0)  
   SELECT ProductID, Name, ProductNumber  
   FROM Production.Product  
   WHERE ProductID = @MyProduct;

Логические операторы проверяют истину некоторого условия. Логические операторы, например оператор сравнения, возвращают тип данных Boolean. Логические операторы приведены в таблице.

Оператор Значение
ALL TRUE, если все сравнения в наборе равны TRUE.
AND TRUE, если оба выражения типа Boolean равны TRUE.
ANY TRUE, если любое из сравнений в наборе равно TRUE.
BETWEEN TRUE, если операнд принадлежит указанному диапазону.
EXISTS TRUE, если вложенный запрос возвращает как минимум одну строку.
IN TRUE, если операнд содержится в заданном списке выражений.
LIKE TRUE, если оператор удовлетворяет шаблону.
NOT Меняет значение оператора типа Boolean на противоположное.
OR TRUE, если одно из выражений типа Boolean равно TRUE.
SOME TRUE, если некоторые из сравнений в наборе равны TRUE.

Запрос возвращает значение TRUE для ANY, так как 3 меньше некоторых из значений в таблице. И апрос возвращает значение FALSE для ALL, так как 3 не меньше каждого из значений в таблице.

CREATE TABLE T1  
(ID int) ;  
GO  
INSERT T1 VALUES (1) ;  
INSERT T1 VALUES (2) ;  
INSERT T1 VALUES (3) ;  
INSERT T1 VALUES (4) ;

IF 3 < SOME (SELECT ID FROM T1)  
PRINT 'TRUE'   
ELSE  
PRINT 'FALSE' ;

IF 3 < ALL (SELECT ID FROM T1)  
PRINT 'TRUE'   
ELSE  
PRINT 'FALSE' ;

Если сложное выражение содержит множество операторов, порядок выполнения операций определяется приоритетом операторов. Порядок исполнения может существенно повлиять на результирующее значение. Уровни приоритета операторов показаны в следующей таблице. Оператор с более высоким уровнем выполняется прежде, чем оператор с более низким уровнем. В следующей таблице самым высоким уровнем является 1, а самым низким — 8. Если два оператора в выражении имеют один и тот же уровень приоритета, они вычисляются в порядке слева направо по мере их появления в выражении.

Level Операторы
1 ~ (побитовое НЕ)
2 * (умножение), / (деление), % (остаток деления)
3 + (положительное), – (отрицательное), + (сложение), +( объединение), – (вычитание), & (побитовое И), ^ (побитовое исключающее ИЛИ), (побитовое ИЛИ)
4 =, >, <, >=, <=, <>, !=, !>, !< (операторы сравнения)
5 NOT
6 AND
7 ALL, ANY, BETWEEN, IN, LIKE, OR, SOME
8 = (присваивание)

Фильтрация данных осуществаляется при помощи WHERE и HAVING.

WHERE Определяет условия поиска строк, возвращаемых запросом. Ключевое слово WHERE нельзя использовать с агрегатными функциями.

Нахождение строк, которые должны удовлетворять нескольким условиям:

SELECT EmployeeKey, LastName  
FROM DimEmployee  
WHERE EmployeeKey <= 500 AND LastName LIKE '%Smi%' AND FirstName LIKE '%A%';

Нахождение строк, находящихся в списке значений:

SELECT EmployeeKey, LastName  
FROM DimEmployee  
WHERE LastName IN ('Smith', 'Godfrey', 'Johnson');

HAVING Определяет условие поиска для группы или статистического выражения. Предложение HAVING можно использовать только в инструкции SELECT. HAVING обычно используется с предложением GROUP BY. Если предложение GROUP BY не используется, имеется одна неявная агрегированная группа. HAVING - фильтрующее выражение. Оно применяется к результату операции и выполняется уже после того как этот результат будет получен, в отличии от WHERE. В следующем примере, который использует простое предложение HAVING, из таблицы SalesOrderID извлекается сумма всех полей SalesOrderDetail, значение которых превышает 100000.00.

SELECT SalesOrderID, SUM(LineTotal) AS SubTotal  
FROM Sales.SalesOrderDetail  
GROUP BY SalesOrderID  
HAVING SUM(LineTotal) > 100000.00  
ORDER BY SalesOrderID ;

results matching ""

    No results matching ""