ТОРА (9) - Семинар №1 - Операции реляционной алгебры
Операции реляционной алгебры и их связь с SQL.
Операторы SQL
SELECT
SELECT - выборка, DISTINCT - исключая.
SELECT [DISTINCT] * | атрибуты
FROM таблицы
WHERE условие
UPDATE
UPDATE - обновление, изменение.
UPDATE таблица
SET атрибут = выражение
WHERE условие
INSERT
INSERT - вставка, добавление новых записей.
INSERT
INTO таблица
записи
DELETE
DELETE - удаление записей.
DELETE
FROM таблица
WHERE условие
Предметная область, используемая в задачах
Этого семинара, само собой.
Таблицы
Таблицы $$\rho=(S,P,SP)$$
- $$S$$ - поставщики.
- SN - номер поставщика;
- SF - фамилия;
- SS - статус;
- SG - город.
- $$P$$ - деталь.
- PN - номер детали, ключ;
- PF - название детали;
- PC - цена за единицу.
- $$SP$$ - поставка.
- SN - номер поставщика;
- PN - номер детали;
- kol - количество поставляемых деталей.
Примеры экземпляров отношений
|
|
|
Задачи
Задача №1
Проекция. Найти города, где проживают поставщики.
$$t=\Pi_{SG}(S)$$
Получится:
| SG |
|---|
| Москва |
| Самара |
SELECT DISTINCT SG FROM S
Задача №2
Селекция. Найти поставщиков со статусом больше 70.
$$t=\sigma_{SS>70}(S)$$
Получится:
| SN | SF | SS | SG |
|---|---|---|---|
| S1 | Иванов | 80 | Москва |
| S3 | Кротов | 100 | Москва |
SELECT * FROM S WHERE SS > 70
Задача №3
Найти номера и фамилии поставщиков со статусом меньше 80.
$$t=\Pi_{SN,SF}(\sigma_{SS<80}(S))$$
Получится:
| SN | SF |
|---|---|
| S2 | Петров |
SELECT SN, SF
FROM S
WHERE SS < 80
Задача №4
Удалить все поставки поставщика с номером S1.
$$SP = SP - \sigma_{SN=S1}(SP)$$
Получится:
| SN | PN | kol |
|---|---|---|
| S2 | P3 | 150 |
| S3 | P3 | 50 |
DELETE
FROM SP
WHERE SN = S1
Задача №5
Добавить в таблицу S новых поставщиков из таблицы SNEW.
| SN | SF | SS | SG |
|---|---|---|---|
| S4 | Петров | 30 | Тверь |
| S5 | Сидоров | 50 | Тверь |
$$S = SP\bigcup S$$
Получится:
| SN | SF | SS | SG |
|---|---|---|---|
| S1 | Иванов | 80 | Москва |
| S2 | Петров | 40 | Самара |
| S3 | Кротов | 100 | Москва |
| S4 | Петров | 30 | Тверь |
| S5 | Сидоров | 50 | Тверь |
INSERT
INTO S
SELECT * FROM SNEW
Задача №6
Найти номера поставщиков, поставляющих детали по цене меньше 30.
$$r = \sigma_{PC<30}(P)$$
$$t = SP \bowtie_{PN} r$$
Получится:
| PN | PF | PC | SN | kol |
|---|---|---|---|---|
| P1 | болт | 20 | S1 | 100 |
| P3 | шайба | 10 | S1 | 200 |
| P3 | шайба | 10 | S2 | 150 |
| P3 | шайба | 10 | S3 | 50 |
$$z = \Pi_{SN}(t)$$
Получится:
| SN |
|---|
| S1 |
| S2 |
| S3 |
SELECT DISTINCT SN
FROM SP, P
WHERE PC < 30 AND SP.PN = P.PN
Задача №7
Найти номера и фамилии поставщиков, поставляющих шайбы в количестве больше 100.
$$w = \sigma_{PF=шайба}(P)$$
$$t = w \bowtie_{PN}SP$$
$$z = \sigma_{kol>100}(t)$$
$$q = z \bowtie_{SN} S$$
$$x = \Pi_{SN,SF}(q)$$
Получится:
| SN | SF |
|---|---|
| S1 | Иванов |
| S2 | Петров |
SELECT SN, SF
FROM S, P, SP
WHERE PF = 'шайба' AND kol > 100 AND P.PN = SP.PN AND SP.SN = S.SN
Задача №8
Все поставщики переехали из Москвы в Питер. Модифицировать таблицу S.
$$t = \sigma_{SS=Москва}(S)$$, получится:
| SN | SF | SS | SG |
|---|---|---|---|
| S1 | Иванов | 80 | Москва |
| S3 | Кротов | 100 | Москва |
$$f = \Pi_{SN,SF,SS}(t)$$, получится:
| SN | SF | SS |
|---|---|---|
| S1 | Иванов | 80 |
| S3 | Кротов | 100 |
Ввели новую таблицу spb:
| SG |
|---|
| Санкт-Петербург |
$$m = f\times spb$$, получится:
| SN | SF | SS | SG |
|---|---|---|---|
| S1 | Иванов | 80 | Санкт-Петербург |
| S3 | Кротов | 100 | Санкт-Петербург |
$$z = S - t$$, получится:
| SN | SF | SS | SG |
|---|---|---|---|
| S2 | Петров | 40 | Самара |
$$S = m \bigcup z$$, получится:
| SN | SF | SS | SG |
|---|---|---|---|
| S1 | Иванов | 80 | Санкт-Петербург |
| S3 | Кротов | 100 | Санкт-Петербург |
| S2 | Петров | 40 | Самара |
UPDATE S
SET SG='Санкт Петербург'
WHERE SG='Москва'