
- •Информационное обеспечение систем управления Построение запросов при работе с базой данных (Учебное пособие)
- •Тестовая база данных
- •Выборка данных. Команда select
- •Синтаксис оператора select
- •Простые варианты поиска данных
- •Упорядочение результата запроса. Предложение order by
- •Использование ключевого слова distinct
- •Предложение where
- •Синтаксис предложения where
- •Использование операторов сравнения
- •Использование варианта between
- •Проверка на присутствие в списке значений (вариант in)
- •Проверка на пустое значение
- •Поиск в строковых столбцах
- •Вариант like
- •Использование логических операций в условиях поиска
- •Порядок выполнения логических операций
- •Преобразование данных при выборке
- •Обобщение Данных с помощью Агрегатных Функций
- •Использование distinct с count
- •Предложение group by
- •Предложение having
- •Соединение таблиц
- •Внутренние соединения (связывание по равенству)
- •Внешние соединения
- •Левое внешнее соединение
- •Правое внешнее соединение
- •Полное внешнее соединение
- •Более сложные примеры соединений
- •Рефлексивное соединение, или самосоединение
- •Использование подзапросов в операторах sql
- •Выбор одного
- •Использование в подзапросе агрегатных функций
- •Связанные подзапросы
- •Использование оператора exists
- •Использование варианта in с подзапросами
- •Использование not exists
- •Объединение запросов
- •Команда union
- •Добавление данных. Команда insert
- •Добавление отдельной строки
- •Добавление группы строк
- •Обновление уже имеющихся данных. Команда update
- •Удаление данных из таблиц. Команда delete
- •Генераторы и их использование
- •Создание генераторов
- •Использование генераторов
- •Увеличение значения генератора
- •Получение значения генератора в приложение
- •Триггер
Использование варианта between
Близок к операторам сравнения вариант BETWEEN, который, выглядит следующим образом:
<значение> [NOT] BETWEEN <значение> AND <значение>
Это применимо как к числовым, так и к строковым столбцам, дате, времени — ко всем, за исключением BLOB.
Этот вариант требует, чтобы значение находилось в указанном диапазоне, включая граничные значения.
Еще раз обратимся к полному списку личностей. Выберем из этого списка только тех, чья дата рождения находится в диапазоне от 1.01.1960 до 31.12.1969:xv
SELECT PR_NAME2 AS "Имя",
PR_NAME3 AS "Отчество",
PR_NAME AS "Фамилия",
PR_BIRTHDAY AS "Дата рождения"
FROM PERSON
WHERE PR_BIRTHDAY BETWEEN '1.01.1960' AND '31.12.1969'
ORDER BY PR_BIRTHDAY, PR_NAME
Листинг 10. Список рожденных в диапазоне от 1.01.1960 до 31.12.1969
Имя |
Отчество |
Фамилия |
Дата рождения |
Татьяна |
Викторовна |
Владысик |
19.10.1960 |
Светлана |
Александровна |
Ветошкина |
23.12.1960 |
Татьяна |
Александровна |
Звездина |
01.10.1961 |
Татьяна |
Фёдоровна |
Леушина |
04.05.1963 |
Олег |
Владимирович |
Лядов |
07.06.1964 |
Оксана |
Васильевна |
Власова |
11.02.1965 |
Надежда |
Александровна |
Зеленина |
11.12.1965 |
Татьяна |
Евгеньевна |
Беспалова |
21.12.1965 |
Татьяна |
Александровна |
Соснина |
05.12.1968 |
Татьяна |
Александровна |
Мазеина |
06.04.1969 |
Понятно, что такого же результата можно было бы добиться введя запрос:xvi
SELECT PR_NAME2 AS "Имя",
PR_NAME3 AS "Отчество",
PR_NAME AS "Фамилия",
PR_BIRTHDAY AS "Дата рождения"
FROM PERSON
WHERE PR_BIRTHDAY >= '1.01.1960' AND PR_BIRTHDAY <= '31.12.1969'
ORDER BY PR_BIRTHDAY, PR_NAME
Результат будет такой же, но вариант запроса с использованием BЕTWEEN намного более выразительный.
ЗАМЕЧАНИЕ
Логическое выражение в предложении WHERE нашего примера содержит только операторы конъюнкции (логическое И). По этой причине я здесь не использую скобок. Вообще же очень рекомендую всегда использовать скобки для явного задания порядка выполнения любых операторов, в особенности логических, потому что не часто на лету, когда в поте лица своего пишешь гениальную программу (при обычном отставании от утвержденного графика), вспомнишь порядок выполнения этих операций. Я вот только помню, что конъюнкция выполняется прежде дизъюнкции. Скобки совершенно необходимы, когда у вас довольно сложное логическое выражение. Иначе выяснение причин, почему неверно осуществляется выборка данных, может затянуться на длительное время.
Есть еще один неприятный момент для любителей языка Delphi, который раньше назывался Объектный Паскаль. Там при использовании операций сравнения и логических операций порядок выполнения действий отличается от того, что принято в языке SQL. В этом языке и сами операции сравнения следует заключать в скобки, чтобы избежать ошибок трансляции.