- •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: язык исчисления с переменными – доменами
- •Формы запросов
- •Зарезервированные слова:
- •Конструирование операторов запроса.
- •Выбор записей
- •Запросы к нескольким таблицам
- •Вычисления
- •Операции
- •Группы записей
- •Работа с наборами записей
- •Развитые операторы запросов.
Подчиненный запрос.
Этот тип запроса состоит из инструкции SQL SELECT, находящейся внутри другого запроса на выборку или запроса на изменение. Эти инструкции вводятся в строку "Поле" бланка запроса для определения нового поля или в строку "Условие отбора" для определения условия отбора поля. Подчиненные запросы используются для выполнения следующих действий:
-проверка в подчиненном запросе существования некоторых результатов (с помощью зарезервированных слов EXISTS или NOT EXISTS);
-поиск в главном запросе любых значений, которые равны, больше или меньше значений, возвращаемых в подчиненном запросе (с помощью зарезервированных слов ANY, IN или ALL);
-создание подчиненных запросов внутри подчиненных запросов (вложенных подчиненных запросов).
Не допускается использование инструкции SELECT подчиненного запроса в запросе на объединение или в перекрестном запросе.
Примеры:
Определить имена поставщиков, поставляющих товар с кодом 255:
SELECT Имя
FROM Поставщики
WHERE [Код поставщика] IN
(SELECT [Код поставщика]
FROM Поставки
WHERE [Код товара] = 255);
Определить наименования товаров, поставляемых поставщиками из Москвы:
SELECT Наименование
FROM Товары
WHERE [Код товара] IN
(SELECT [Код товара]
FROM Поставки
WHERE [Код поставщика] IN
(SELECT [Код поставщика]
FROM Поставщики
WHERE Адрес = "Москва"));
Определить имена поставщиков, поставляющих товар с кодом 255 (коррелированный подзапрос):
SELECT Имя
FROM Поставщики
WHERE 255 IN
(SELECT [Код товара]
FROM Поставки
WHERE [Код поставщика] = Поставки.[Код поставщика]);
Определить имена поставщиков, поставляющих хотя бы один товар, что и поставщик с кодом 135 (та же таблица в подчиненном запросе):
SELECT DISTINCT [Код поставщика]
FROM Поставки
WHERE [Код товара] IN
(SELECT [Код товара]
FROM Поставки
WHERE [Код поставщика] = 135);
Определить коды товаров, поставляемых несколькими поставщиками:
SELECT DISTINCT [Код товара]
FROM Поставки П1
WHERE [Код товара] IN
(SELECT [Код товара]
FROM Поставки
WHERE [Код поставщика] <> П1.[Код поставщика]);
Определить имена поставщиков, поставляющих товар с кодом 255:
SELECT Имя
FROM Поставщики
WHERE EXISTS
(SELECT *
FROM Поставки
WHERE [Код поставщика] = Поставщики.[Код поставщика]
AND [Код товара] = 255);
Определить имена поставщиков, поставляющих все товары:
SELECT DISTINCT Имя
FROM Поставщики
WHERE NOT EXISTS
(SELECT *
FROM Товары
WHERE NOT EXISTS
(SELECT *
FROM Поставки
WHERE [Код поставщика] = Поставщики.[Код поставщика]
AND [Код товара] = Товары. [Код товара]));
Определить коды поставщиков, поставляющих по крайней мере все товары, что и поставщик с кодом 135:
SELECT DISTINCT [Код поставщика]
FROM Поставки П1
WHERE NOT EXISTS
(SELECT *
FROM Поставки П2
WHERE [Код поставщика] = 135
AND NOT EXISTS
(SELECT *
FROM Поставки П3
WHERE П3.[Код поставщика] = П1.[Код поставщика]
AND П3.[Код товара] = П2.[Код товара]));
Определить наименование и цену товаров, которые дороже всех товаров типа 15:
SELECT Наименование, Цена
FROM Товары
WHERE Цена > ALL
(SELECT Цена
FROM Товары
WHERE Тип = 15);
Определить код, наименование и цену товаров, цена которых выше средней по их месту хранения:
SELECT [Код товара], Наименование, Цена
FROM Товары Т1
WHERE Цена >
(SELECT AVG(Цена)
FROM Товары
WHERE [Место хранения] = Т1.[Место хранения]);
