Запрос на создание новой таблицы

С помощью этого запроса можно создать новую таблицу на основе уже существующей и перенести в нее все или удовлетворяющие некоторому критерию записи. Новая таблица будет иметь ту же структуру. Обычно этот запрос применяется для создания архивных копий таблиц. Запрос на создание новой таблицы имеет формат вида:

SELECT <список полей> INTO <имя новой таблицы>

FROM <имя таблицы> [WHERE <условие отбора>].

В новую таблицу будут перенесены поля, перечисленные в списке полей инструкции SELECT, для всех записей, удовлетворяющих условию отбора. Например,

SELECT Клиенты.Фамилия, Клиенты.Имя, Клиенты.Отчество INTO Совершеннолетние FROM Клиенты WHERE Клиенты.[год рождения]>#1984/01/04#;

Специальные запросы

Перекрестные запросы

Инструкция TRANSFORM служит для создания перекрестного запроса. Перекрестные запросы позволяют создать таблицу перекрестную (сводную), в которой можно будет просмотреть зависимость некоторых данных от двух параметров, один из которых откладывается по строкам, второй по столбцам.

В общем случае инструкция TRANSFORM записывается следующим образом:

TRANSFORM выражение с групповой функцией (вычисляет значения ячеек)

SELECT инструкция с применением GROUP BY (отбирает записи и задает имена строк)

PIVOT выражение, задающее имена столбцов.

К примеру, нам надо определить объем выручки от продажи каждого товара по месяцам. Тогда каждая строка полученной таблицы будет соответствовать определенному товару, в качестве столбцов будут названия месяцев, а в ячейках таблицы будут представлены соответствующие объемы продаж.

 

Месяцы Товары Янв 2002 Февр 2002 Март 2002 Апр 2002
Молоко
Мясо
Птица
Рыба

 

TRANSFORM Sum(Заказы.Цена* Заказы.Количество) AS СуммаПоТовару

SELECT Товары.Товар FROM Товары INNER JOIN Заказы ON Товары.КодТовара = Заказы.КодТовара WHERE Заказы.[Дата заказа] BETWEEN #2002/1/1# And #2002/30/4# GROUP BY Товары.Товар

PIVOT Format([Дата заказа],"mmm yyyy");

В выражении PIVOT можно также применить функцию DatePart("m",[ДатаРазмещения],1,0), возвращающую номер месяца.

Запрос на объединение

Оператор UNION позволяет объединить выходные наборы нескольких инструкций SELECT в одну результирующую таблицу (так называемое вертикальное объединение). Этот запрос является аналогом операции объединения отношений в реляционной алгебре. При объединении записи, возвращаемые второй и последующими инструкциями SELECT, будут дописываться в конец первой, причем из результата выборки будут всегда исключаться повторяющиеся записи. В выходных наборах всех инструкций SELECT должно быть одинаковое количество полей с одинаковыми характеристиками (последнее требование в некоторых СУБД не является обязательным). В крайнем случае некоторую инструкцию SELECT можно дополнить строковыми константами или вычисляемыми полями. В качестве заголовков столбцов для выходного набора будут приниматься имена полей первой инструкции. Для выполнения сортировки результирующего набора данных объединение может дополняться оператором ORDER BY, который записывается в конце последней инструкции SELECT:

SELECT Фамилия & “ “ & Имя & “ ” & Отчество As Название, Город FROM Клиенты

UNION SELECT Поставщик, Город FROM Поставщики

ORDER BY Название, Город;

Кроме UNION в SQL2 включены еще две операции реляционной алгебры: исключения – EXCEPT (аналог операции разности . Отношение R включает записи, присутствующие в A и отсутствующие в B) и пересечения – INTERSECT (аналог операции пересечения . Отношение R включает записи, присутствующие как в A, так и в B). Как и для объединения, операнды (таблицы) этих операций должны содержать соответствующий по типам набор полей.