- •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: язык исчисления с переменными – доменами
- •Формы запросов
- •Зарезервированные слова:
- •Конструирование операторов запроса.
- •Выбор записей
- •Запросы к нескольким таблицам
- •Вычисления
- •Операции
- •Группы записей
- •Работа с наборами записей
- •Развитые операторы запросов.
Конструирование операторов запроса.
Запрос формируется как пример информации, интересующей пользователя. При этом указывается, какие поля нужно включить в Answer и критерии выбора записей. Для выбора поля курсор перемещается в него и нажимается клавиша F6. В поле появляется знак √ (checkmark). Повторное нажатие F6 отменяет выделение. Для выбора всех полей курсор помещается в крайнее левое поле и нажимается F6. При этом √ появится во всех полях формы.
Выбранные поля включаются в Answer обычно под теми же именами, которые они имели в форме запроса. Для изменения имени используется as. В приводимых ниже примерах используется база данных, содержащая таблицы S (Поставщики), P (Детали), SP (Поставки) и SPO (Заказы):
STR_S═╦════════Field Name═╦Field Type╗
1 ║ НомП ║ A3* ║
2 ║ ИмяП ║ A8 ║
3 ║ Статус ║ S ║
4 ║ Город ║ A15 ║
STR_P═╦════════Field Name═╦Field Type╗
1 ║ НомД ║ A3* ║
2 ║ Наим ║ A12 ║
3 ║ Цвет ║ A10 ║
4 ║ Вес ║ S ║
5 ║ Город ║ A15 ║
S
Таблица SP:
НомП
НонД
Колич
П1
Д3
4
П1
Д4
12
П1
Д5
45
П1
Д7
278
П1
Д8
97
П1
Д9
300
П10
Д1
34
П10
Д12
56
П10
Д13
98
П10
Д7
100
П2
Д10
35
П2
Д11
67
П2
Д14
23
П2
Д15
65
П2
Д4
378
П3
ДЗ
45
П3
Д4
12
П3
Д5
88
П4
Д2
54
П6
Д1
35
П7
Д11
98
П7
Д12
78
П8
Д7
76
П9
Д7
35
П9
Д8
300
1 ║ НомП ║ A3* ║
2 ║ НомД ║ A3* ║
3 ║ Колич ║ S ║
STR_SPO═╦══════Field Name══╦Field Type╗
1 ║ НомЗ ║ S* ║
2 ║ НомП ║ A3* ║
3 ║ НомД ║ A3* ║
4 ║ Колич ║ S ║
5 ║ Дата ║ D ║
Таблица Р:
НонД |
Наин |
Цвет |
Вес |
Город |
Д1 |
Корпус |
Серый |
15 |
Калининград |
Д10 |
Дрель |
Синий |
6 |
Рязань |
Д11 |
Шкив |
Черный |
12 |
Киев |
Д12 |
Вал |
Черный |
12 |
Киев |
Д13 |
Фреза |
Серый |
1 |
Киев |
Д14 |
Пила |
Серый |
2 |
Тула |
Д15 |
Зубило |
Черный |
3 |
Тула |
Д2 |
Каркас |
Черный |
10 |
Калининград |
ДЗ |
Редуктор |
Красный |
57 |
Москва |
Д4 |
Стол |
Желтый |
20 |
Москва |
Д5 |
Стул |
Желтый |
6 |
Москва |
Д6 |
Молоток |
Черный |
2 |
Рязань |
Л7 |
Верстак |
Серый |
45 |
Казань |
Д8 |
Рубанок |
Черный |
1 |
Казань |
Д9 |
Мотор |
Красный |
88 |
Казань |
Таблица SPO:
НомЗ |
НомП |
НомД |
Колич |
Дата | ||||||||||||||||||||||||||||||||||||||||||||
1 |
П1 |
Д16 |
4 |
15.10.92 | ||||||||||||||||||||||||||||||||||||||||||||
Таблица S:
НомП
ИмяП
Статус
Город
П1
База1
40
Москва
П10
База10
15
Рязань
П2
База2
15
Казань
ПЗ
База3
10
Киев
П4
База4
30
Калининград
П5
База5
5
П6
База6
20
Тула
П7
База7
40
Москва
П8
База8
30
Калининград
П9
База9
40
Москва
|
П1 |
Д5 |
45 |
15.10.92 | ||||||||||||||||||||||||||||||||||||||||||||
1 |
П1 |
Д9 |
300 |
15.10.92 | ||||||||||||||||||||||||||||||||||||||||||||
1 |
П10 |
Д13 |
98 |
15.10.92 | ||||||||||||||||||||||||||||||||||||||||||||
1 |
П10 |
Д5 |
40 |
15.10.92 | ||||||||||||||||||||||||||||||||||||||||||||
1 |
П2 |
Д14 |
23 |
10.10.92 | ||||||||||||||||||||||||||||||||||||||||||||
2 |
П1 |
Д7 |
278 |
15.10.92 | ||||||||||||||||||||||||||||||||||||||||||||
2 |
П10 |
Д7 |
100 |
10.10.92 | ||||||||||||||||||||||||||||||||||||||||||||
2 |
П2 |
Д11 |
80 |
10.10.92 | ||||||||||||||||||||||||||||||||||||||||||||
2 |
П2 |
Д15 |
65 |
10.10.92 | ||||||||||||||||||||||||||||||||||||||||||||
2 |
П2 |
Д4 |
378 |
10.10.92 | ||||||||||||||||||||||||||||||||||||||||||||
3 |
П3 |
ДЗ |
45 |
23.09.92 | ||||||||||||||||||||||||||||||||||||||||||||
3 |
П3 |
Д4 |
10 |
23.09.92 | ||||||||||||||||||||||||||||||||||||||||||||
3 |
П6 |
Д1 |
35 |
23.09.92 | ||||||||||||||||||||||||||||||||||||||||||||
3 |
П7 |
Д11 |
98 |
23.09.92 | ||||||||||||||||||||||||||||||||||||||||||||
4 |
П7 |
Д12 |
78 |
28.09.92 | ||||||||||||||||||||||||||||||||||||||||||||
4 |
П8 |
ДЗ |
76 |
28.09.92 | ||||||||||||||||||||||||||||||||||||||||||||
4 |
П9 |
Д7 |
35 |
28.09.92 | ||||||||||||||||||||||||||||||||||||||||||||
4 |
П9 |
Д8 |
250 |
28.09.92 |
1) Получить номера поставщиков, поставляющих детали.
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║√ ║ ║ ║
ANSWER═╦═НомП═╗
1 ║ П1 ║
2 ║ П10 ║
3 ║ П2 ║
...
В Answer записи отсортированы по НомП.
Для включения в результат дублирующих записей вместо F6 необходимо нажать Alt F6 (Check Plus). В форме запроса появится знак √+. Answer будет включать дубликаты записей и не будет сортироваться.
2) Включение дубликатов и переименование полей.
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║√+ as "ALL" ║ ║ ║
ANSWER═╦═ALL══╗
1 ║ П1 ║
2 ║ П1 ║
3 ║ П1 ║
4 ║ П1 ║
5 ║ П1 ║
6 ║ П1 ║
7 ║ П10 ║
...
Записи в Answer обычно сортируются в возрастающем порядке. Для сортировки
по убыванию вместо F6 нужно использовать Ctrl F6. При этом в форме запроса появится √▼ (Check Descending).
3) Группировка по первому полю и сортировка по убыванию второго поля.
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║√ ║ ║√▼ ║
ANSWER═╦═НомП═╦══Колич══╗
1 ║ П1 ║ 300 ║
2 ║ П1 ║ 278 ║
3 ║ П1 ║ 97 ║
4 ║ П1 ║ 45 ║
5 ║ П1 ║ 12 ║
6 ║ П1 ║ 4 ║
7 ║ П10 ║ 100 ║
...