С помощью данного типа запроса можно удалить из базовой таблицы группу блоков данных, отобранных по определенным критериям. При этом следует тщательно проанализировать критерии отбора, поскольку эту операцию нельзя отменить.
1. Создайте новый запрос на выборку удаляемых блоков данных. Отбор блоков данных выполняется в соответствии с заданными в строке «Условие» критериями.
2. Проверьте корректность сформулированных условий, перейдя в режим ТАБЛИЦА.
3. Преобразуйте запрос на выборку в запрос на удаление записей. Для этого, вернувшись в режим КОНСТРУКТОРА, выберите команду Удалить (вкладка Тип запроса).
4. В появившейся строке «Удалить» установите критерии отбора.
5. Выполните запрос.
Рассмотрим создание запросов на модификацию на примерах.
Создадим запрос на обновление цен товаров с учетом сезонных скидок на 10%. Предварительно создадим копию таблицы [Товары], присвоив ей имя [КопияТовары].
Рисунок. Запрос на обновление.
2. Создадим запрос на создание таблицы [Мониторы], отображающей все поля таблицы [КопияТовары].
3. Создадим запрос на добавление в таблицу [Мониторы] данных о Видеокартах из таблицы [КопияТовары]. Таблицу [Мониторы] переименуйте. Новой таблице присвойте имя [Мониторы_и_видеокарты].
3. Создадим запрос на удаление из таблицы [КопияТовары] данных о Мониторах и Видеокартах.
Создание запросов с использованием языка SQL
На самом деле любой запрос в MS Access реализуется с помощью языка SQL. Хотя большинство запросов можно построить, пользуясь средствами, которые Access предоставляет в режиме конструктора, и в этом случае они будут храниться в виде инструкций SQL. Некоторые типы запросов можно построить, только используя язык SQL.
Синтаксис инструкции SELECT в MS Access
Ядром языка SQL является инструкция SELECT. Она используется для отбора строк и столбцов из таблиц базы данных и содержит пять основных предложений. В общем случае ее синтаксис можно представить в следующем виде:
SELECT <список–полей>[3]
FROM <список–таблиц>
[WHERE <спецификация–отбора–строк>][4]
[GROUP BY <спецификация–группировки>]
[HAVING <спецификация–отбора–групп>]
[ORDER BY <спецификация–сортировки>]
В MS Access реализованы важные средства расширения языка:
Имя–таблицы, имя–запроса–на–выборку и псевдоним, уточняющий имя поля обязательно должны присутствовать в предложении FROM запроса. Если таблица или запрос имеет псевдоним, необходимо использовать именно его, а не реальное имя таблицы или запроса.
Первую часть имени (включая точку) можно опустить, если поле имеется только в одной из таблиц предложения FROM.
Имена, содержащие пробелы, обязательно должны заключаться в квадратные скобки.
При определении списка полей использование символа «*» вместо имени поля указывает, что нужно отобразить все столбцы данной таблицы. Если в качестве списка полей использован символ «*», то отбираются все столбцы всех таблиц, указанных в предложении FROM.
Пример
Следующее выражение задает поле из таблицы [Товары], имя которого Наименование: Товары.Наименование
Предложение FROM
Задает таблицы или запросы, служащие источниками данных для создаваемого запроса.
Синтаксис
FROM{имя–таблицы [[AS] псевдоним ] |
имя–запроса–на–выборку [[AS] псевдоним ] |
<таблица–объединения>} …
[IN <спецификация источника>]
где <таблица–объединения>:
{имя–таблицы [[AS] псевдоним ] |
имя–запроса–на–выборку [[AS] псевдоним ] |
(<таблица–объединения>)}
{INNER | LEFT | RIGHT} JOIN
{имя–таблицы [[AS] псевдоним ] |
имя–запроса–на–выборку [[AS] псевдоним ] |
(<таблица–объединения>)}
ON <условие объединения>
Для каждой таблицы и запроса можно определить альтернативное имя. Оно используется как псевдоним вместо полного имени таблицы при задании имен столбцов в списке полей, условии объединения и предложении WHERE.
Пример
Следующий запрос отображает все поля таблицы Товары:
SELECT Товары.*
FROM Товары;[6]
Следующий запрос отображает товары, цена которых больше $100 и гарантийный срок которых 36 месяцев:
SELECT Товары.Наименование, Товары.Цена
FROM Товары
WHERE Товары.Цена > 100 AND Товары.[Гарантийный срок] = 36;
Большие возможности SQL, во многом, основаны на его способности объединять информацию из нескольких таблиц или запросов.
Для задания типа объединения таблиц в логический набор записей, из которого будет выбираться необходимая информация, в предложении FROM используется операция JOIN.
Операция INNER JOIN используется для получения всех строк из обеих логических таблиц, удовлетворяющих условию объединения.
Операция LEFT JOIN возвращает все строки из первой логической таблицы, объединенные с теми строками из второй, для которых выполняется условие объединения.
Аналогично, операция RIGHT JOIN возвращает все строки из второй логической таблицы, объединенные с теми строками из первой таблицы, для которых выполняется условие объединения.
<условие объединения> – выражение, в котором поля первой таблицы сравниваются с полями второй таблицы. В бланке запроса QBE в условии объединения используется только оператор равно (=). Запрос на основе объединения таблиц по неравенству (<, >, <>, <= или >=) можно создать только в режиме SQL.
Пример 1
Следующий запрос отображает сведения о складах фирмы Citilink.
Запрос отображает список товаров, которые еще не продавались, с указанием наименования товаров и номеров складов, на которых они хранятся.
SELECT Товары.Наименование, Хранение.НомерСклада
FROM (Товары INNER JOIN Хранение ON Товары.КодТовара = Хранение.КодТовара) LEFT JOIN Продажи ON Хранение.ID = Продажи.ID
WHERE (( Продажи.Количество) Is Null);
Следующая операция возвратит все строки из таблиц Товары и Хранение, для которых совпадают значения в поле КодТовара.
Товары INNER JOIN Хранение ON Товары.КодТовара = Хранение.КодТовара
Операция LEFT JOIN возвратит все строки из таблицы, полученной в результате предыдущей операции INNER JOIN, объединенные с теми строками из [Продажи], для которых выполняется условие объединения. Тогда в строке товара, который не продавался, в поле «количество проданного товара» будет значение Null, что будет являться условием отбора для искомого списка.
Предложение GROUP BY
В инструкции SELECT задает столбцы, используемые для формирования групп из выбранных строк.
Синтаксис
GROUP BYимя–столбца, …
Оператор GROUP BY разделяет рассматриваемую таблицу на такие группы, что внутри любой из этих групп все строки содержат одинаковые значения в указанном столбце.
Пример
Следующий запрос отображает общее количество проданного товара каждого наименования:
HAVING – специальная форма фразы WHERE. Она относится не к отдельным строкам, а к группам: предикат во фразе HAVING всегда ссылается (посредством специальных библиотечных функций, таких как, например, SET) на свойства групп, а не строк, и на основе этого предиката группы целиком либо выбираются, либо отбрасываются.
Синтаксис
HAVING<условие отбора>
В случае отсутствия предложения GROUP BY условие отбора применяется ко всей логической таблице, определенной инструкцией SELECT.
Пример
Следующий запрос отображает общее количество проданного товара по дням с 10 по 20 декабря 2003г.
HAVING ((Продажи.Дата) Between #10.12.03# AND #20.12.03#);
Предложение ORDER BY
Задает порядок расположения строк, возвращаемых инструкцией SELECT
Синтаксис
ORDER BY {имя–столбца | номер–столбца [ASC | DESC]}, …
Оператор ORDER BY определяет сортировку результата выборки в порядке возрастания ASC или убывания DESC значений атрибута. В предложении ORDER BY можно указать несколько столбцов. Список сортируется сначала по значениям столбца, имя которого указано первым.
Пример
Следующий запрос отображает список товаров упорядоченных по цене
SELECT Товары.Наименование, Товары.Цена
FROM Товары
ORDER BY Товары.Цена DESC;
Инструкция SELECT
Выполняет операции выбора и объединения для создания логической таблицы (набора записей) на базе других таблиц или запросов.
Синтаксис
SELECT[ALL | DISTINCT | DISTINCTROW | TOP число
[PERCENT]] <список–полей>
Предикаты ALL, DISTINCT, DISTINCTROW, TOP n или TOP n PERCENT уточняют окончательный набор записей запроса.
По умолчанию действует предикат ALL, при котором в набор записей включаются все строки, удовлетворяющие условиям отбора, в том числе дубликаты.
Предикат DISTINCT требует, чтобы запрос возвратил только строки, отличающиеся от всех остальных.
Если инструкция SELECT содержит предикат DISTINCTROW, то в набор записей включаются только те строки, в которых конкатенация первичных ключей из всех таблиц, участвующих в формировании возвращаемых столбцов, является уникальной. В зависимости от того, какие столбцы представлены в наборе записей, иногда можно увидеть повторяющиеся строки, но даже в этом случае каждая строка запроса образована из уникальной (DISTINCT) комбинации строк (ROWS) базовых таблиц.
Чтобы результирующий набор содержал только первые n или первые n процентов записей, используйте предикат TOP n или TOP n PERCENT. Параметр n должен быть целым числом, не превышающим 100, если используется ключевое слово PERCENT.
Пример
Следующий запрос отображает список 10 самых дорогих товаров