
- •!!! Для дальнейшей работы откройте файл Учебной базы данных!!!
- •1. Основное sql-выражение для выборки данных
- •2. Уточнения запроса
- •2.1. Оператор where
- •Предикаты сравнения
- •Предикаты для вложенных запросов
- •2.2. Оператор group by
- •2.3. Оператор having
- •2.4. Оператор order by
- •2.5. Логические операторы
- •Список контрольных вопросов:
- •Задачи для самостоятельного выполнения:
2. Уточнения запроса
Итак, основное SQL-выражение для выборки данных, имеет вид:
SELECT списокСтолбцов FROM список Таблиц;
Такой запрос возвращает таблицу, полученную из указанной в операторе from (или из декартового произведения указанных таблиц, если их несколько), путем выделения в ней только тех столбцов, которые определены в операторе select. Для выделения требуемых записей (строк) исходной . таблицы используется выражение, следующее за ключевым словом (оператором) where. Оператор where является наиболее часто используемым, хотя и не обязательным в SQL-выражении. Именно из-за популярности его можно считать основным компонентом SQL-выражения. Кроме where, в SQL-выражениях используются и другие операторы, позволяющие уточнить запрос.
Для уточнения запроса на выборку данных служит ряд дополнительных операторов:
where (где) — указывает записи, которые должны войти в результатную таблицу (фильтр записей);
group by (группировать по) — группирует записи по значениям определенных столбцов;
having (имеющие, при условии) — указывает группы записей, которые должны войти в результатную таблицу (фильтр групп);
order by (сортировать по) — сортирует (упорядочивает) записи.
Эти операторы не являются обязательными. Их можно совсем не использовать, или использовать лишь некоторые из них, или все сразу. Если применяются несколько операторов, то в SQL-выражении они используются в указанном в списке порядке. Таким образом, запрос данных из таблицы с применением всех перечисленных операторов уточнения запроса имеет следующий вид:
SELECT списокСтолбцов FROM имяТаблицы
WHERE условиеПоиска
GROUP BY столбецГруппировки
HAVING условиеПоиска
ORDER BY условиеСортировки;
Порядок перечисления операторов в SQL-выражении не совпадает с порядком их выполнения. Однако знание порядка выполнения операторов поможет вам избежать многих недоразумений. Итак, перечисленные операторы SQL-выражения выполняются в следующем порядке, передавая друг другу результат в виде таблицы:
from — выбирает таблицу из базы данных; если указано несколько таблиц, то выполняется их декартово произведение и результирующая таблица передается для обработки следующему оператору.
where — из таблицы выбираются записи, отвечающие условию поиска, и отбрасываются все остальные.
group by— создаются группы записей, отобранных с помощью оператора where (если он присутствует в SQL-выражении); каждая группа соответствует какому-нибудь значению столбца группирования. Столбец группирования может быть любым столбцом таблицы, заданной в операторе from, а не только тем, который указан в select.
having — обрабатывает каждую из созданных групп записей, оставляя только те из них, которые удовлетворяют условию поиска; этот оператор используется только вместе с оператором GROUP BY.
select — выбирает из таблицы, полученной в результате применения перечисленных операторов, только указанные столбцы.
order by — сортирует записи таблицы. При этом в условии сортировки можно обращаться лишь к тем столбцам, которые указаны в операторе select.
Допустим, среди таблиц вашей базы данных имеется таблица Клиенты, которая содержит столбцы с именами: Имя, Адрес, Сумма_ заказа и, возможно, какие-то другие. Семантика этой таблицы тривиальна. В ней фиксируются данные о клиентах и денежные суммы, которые они заплатили вашей фирме, пользуясь ее услугами.
Предположим, нас интересуют не все данные этой таблицы, а только те, которые касаются клиентов, заплативших фирме более 500 (сейчас не важно, в какой валюте производились оплаты). Точнее, нам нужны имена и адреса клиентов, которые заплатили фирме более 500 денежных единиц. Таким образом, нам необходимо получить не все, что содержится в таблице клиенты, а лишь некоторую ее часть, как по столбцам, так и по записям. Для этой цели подойдет следующее SQL-выражение:
SELECT Имя, Адрес FROM Клиенты WHERE Сумма__заказа > 500;
Это SQL-выражение представляет собой запрос, который на естественном языке выглядит приблизительно так:
ВЫБРАТЬ СТОЛБЦЫ имя, Адрес ИЗ ТАБЛИЦЫ клиенты ГДЕ Сумма_заказа > 500;
Здесь из таблицы клиенты выбираются записи, в которых значение столбца Сумма__заказа превышает 500. При этом в результатной таблице будут представлены только два столбца таблицы Клиенты: Имя и Адрес.
Столбец Сумма__заказа, имеющийся в исходной таблице, в данном случае не выводится (отсутствует в результирующей таблице). Впрочем, если бы вам потребовалось увидеть конкретные суммы, превышающие 500, то для этого было бы достаточно указать в списке столбцов, следующем за оператором select, еще и столбец Сумма_заказа.
Следующее SQL-выражение создает виртуальную таблицу, содержащую три столбца: Регион, Имя и Адрес. Из таблицы Клиенты выбираются только те записи, в которых Сумма_заказа превышает 500, и они группируются по значениям столбцов Регион, Имя и Адрес. Это означает, что в результатной таблице записи, имеющие одинаковые значения в столбце Регион, будут расположены рядом друг с другом. Наконец, все записи в результатной таблице упорядочиваются по значениям столбца имя.
SELECT Регион, Имя, Адрес FROM Клиенты
WHERE Сумма_заказа > 500
GROUP BY Регион, Имя, Адрес
ORDER BY Имя;