- •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: язык исчисления с переменными – доменами
- •Формы запросов
- •Зарезервированные слова:
- •Конструирование операторов запроса.
- •Выбор записей
- •Запросы к нескольким таблицам
- •Вычисления
- •Операции
- •Группы записей
- •Работа с наборами записей
- •Развитые операторы запросов.
Запросы к нескольким таблицам
В запросе могут использоваться несколько таблиц. В этом случае заполняется форма запроса для каждой таблицы и используются элементы-примеры (example), чтобы указать системе, как связана информация в разных таблицах.
Таблицы в мультитабличном запросе связываются с помощью общих полей, которые содержат одну и ту же разновидность информации, например, поле НомП в таблицах S и SP. Поля не обязательно должны иметь одинаковые имена. Для индикации общих полей в них заносятся элементы-примеры. Кроме того, они позволяют выполнять вычисления над значениями, включать новые записи, базирующиеся на существующих, и т.д.
Для ввода элемента-примера нужно нажать F5 и затем ввести значение, которое в форме запроса выделяется цветом. Значение должно содержать только буквы A - Z и цифры 0 - 9 и не может включать пробелы. Ниже элементы-примеры выделены.
19)
S═╦══НомП════╦════ИмяП════╦════Статус════╦══════Город══════╗
║ NP ║√ ║ ║ ║
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║ NP ║√ ║√ ║
ANSWER═╦══ИмяП════╦═НомД═╦══Колич══╗
1 ║ База 1 ║ Д3 ║ 4 ║
2 ║ База 1 ║ Д4 ║ 12 ║
3 ║ База 1 ║ Д5 ║ 45 ║
4 ║ База 1 ║ Д7 ║ 278 ║
5 ║ База 1 ║ Д8 ║ 97 ║
6 ║ База 1 ║ Д9 ║ 300 ║
7 ║ База 10 ║ Д1 ║ 34 ║
...
20)
S═╦══НомП═══╦════ИмяП═════╦═════Статус══════╦══════Город══════╗
║ NP ║√ ║ ║ ║
P═╦═══НомД═══╦════Наим══════╦════Цвет═════╦═Вес═══╦═══Город════╗
║ ND ║√ ║ ║ ║ ║
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║ NP ║ ND ║√ ║
ANSWER═╦══ИмяП════╦═════Наим══════╦══Колич══╗
1 ║ База 1 ║ Верстак ║ 278 ║
2 ║ База 1 ║ Мотор ║ 300 ║
...
Порядок полей в таблице Answer определяется последовательностью форм запросов в рабочем пространстве и порядком полей в каждой таблице.
В мультитабличный запрос можно включить произвольное количество условий выбора. При этом оператор or нельзя использовать с элементом-примером.
21)
S═╦════НомП═══╦════ИмяП═════╦════Статус════╦══════Город══════╗
║ NP ║√ ║√ as Ст ║√ as Адр ║
P═╦══НомД═══╦══Наим═══╦══Цвет═══╦════Вес════╦═════Город══════╗
║ ND ║√ ║ ║ >=5,<=20 ║ Киев or Тула ║
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║ NP ║ ND ║√ >20 ║
ANSWER═╦══ИмяП══╦══Ст═══╦════Адр═══╦════Наим════╦══Город═╦═Колич═╗
1 ║ База 10║ 15 ║ Рязань ║ Вал ║ Киев ║ 56 ║
2 ║ База 2 ║ 15 ║ Казань ║ Шкив ║ Киев ║ 67 ║
3 ║ База 7 ║ 40 ║ Москва ║ Вал ║ Киев ║ 78 ║
4 ║ База 7 ║ 40 ║ Москва ║ Шкив ║ Киев ║ 98 ║
22)
P═╦══НомД═══╦═════Наим═════╦════Цвет═════╦══Вес════╦═══Город════╗
║ ND1 ║√ ║√ красный ║√ ║ ║
║ ND2 ║√ ║√ ║√ >40 ║ ║
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║√ ║ ND1 ║√ ║
║√ ║ ND2 ║√ ║
ANSWER═╦═════Наим══════╦════Цвет════╦══Вес══╦═НомП═╦══Колич══╗
1 ║ Верстак ║ Серый ║ 45 ║ П1 ║ 278 ║
2 ║ Верстак ║ Серый ║ 45 ║ П10 ║ 100 ║
3 ║ Верстак ║ Серый ║ 45 ║ П8 ║ 76 ║
4 ║ Верстак ║ Серый ║ 45 ║ П9 ║ 35 ║
5 ║ Мотор ║ Красный ║ 88 ║ П1 ║ 300 ║
6 ║ Редуктор ║ Красный ║ 57 ║ П1 ║ 4 ║
7 ║ Редуктор ║ Красный ║ 57 ║ П3 ║ 45 ║
23) Определить имена поставщиков, поставляющих детали с номерами Д3 и Д5.
S═╦════НомП════╦════ИмяП════╦════Статус════╦═════Город═════╗
║ NP ║√ ║ ║ ║
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║√ NP ║√ Д3 ║ ║
║ NP ║√ Д5 ║ ║
ANSWER═╦══ИмяП════╦═НомП═╦═НомД═╦НомД-1╗
1 ║ База 1 ║ П1 ║ Д3 ║ Д5 ║
2 ║ База 3 ║ П3 ║ Д3 ║ Д5 ║
24) Определить названия деталей того же цвета, что и деталь с номером Д1.
P═╦═══НомД═══╦═════Наим═════╦════Цвет═════╦══Вес═══╦═══Город════╗
║ Д1 ║ ║ CL ║ ║ ║
║ ║√ ║√ CL ║ ║ ║
ANSWER═╦═════Наим══════╦════Цвет════╗
1 ║ Верстак ║ Серый ║
2 ║ Корпус ║ Серый ║
3 ║ Пила ║ Серый ║
4 ║ Фреза ║ Серый ║
25) Использование элемента-примера при задании диапазона: Определить детали с весом, большим чем у Д3.
P═╦══НомД══╦═════Наим════╦════Цвет════╦══Вес════╦════Город════╗
║ Д3 ║ ║ ║ W ║ ║
║√ ║√ ║ ║√ >W ║ ║
ANSWER═╦══НомД═╦═════Наим══════╦══Вес══╗
1 ║ Д9 ║ Мотор ║ 88 ║
26) Элемент-пример в выражении: Определить детали, которые тяжелее детали Д3 более чем на 5 кг.
P═╦═НомД══╦════Наим════╦════Цвет════╦══Вес════╦════Город════╗
║ Д3 ║ ║ ║ W ║ ║
║√ ║√ ║ ║√ >W+5 ║ ║
ANSWER═╦═НомД═╦═════Наим══════╦══Вес══╗
1 ║ Д3 ║ Редуктор ║ 57 ║
2 ║ Д9 ║ Мотор ║ 88 ║
27) Элемент-пример с оператором not: Определить наименования и номера деталей, поставляемых несколькими различными поставщиками:
P═╦═══НомД═══╦════Наим═════╦════Цвет════╦══Вес════╦════Город════╗
║ ND ║√ ║ ║ ║ ║
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║ S ║√ ND ║ ║
║ not S ║ ND ║ ║
ANSWER═╦═════Наим══════╦═НомД═╗
1 ║ Вал ║ Д12 ║
2 ║ Верстак ║ Д7 ║
3 ║ Корпус ║ Д1 ║
4 ║ ... ║ ║
В примере 19 элемент-пример связывал таблицы S и SP, причем в Answer попадали данные только о тех поставщиках, которые в данный период поставляют какие-либо детали, т.е. номера которых присутствуют и в S, и в SP. Такой вид запроса называется исключающей связью (exlusive link).
Если необходимо включить в Answer всех поставщиков, можно использовать оператор включения (inclusion operator) для установления между двумя таблицами включающей связи (inclusive link). Оператор ! записывается справа от элемента-примера (без пробела между ними) в той таблице, которая будет главной. Это означает, что СУБД выберет все записи в поле с оператором ! до того, как начнет связывать их с соответствующими записями второй таблицы ("lookup" table), из которой выбираются только соответствующие записи.
28)
S═╦═══НомП════╦════ИмяП════╦══════Статус════╦══════Город══════╗
║ NP! ║√ ║ ║ ║
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║ NP ║√ ║√ ║
ANSWER═╦══ИмяП════╦═НомД═╦══Колич══╗
1 ║ База 1 ║ Д3 ║ 4 ║
2 ║ База 4 ║ Д2 ║ 54 ║
3 ║ База 5 ║ ║ ║
4 ║ ... ║ ║ ║
И в главной, и в зависимой таблицах можно задать условия выбора. При этом необходимо помнить, что сначала выбираются записи главной таблицы до установления связи с зависимой таблицей. Это одни из немногих случаев, когда нужно думать о последовательности выполнения запроса, так как расположение ! в разных таблицах дает различные результаты, например:
29) Определить названия, цвет и вес деталей, хранящихся в Москве, а также номер поставляющего эти детали поставщика и количество поставляемых деталей, если оно превышает 150.
P═╦════НомД════╦═════Наим════╦════Цвет════╦══Вес════╦════Город════╗
║ ND! ║√ ║√ ║√ ║ Москва ║
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║√ ║ ND ║√ >150 ║
ANSWER═╦═════Наим══════╦════Цвет════╦══Вес══╦═НомП═╦══Колич══╗
1 ║ Редуктор ║ Красный ║ 57 ║ ║ ║
2 ║ Стол ║ Желтый ║ 20 ║ П2 ║ 378 ║
3 ║ Стул ║ Желтый ║ 6 ║ ║ ║
30) Определить номера поставщиков и количество деталей в поставляемых партиях, а также, если поставляемые детали хранятся в Москве, название, цвет и вес поставляемых деталей.
P═╦════НомД═══╦════Наим═════╦════Цвет════╦══Вес════╦════Город════╗
║ ND ║√ ║√ ║√ ║ Москва ║
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║√ ║ ND! ║√ >150 ║
ANSWER═╦═════Наим══════╦════Цвет════╦══Вес══╦═НомП═╦══Колич══╗
1 ║ ║ ║ ║ П1 ║ 278 ║
2 ║ ║ ║ ║ П1 ║ 300 ║
3 ║ ║ ║ ║ П9 ║ 300 ║
4 ║ Стол ║ Желтый ║ 20 ║ П2 ║ 378 ║
║ ║ ... ║ ║ ║ ║
