Вопрос 4: Извлечение данных из определенного диапазона значений. Использование списков и неизвестных значений в качестве критериев поиска.
Извлечение данных из определенного диапазона значений
Синтаксис
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
Аргументы
test_expression Выражение для проверки на принадлежность диапазону в пределах от begin_expression до end_expression. Выражение test_expression должно иметь тот же тип данных, что и begin_expression и end_expression.
NOT Указывает, что результат предиката должен быть инвертирован.
begin_expression Любое допустимое выражение. Выражение begin_expression должно иметь тот же тип данных, что и test_expression и end_expression.
end_expression Любое допустимое выражение. Выражение end_expression должно иметь тот же тип данных, что и test_expression и begin_expression.
AND Служит заполнителем, который указывает на то, что значение test_expression должно находиться в диапазоне от begin_expression до end_expression.
Значение результата
Оператор BETWEEN возвращает значение TRUE, если значение аргумента test_expression больше значения аргумента begin_expression или равно ему и меньше значения аргумента end_expression или равно ему.
Оператор NOT BETWEEN возвращает значение TRUE, если значение аргумента test_expression меньше значения аргумента begin_expression или больше значения аргумента end_expression.
Пример
SELECT principal_id, name
FROM sys.database_principals
WHERE type = 'R' AND principal_id BETWEEN 16385 AND 16390;
GO
Использование списков в качестве критериев поиска
Синтаксис
test_expression [ NOT ] IN ( subquery | expression [ ,...n ] )
Аргументы
test_expression Любое допустимое выражение expression.
subquery Вложенный запрос, содержащий результирующий набор, состоящий из одного столбца. Этот столбец должен иметь тот же тип данных, что и аргумент test_expression.
expression[ , ... n ] Список выражений для поиска совпадения. Все выражения должны иметь тот же тип, что и аргумент test_expression.
Значение результата
Если значение аргумента test_expression равно одному из значений, возвращенных вложенным запросом subquery или одному из значений, содержащихся в списке expression (где значения разделяются запятыми), результирующее значение равно TRUE. В противном случае оно равно FALSE.
Предложение NOT IN инвертирует значение susbquery или expression.
Пример
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant');
GO
Использование неизвестных значений в качестве критериев поиска
IS NULL, IS NOT NULL
SELECT BusinessEntityID, NationalIDNumber, JobTitle
FROM HumanResources.Employee
WHERE JobTitle IS NULL && NationalIDNumber IS NOT NULLs;