Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
228
Добавлен:
01.03.2016
Размер:
97 Кб
Скачать
☆

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

Оператор 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), установить блокировку записей, фильтр, тип набора записей (определяет возможность редактирования запроса) и много другого.