ТОРА (9) - Семинар №1 - Операции реляционной алгебры: различия между версиями
ILobster (обсуждение | вклад) |
|||
(не показано 19 промежуточных версий 6 участников) | |||
Строка 7: | Строка 7: | ||
SELECT - выборка, DISTINCT - исключая. | SELECT - выборка, DISTINCT - исключая. | ||
<syntaxhighlight lang=sql>SELECT [DISTINCT] * | атрибуты | |||
FROM таблицы | |||
WHERE условие</syntaxhighlight> | |||
=== UPDATE === | === UPDATE === | ||
Строка 15: | Строка 15: | ||
UPDATE - обновление, изменение. | UPDATE - обновление, изменение. | ||
<syntaxhighlight lang=sql>UPDATE таблица | |||
SET атрибут = выражение | |||
WHERE условие</syntaxhighlight> | |||
=== INSERT === | === INSERT === | ||
Строка 23: | Строка 23: | ||
INSERT - вставка, добавление новых записей. | INSERT - вставка, добавление новых записей. | ||
<syntaxhighlight lang=sql>INSERT | |||
INTO таблица | |||
записи</syntaxhighlight> | |||
=== DELETE === | === DELETE === | ||
Строка 31: | Строка 31: | ||
DELETE - удаление записей. | DELETE - удаление записей. | ||
<syntaxhighlight lang=sql>DELETE | |||
FROM таблица | |||
WHERE условие</syntaxhighlight> | |||
== Предметная область, используемая в задачах == | == Предметная область, используемая в задачах == | ||
Строка 41: | Строка 41: | ||
=== Таблицы === | === Таблицы === | ||
Таблицы | Таблицы {{Формула|f=\rho=(S,P,SP)}} | ||
* | *{{Формула|f=S}} - поставщики. | ||
**SN - номер поставщика; | **SN - номер поставщика; | ||
**SF - фамилия; | **SF - фамилия; | ||
Строка 49: | Строка 49: | ||
**SG - город. | **SG - город. | ||
* | *{{Формула|f=P}} - деталь. | ||
** PN - номер детали, ключ; | ** PN - номер детали, ключ; | ||
** PF - название детали; | ** PF - название детали; | ||
** PC - цена за единицу. | ** PC - цена за единицу. | ||
* | *{{Формула|f=SP}} - поставка. | ||
** | ** SN - номер поставщика; | ||
** PN - номер детали; | ** PN - номер детали; | ||
** kol - количество поставляемых деталей. | ** kol - количество поставляемых деталей. | ||
Строка 64: | Строка 64: | ||
| valign="top" | | | valign="top" | | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ {{Формула|f=S}} | ||
! SN || SF || SS || SG | ! SN || SF || SS || SG | ||
|- align="center" | |- align="center" | ||
Строка 71: | Строка 71: | ||
| S2 || Петров || 40 || Самара | | S2 || Петров || 40 || Самара | ||
|- align="center" | |- align="center" | ||
| | | S3 || Кротов || 100 || Москва | ||
|} | |} | ||
| | | | ||
Строка 77: | Строка 77: | ||
| | | | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ {{Формула|f=P}} | ||
! PN || PF || PC | ! PN || PF || PC | ||
|- align="center" | |- align="center" | ||
| P1 || болт || 20 | | P1 || болт || 20 | ||
|- align="center" | |- align="center" | ||
| | | P2 || гайка || 25 | ||
|- align="center" | |- align="center" | ||
| | | P3 || шайба || 10 | ||
|- align="center" | |- align="center" | ||
| | | P4 || гайка || 30 | ||
|} | |} | ||
| | | | ||
Строка 92: | Строка 92: | ||
| | | | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ {{Формула|f=SP}} | ||
! SN || PN || kol | ! SN || PN || kol | ||
|- align="center" | |- align="center" | ||
Строка 104: | Строка 104: | ||
|} | |} | ||
|} | |} | ||
== Задачи == | == Задачи == | ||
Строка 111: | Строка 111: | ||
Проекция. Найти города, где проживают поставщики. | Проекция. Найти города, где проживают поставщики. | ||
{{Формула|f=t=\Pi_{SG}(S)}} | |||
Получится: | Получится: | ||
Строка 123: | Строка 123: | ||
|} | |} | ||
<syntaxhighlight lang=sql>SELECT DISTINCT SG FROM S</syntaxhighlight> | |||
=== Задача №2 === | === Задача №2 === | ||
Строка 129: | Строка 129: | ||
Селекция. Найти поставщиков со статусом больше 70. | Селекция. Найти поставщиков со статусом больше 70. | ||
{{Формула|f=t=\sigma_{SS>70}(S)}} | |||
Получится: | Получится: | ||
Строка 138: | Строка 138: | ||
| S1 || Иванов || 80 || Москва | | S1 || Иванов || 80 || Москва | ||
|- align="center" | |- align="center" | ||
| | | S3 || Кротов || 100 || Москва | ||
|} | |} | ||
<syntaxhighlight lang=sql>SELECT * FROM S WHERE SS > 70</syntaxhighlight> | |||
=== Задача №3 === | === Задача №3 === | ||
Строка 147: | Строка 147: | ||
Найти номера и фамилии поставщиков со статусом меньше 80. | Найти номера и фамилии поставщиков со статусом меньше 80. | ||
{{Формула|f=t=\Pi_{SN,SF}(\sigma_{SS<80}(S))}} | |||
Получится: | Получится: | ||
Строка 157: | Строка 157: | ||
|} | |} | ||
<syntaxhighlight lang=sql>SELECT SN, SF | |||
FROM S | |||
WHERE SS < 80</syntaxhighlight> | |||
=== Задача №4 === | === Задача №4 === | ||
Строка 165: | Строка 165: | ||
Удалить все поставки поставщика с номером S1. | Удалить все поставки поставщика с номером S1. | ||
{{Формула|f=SP = SP - \sigma_{SN=S1}(SP)}} | |||
Получится: | Получится: | ||
Строка 171: | Строка 171: | ||
{|+SP | class="wikitable" | {|+SP | class="wikitable" | ||
! SN || PN || kol | ! SN || PN || kol | ||
|- align="center" | |- align="center" | ||
| S2 || P3 || 150 | | S2 || P3 || 150 | ||
Строка 179: | Строка 177: | ||
|} | |} | ||
<syntaxhighlight lang=sql>DELETE | |||
FROM SP | |||
WHERE SN = S1</syntaxhighlight> | |||
=== Задача №5 === | === Задача №5 === | ||
Строка 195: | Строка 193: | ||
|} | |} | ||
{{Формула|f=S = SP\bigcup S}} | |||
Получится: | Получится: | ||
Строка 206: | Строка 204: | ||
| S2 || Петров || 40 || Самара | | S2 || Петров || 40 || Самара | ||
|- align="center" | |- align="center" | ||
| | | S3 || Кротов || 100 || Москва | ||
|- align="center" | |- align="center" | ||
| S4 || Петров || 30 || Тверь | | S4 || Петров || 30 || Тверь | ||
Строка 213: | Строка 211: | ||
|} | |} | ||
<syntaxhighlight lang=sql>INSERT | |||
INTO S | |||
SELECT * FROM SNEW</syntaxhighlight> | |||
=== Задача №6 === | === Задача №6 === | ||
Строка 221: | Строка 219: | ||
Найти номера поставщиков, поставляющих детали по цене меньше 30. | Найти номера поставщиков, поставляющих детали по цене меньше 30. | ||
{{Формула|f=r = \sigma_{PC<30}(P)}} | |||
{{Формула|f=t = SP \bowtie_{PN} r }} | |||
Получится: | Получится: | ||
Строка 239: | Строка 237: | ||
|} | |} | ||
{{Формула|f=z = \Pi_{SN}(t)}} | |||
Получится: | Получится: | ||
Строка 253: | Строка 251: | ||
|} | |} | ||
<syntaxhighlight lang=sql>SELECT DISTINCT SN | |||
FROM SP, P | |||
WHERE PC < 30 AND SP.PN = P.PN</syntaxhighlight> | |||
=== Задача №7 === | === Задача №7 === | ||
Строка 261: | Строка 259: | ||
Найти номера и фамилии поставщиков, поставляющих шайбы в количестве больше 100. | Найти номера и фамилии поставщиков, поставляющих шайбы в количестве больше 100. | ||
{{Формула|f=w = \sigma_{PF=шайба}(P)}} | |||
{{Формула|f=t = w \bowtie_{PN}SP }} | |||
{{Формула|f=z = \sigma_{kol>100}(t)}} | |||
{{Формула|f=q = z \bowtie_{SN} S}} | |||
{{Формула|f=x = \Pi_{SN,SF}(q)}} | |||
Получится: | Получится: | ||
Строка 281: | Строка 279: | ||
|} | |} | ||
<syntaxhighlight lang=sql>SELECT SN, SF | |||
FROM S, P, SP | |||
WHERE PF = 'шайба' AND kol > 100 AND P.PN = SP.PN AND SP.SN = S.SN</syntaxhighlight> | |||
=== Задача №8 === | === Задача №8 === | ||
Все поставщики переехали из Москвы в Питер. Модифицировать таблицу S. | Все поставщики переехали из Москвы в Питер. Модифицировать таблицу S. | ||
{{Формула|f=t = \sigma_{SS=Москва}(S)}}, получится: | |||
{| class="wikitable" | |||
! SN || SF || SS || SG | |||
|- align="center" | |||
| S1 || Иванов || 80 || Москва | |||
|- align="center" | |||
| S3 || Кротов || 100 || Москва | |||
|} | |||
{{Формула|f=f = \Pi_{SN,SF,SS}(t)}}, получится: | |||
{| class="wikitable" | |||
! SN || SF || SS | |||
|- align="center" | |||
| S1 || Иванов || 80 | |||
|- align="center" | |||
| S3 || Кротов || 100 | |||
|} | |||
Ввели новую таблицу spb: | |||
{| class="wikitable" | |||
!SG | |||
|- align="center" | |||
| Санкт-Петербург | |||
|} | |||
{{Формула|f=m = f\times spb}}, получится: | |||
{| class="wikitable" | |||
! SN || SF || SS || SG | |||
|- align="center" | |||
| S1 || Иванов || 80 || Санкт-Петербург | |||
|- align="center" | |||
| S3 || Кротов || 100 || Санкт-Петербург | |||
|} | |||
{{Формула|f=z = S - t}}, получится: | |||
{| class="wikitable" | |||
! SN || SF || SS || SG | |||
|- align="center" | |||
| S2 || Петров || 40 || Самара | |||
|} | |||
{{Формула|f=S = m \bigcup z}}, получится: | |||
{| class="wikitable" | |||
! SN || SF || SS || SG | |||
|- align="center" | |||
| S1 || Иванов || 80 || Санкт-Петербург | |||
|- align="center" | |||
| S3 || Кротов || 100 || Санкт-Петербург | |||
|- align="center" | |||
| S2 || Петров || 40 || Самара | |||
|} | |||
<syntaxhighlight lang=sql> | |||
UPDATE S | |||
SET SG='Санкт Петербург' | |||
WHERE SG='Москва' | |||
</syntaxhighlight> | |||
[[Категория:Теоретические основы реляционной алгебры (9 семестр)|С]] | [[Категория:Теоретические основы реляционной алгебры (9 семестр)|С]] | ||
[[Категория:Конспекты лекций и семинаров]] | [[Категория:Конспекты лекций и семинаров]] |
Текущая версия от 22:52, 5 февраля 2018
Операции реляционной алгебры и их связь с 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='Москва'