В Microsoft Access кроме ключевых слов ALL и DISTINCT после SELECT можно использовать ключевое слово ТОР с дополнительными параметрами. Выражение ТОР n требует, чтобы в выборку данных попали только первые n записей, удовлетворяющих заданному условию запроса. Это ограничение условия поиска нужных записей, формулируемого в выражении WHERE. Если исходная таблица очень большая, то DISTINCT может ускорить получение ответа.
В Access можно использовать и выражение ТОР n PERCENT, чтобы указать, что n выражается в процентах от общего количества записей. Не трудно понять, что использование такого выражения направлено не на ускорение поиска, а на получение таблицы, избавленной от лишних данных.
Заголовки столбцов в результатной таблице можно переопределить по своему усмотрению, назначив для них так называемые псевдонимы. Для этого в списке столбцов после соответствующего столбца следует написать выражение вида: AS заголовок_столбца
Например:
SELECT ClientName AS Клиент, Address AS Адрес FROM Клиенты;
Псевдонимы также можно задать и для каждой таблицы после ключевого слова FROM. Для этого достаточно указать псевдоним через пробел сразу после имени соответствующей таблицы. Псевдонимы таблиц, более короткие, чем их имена, удобно использовать в сложных запросах. Например:
SELECT Т1.Имя, Т2.Адрес FROM Клиенты Т1, Контакты Т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 — из таблицы выбираются записи, отвечающие условию поиска, и отбрасываются все остальные.
3. GROUP BY—создаются группы записей, отобранных с помощью оператора WHERE (если он присутствует в SQL-выражении); каждая группа соответствует какому-нибудь значению столбца группирования. Столбец группирования может быть любым столбцом таблицы, заданной в операторе from, а не только тем, который указан в SELECT.
4. HAVING — обрабатывает каждую из созданных групп записей, оставляя только те из них, которые удовлетворяют условию поиска; этот оператор используется только вместе с оператором GROUP BY.
5. SELECT — выбирает из таблицы, полученной в результате применения перечисленных операторов, только указанные столбцы.
6. ORDER BY — сортирует записи таблицы. При этом в условии сортировки можно обращаться лишь к тем столбцам, которые указаны в операторе SELECT.
Допустим, среди таблиц вашей базы данных имеется таблица Клиенты, которая содержит столбцы с именами: имя, Адрес, Сумма_заказа и, возможно, какие-то другие. Семантика этой таблицы тривиальна. В ней фиксируются данные о клиентах и денежные суммы, которые они заплатили вашей фирме, пользуясь ее услугами.
Рис. 1. Таблица Клиенты
Предположим, нас интересуют не все данные этой таблицы, а только те, которые касаются клиентов, заплативших фирме более 500 (сейчас не важно, в какой валюте производились оплаты). Точнее, нам нужны имена и адреса клиентов, которые заплатили фирме более 500 денежных единиц. Таким образом, нам необходимо получить не все, что содержится в таблице Клиенты, а лишь некоторую ее часть, как по столбцам, так и по записям. Для этой цели подойдет следующее SQL-выражение:
SELECT Имя, Адрес FROM Клиенты WHERE Сумма_заказа > 500;
Это SQL-выражение представляет собой запрос, который на естественном языке выглядит приблизительно так:
ВЫБРАТЬ СТОЛБЦЫ имя, Адрес ИЗ ТАБЛИЦЫ клиенты ГДЕ Сумма_заказа > 500;
Здесь из таблицы клиенты выбираются записи, в которых значение столбца Сумма_заказа превышает 500. При этом в результатной таблице будут представлены только два столбца таблицы Клиенты: Имя и Адрес.
Столбец Сумма_заказа, имеющийся в исходной таблице, в данном случае не выводится (отсутствует в результирующей таблице). Впрочем, если бы вам потребовалось увидеть конкретные суммы, превышающие 500, то для этого было бы достаточно указать в списке столбцов, следующем за оператором SELECT, еще и столбец Сумма_заказа.
Рис. 2. Результат запроса 'WHERE Сумма_заказа > 500'
Следующее SQL-выражение создает виртуальную таблицу, содержащую три Столбца: Регион, Имя и Адрес. Из таблицы Клиенты выбираются только те записи, в которых Сумма__заказа превышает 500, и они группируются по значениям столбцов Регион, Имя и Адрес. Это означает, что в результатной таблице записи, имеющие одинаковые значения в столбце Регион, будут расположены рядом друг с другом. Наконец, все записи в результатной таблице упорядочиваются по значениям столбца Имя (рис. 3).
SELECT Регион, Имя, Адрес FROM Клиенты
WHERE Сумма_заказа > 500
GROUP BY Регион, Имя, Адрес
ORDER BY Имя;
Рис. 3. Результат запроса 'WHERE Сумма_заказа > 500' с группировкой 'GROUP BY Регион, Имя, Адрес' и сортировкой 'ORDER BY Имя'
Оператор выборки записей из исходной таблицы может соседствовать с другими SQL-операторами.