Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подготовка к ПР_2.1.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.4 Mб
Скачать

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-выражения выполняются в следующем порядке, передавая друг другу результат в виде таб­лицы:

  1. from выбирает таблицу из базы данных; если указано несколько таблиц, то выполняется их декартово произведение и результирующая таблица передается для обработки следующему оператору.

  2. where из таблицы выбираются записи, отвечающие условию поиска, и отбрасываются все остальные.

  1. group by создаются группы записей, отобранных с помощью оператора where (если он присутствует в SQL-выражении); каждая группа соответствует какому-нибудь значению столб­ца группирования. Столбец группирования может быть лю­бым столбцом таблицы, заданной в операторе from, а не толь­ко тем, который указан в select.

  2. having обрабатывает каждую из созданных групп записей, оставляя только те из них, которые удовлетворяют условию поиска; этот оператор используется только вместе с операто­ром GROUP BY.

  3. select выбирает из таблицы, полученной в результате применения перечисленных операторов, только указанные столбцы.

  4. 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 Имя;