Запрос на объединение
Оператор
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).
Как и для объединения, операнды (таблицы)
этих операций должны содержать
соответствующий по типам набор полей.
Создание таблиц
Оператор создания таблицы имеет формат вида:
CREATE TABLE <имя таблицы> (<имя поля> <тип данных> [NOT NULL] [,<имя поля> <тип данных> [NOT NULL]] ... )
Обязательными операндами оператора являются имя создаваемой таблицы и имя хотя бы одного поля с указанием типа данных. При создании таблицы для отдельных полей могут указываться некоторые дополнительные правила контроля вводимых в них значений. Конструкция NOT NULL требует, чтобы в этом столбце должно быть определено значение. Например,
CREATE TABLE Товары( Код CHAR(5) NOT NULL, Тип CHAR(8), Наименование VARCHAR(20) NOT NULL, Цена DECIMAL(8,2) );
SQL поддерживает пять скалярных типов данных: символьный (строковый), битовый, численный, даты/время и интервал. Символьный тип данных позволяет определить строки фиксированной (CHAR(n) или CHARACTER(n)) и переменной длинны (VARCHAR(n) или CHAR VARYING(n) или CHARACTER VARYING(n)), где n означает максимальное количество символов. Спецификация VARYING позволяет сохранять в базе только вводимые символы, иначе введенная строка дополняется пробелами до n символов. Численный тип данных позволяет задавать целые числа разного размера (SMALLINT, INT или INTEGER) и вещественные числа разной точности (FLOAT [precision], REAL, DOUBLE PRECISION, NUMERIC(precision, scale), DECIMAL(precision, scale) или DEC (precision, scale)), где precision определяет полное число десятичных цифр, а scale – число цифр после десятичной точки. Битовые типы данных позволяют хранить последовательности двоичных цифр фиксированной (BIT(n)) и переменной длинны (BIT VARYING(n)). Для хранения данных типа даты/время введены три типа данных: DATE, TIME и TIMESTAMP. Типы DATE и TIME позволяют хранить соответственно дату и время по отдельности, а TIMESTAMP – вместе. Тип данных INTERVAL определен для хранения интервалов времени. При определении доменов типы данных задаются после оператора AS, например: Name AS VARCHAR(20).
Оператор изменения структуры таблицы имеет формат вида:
ALTER TABLE <имя таблицы>
( {ADD, MODIFY, DROP} <имя поля> [<тип данных>] [NOT NULL]
[,{ADD, MODIFY, DROP} <имя поля> [<тип данных>] [NOT NULL]]...)
Изменение структуры таблицы может состоять в добавлении (ADD), изменении (MODIFY) или удалении (DROP) одного или нескольких столбцов таблицы. Правила записи оператора ALTER TABLE такие же, как и оператора CREATE TABLE, разве что при удалении столбца указывать тип данных не требуется. Для примера добавим одно поле:
ALTER TABLE Товары(ADD Категория VARCHAR(20));
Оператор удаления таблицы имеет формат вида: DROP TABLE <имя таблицы>.
QBE
Запросы в Access можно создавать как с помощью визуальных средств – QBE (query by example – запрос по образцу), так и с помощью SQL (structured query language – структурированный язык запросов). Окно QBE состоит из панели задания таблиц и панели спецификации запроса. Перед созданием запроса в QBE (режим конструктора) появляется окно выбора имеющихся таблиц и запросов. Для создания запроса необходимо выбрать по крайней мере одну таблицу (следует выбирать только те таблицы из которым необходимо выбирать данные, и те, которые требуются для установления связей). Если между таблицами были определены связи в окне Схема данных, то они автоматически будут установлены и в запросе. В противном случае их можно установить аналогичным способом с помощью перетягивания требуемого поля из одной таблицы в другую.
В верхней строке спецификации запроса отображаются выбранные поля. Для выбора поля достаточно перетянуть его с помощью мыши из таблицы в требуемый столбец спецификации, представляющий описание одного поля запроса, или выбрать его из выпадающего списка. Для этого поля затем можно установить порядок сортировки, вывод на экран и установить критерии выбора этого поля. Перетянув выбранные поля в область спецификации запроса, мы таким образом определили запрос. Если вам требуются все поля некоторой таблицы, то можно перетянуть первую строку этой таблицы с изображением *, означающим “Все поля”. Остается только сохранить запрос и запустить его на выполнение.
С помощью такого запроса мы выберем указанные поля для всех записей. Чтобы ограничить число записей, можно воспользоваться условием отбора. Условие отбора можно задать для каждого поля, входящего в запрос. При этом все условия отбора объединяются по логической операции И. Для реализации условия отбора по ИЛИ служат нижние строки спецификации запроса.
В поле спецификации запроса можно определять также вычисляемые поля. Правила записи вычисляемых полей совпадают с определенными в SQL. Отличается лишь задание альтернативного имени. Альтернативное имя задается перед вычисляемым полем и отделяется двоеточием, например: ПолноеИмя: [Фамилия]&” “&[Имя]&” “&[Отчество]”. Это поле будет отображаться наряду с другими.
Для проведения внешнего объединения в режиме конструктора дважды нажмите на линию связи между таблицами. Появится диалоговое окно параметров объединения. Остается выбрать необходимый тип объединения и закрыть окно. На связи появится стрелка, направленная к таблице со стороны ∞.
При открытии запроса в режиме конструктора в меню появляется дополнительная группа команд меню Запрос, позволяющая создавать различные типы запросов. Можно визуально создавать все запросы действий, перекрестный запрос и некоторые виды запросов SQL. Дополнительно из этого меню можно открыть окно задания типов параметров (аналог инструкции SQL PARAMETERS). Методика визуального создания запросов действия и перекрестного запроса в QBE следующая. Вначале необходимо создать запрос выборки, отбирающий необходимые данные (полезно проверить его на выполнение и убедится, что вы выбираете действительно нужные записи) затем с помощью соответствующей команды меню перевести его в нужный вид. Поле спецификации запросов будет дополнено соответствующей строкой (Обновление, Удаление и Перекрестная таблица). Остается задать необходимые значения и запустить запрос на выполнение.
Запрос с группировкой можно создать по тому же сценарию. Вначале создается запрос выборки требуемых данных, затем вызывается команда Групповые операции (доступна из локального меню поля спецификации запроса и общего меню). Эта команда дополнит поле спецификации строкой Групповые операции. В этой строке автоматически устанавливается функция GroupBY (Группировка). Кроме функции группировки в этой строке для полей запроса можно задать вычисление групповых функций или задать условие отбора. При задании группировки необходимо помнить о том, что в группировке могут участвовать поля, которые принимают единственное значение для группы.
Для полей запроса можно поменять некоторые свойства, определенные для таблицы. Дополнительно в свойствах запроса можно задать выбор только уникальных значений (предикат DISTINCT), уникальных строк (предикат DISTINCTROW), установить блокировку записей, фильтр, тип набора записей (определяет возможность редактирования запроса) и много другого.
