- •4. Реляционные языки запросов
- •Isbl -язык реляционной алгебры
- •Язык sql
- •Типы данных.
- •Создание, удаление или изменение таблиц или индексов с помощью управляющих запросов sql.
- •Инструкция create table
- •Предложение constraint (sql)
- •Инструкция alter table
- •Инструкция drop
- •Drop {table таблица | index индекс on таблица}
- •Инструкция create index
- •Запросы на выборку. Инструкция select
- •Предикаты all, distinct, distinctrow, top (sql)
- •Select [all | distinct | distinctrow | [top n [percent]]]
- •Предложение from
- •Синтаксис
- •Предложение where
- •Синтаксис
- •Предложение order by
- •Синтаксис
- •Группировка записей. Предложение group by
- •Синтаксис
- •Where условие_отбора
- •Предложение having
- •Синтаксис
- •From таблица
- •Запросы с соединением таблиц. Операция inner join
- •On таблица1.Поле2 оператор_сравнения таблица2.Поле2) or
- •Операции left join, right join
- •From таблица1 [ left | right ] join таблица2
- •Объединение результатов нескольких запросов. Операция union
- •Подчиненный запрос.
- •Запросы на изменение. Инструкция select...Into
- •From источник
- •Предложение in
- •Синтаксис
- •Инструкция insert into
- •Инструкция update
- •Инструкция delete
- •Delete [таблица.*]
- •Перекрестные запросы
- •Синтаксис
- •Запросы с параметрами Описание parameters
- •Синтаксис parameters имя тип_данных [, имя тип_данных [, ...]]
- •Статистические функции sql .
- •Функция Avg
- •Функция Count
- •Функции Min, Max
- •Функции StDev, StDevP
- •Функция Sum
- •Функции Var, VarP
- •Var(выражение)
- •VarP(выражение)
- •Quel:язык реляционного исчисления с переменными-кортежами
- •Query-by-example: язык исчисления с переменными – доменами
- •Формы запросов
- •Зарезервированные слова:
- •Конструирование операторов запроса.
- •Выбор записей
- •Запросы к нескольким таблицам
- •Вычисления
- •Операции
- •Группы записей
- •Работа с наборами записей
- •Развитые операторы запросов.
On таблица1.Поле2 оператор_сравнения таблица2.Поле2) or
ON таблица1.поле3 оператор_сравнения таблица2.поле3)];
Операции JOIN могут быть вложенными; в таком случае используется следующий синтаксис:
SELECT поля
FROM таблица1 INNER JOIN
(таблица2 INNER JOIN [( ] таблица3
[INNER JOIN [( ] таблицаХ[INNER JOIN ...)]
ON таблица3.поле3 оператор_сравнения таблицаx.полеХ)]
ON таблица2.поле2 оператор_сравнения таблица3.поле3)
ON таблица1.поле1 оператор_сравнения таблица2.поле2;
Операции LEFT JOIN или RIGHT JOIN могут быть вложены в операцию INNER JOIN, но операция INNER JOIN не может быть вложена в LEFT JOIN или RIGHT JOIN.
Операции left join, right join
Объединяют записи исходных таблиц в любом предложении FROM.
Синтаксис
From таблица1 [ left | right ] join таблица2
ON таблица1.поле1 оператор_сравнения таблица2.поле2
Операцию LEFT JOIN используют для создания левого внешнего объединения, при котором все записи из первой (левой) таблицы включаются в динамический набор, даже если во второй (правой) таблице нет соответствующих им записей.
Операцию RIGHT JOIN используют для создания правого внешнего объединения, при котором все записи из второй (правой) таблицы включаются в динамический набор, даже если в первой (левой) таблице нет соответствующих им записей.
Примеры:
Определить имена поставщиков, коды поставляемых товаров и их количество с текущей датой поставки:
SELECT Имя, [Код товара], Количество, Дата
FROM Поставщики INNER JOIN Поставки ON Поставщики.[Код поставщика] = Поставки.[Код поставщика]
WHERE Адрес="Калининград" AND Дата=Date();
Определить наименования поставляемых товаров и их количество, имена поставщиков с датой поставки 30/07/99:
SELECT Наименование, Имя, Количество, Дата
FROM Товары INNER JOIN (Поставщики INNER JOIN Поставки ON Поставщики.[Код поставщика] = Поставки.[Код поставщика]) ON Товары.[Код товара] = Поставки.[Код товара]
WHERE Дата>#30/07/99#;
Определить наименования поставляемых товаров и их стоимость с датой поставки 8/10/99:
SELECT Наименование, Sum([Цена]*[Количество]) AS Сумма
FROM Товары INNER JOIN Поставки ON Товары.[Код товара] = Поставки.[Код товара]
WHERE Дата>#8/10/99#
GROUP BY Наименование;
Определить наименования всех товаров и ,для поставляемых товаров, коды поставщиков и количество:
SELECT Наименование, [Код поставщика], Количество
FROM Товары LEFT JOIN Поставки ON Товары.[Код товара] = Поставки.[Код товара];
Объединение результатов нескольких запросов. Операция union
Создает запрос на объединение, который объединяет результаты выполнения нескольких независимых запросов или таблиц.
Синтаксис
[TABLE] запрос1 UNION [ALL][TABLE] запрос2 [UNION [ALL] [TABLE] запросn [ ... ]]
где запрос1-n - инструкция SELECT, имя сохраненного запроса или имя сохраненной таблицы, перед которой стоит зарезервированное слово TABLE.
В одной операции UNION можно объединить в любом наборе результаты нескольких запросов, таблиц и инструкций SELECT.
По умолчанию повторяющиеся записи не возвращаются при использовании операции UNION, однако в нее можно добавить предикат ALL, чтобы гарантировать возврат всех записей. Кроме того, такие запросы выполняются быстрее.
Все запросы, включенные в операцию UNION, должны отбирать одинаковое число полей; при этом типы и размеры полей не имеют значения.
Псевдонимы используются только в первом предложении SELECT, потому что в остальных они пропускаются. В предложении ORDER BY ссылайтесь на поля по их названиям в первом предложении SELECT.
В каждом аргументе запрос можно использовать предложения GROUP BY и/или HAVING для группирования возвращаемых данных.
В конец последнего аргумента запрос можно включить предложение ORDER BY, чтобы отсортировать возвращенные данные.
Примеры:
Объединить в одну таблицу данные из трех таблиц:
SELECT Тип AS Код, Наименование FROM Типы UNION
SELECT [Код товара],Наименование FROM Товары UNION
SELECT [Код поставщика],Имя FROM Поставщики
WHERE Адрес = "Калининград"
ORDER BY Наименование;
Объединить таблицу Типы и поля Код товара и Дата из таблицы Поставки с датой поставки меньше 10/09/99:
TABLE Типы UNION ALL
SELECT [Код товара], Дата FROM Поставки
WHERE Дата > #10/09/99#;