![](/user_photo/2706_HbeT2.jpg)
- •Методические указания к лабораторной работе №4 «Базы данных. Язык запросов sql»
- •Введение
- •Выборка данных
- •Сортировка данных
- •Фильтрация данных
- •Использование функций
- •Агрегирующие функции
- •Использование подзапросов
- •Объединение таблиц
- •Тестовые данные
- •Варианты заданий
- •Вариант 1 «Хранилище документов»
- •Вариант 2 «Музыкальный архив»
- •Вариант 3 «Библиотека»
- •Вариант 4 «Почтовый сервер»
- •Вариант 5 «Страховая компания»
- •Вариант 6 «Сервисный центр»
- •Список литературы
Фильтрация данных
По умолчанию запрашиваемые данные получаются неотфильтрованными. Для фильтрации используется секция WHERE запроса. В секции WHERE указывается выражение фильтрации и в результирующую выборку попадают только те записи, для которых выражение фильтрации истинно.
В выражении фильтрации можно ссылаться на все поля всех таблиц, участвующих в запросе и формировать из них выражения. Для формирования выражений могут использоваться арифметические операции +, -, *, /, операции сравнения =, <>, >, <, операции сравнения с NULL-значением IS NULL и IS NOT NULL. В следующем запросе получаются все товары, у которых удвоенная оптовая цена меньше розничной:
SELECT
[Products].[ProductName],
[Products].[ProductWholesalePrice],
[Products].[ProductRetailPrice]
FROM
[Products]
WHERE
2*[Products].[ProductWholesalePrice] < [Products].[ProductRetailPrice]
ORDER BY
[Products].[ProductName];
Для строковых значений поддерживается фильтрация значений с неполным совпадением. Для этого используется операция LIKE с шаблоном поиска, содержащим специальные символы ? (один произвольный символ) и * (произвольное количество любых символов). Следующий запрос выбирает всех покупателей, фамилия которых начинается на букву К:
SELECT
*
FROM
[Customers]
WHERE
[Customers].[CustomerSurname] Like 'К*';
Условия секции WHERE можно группировать с помощью логических операций AND, OR и NOT (при вычислениях среди указанных операций наибольший приоритет имеет операция NOT, наименьший – операция OR). Когда стандартные приоритеты операций не устраивают, необходимо использовать скобки. Следующий запрос возвращает все товары, у которых розничная цена равна оптовой, либо оптовая цена больше 10 и поставки прекращены (для установления нужного порядка вычислений используются скобки):
SELECT
*
FROM
[Products]
WHERE
[Products].[ProductWholesalePrice] =
[Products].[ProductRetailPrice]
OR ([Products].[ProductWholesalePrice] > 10
AND [Products].[ProductSupplied]);
Использование функций
При формировании выражений SQL-запросов можно использовать встроенные функции. Имена функций даже для простейших операций сильно зависят от используемой СУБД.
В таблице 1 представлены некоторые полезные функции СУБД Microsoft Access, которые можно использовать в SQL-запросах:
Таблица 1. Встроенные функции
Имя функции |
Назначение |
LTRIM |
Удаляет ведущие пробелы |
RTRIM |
Удаляет ведомые пробелы |
UCASE |
Переводит символы в верхний регистр |
LCASE |
Переводит символы в нижний регистр |
LEN |
Возвращает длину строки |
NOW |
Возвращает сегодняшнюю дату |
DATEPART |
Выбирает нужную часть даты |
ISNULL |
Проверяет, что аргумент равен NULL |
Следующий запрос возвращает год из текущей даты:
SELECT
DATEPART(‘yyyy’, NOW())