ТОРА (9) - Семинар №1 - Операции реляционной алгебры: различия между версиями

Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана, студенческое сообщество
Перейти к навигации Перейти к поиску
мНет описания правки
Строка 7: Строка 7:
SELECT - выборка, DISTINCT - исключая.
SELECT - выборка, DISTINCT - исключая.


<source lang=sql>SELECT [DISTINCT] * | атрибуты
<syntaxhighlight lang=sql>SELECT [DISTINCT] * | атрибуты
FROM таблицы
FROM таблицы
WHERE условие</source>
WHERE условие</syntaxhighlight>


=== UPDATE ===
=== UPDATE ===
Строка 15: Строка 15:
UPDATE - обновление, изменение.
UPDATE - обновление, изменение.


<source lang=sql>UPDATE таблица
<syntaxhighlight lang=sql>UPDATE таблица
SET атрибут = выражение
SET атрибут = выражение
WHERE условие</source>
WHERE условие</syntaxhighlight>


=== INSERT ===
=== INSERT ===
Строка 23: Строка 23:
INSERT - вставка, добавление новых записей.
INSERT - вставка, добавление новых записей.


<source lang=sql>INSERT
<syntaxhighlight lang=sql>INSERT
INTO таблица
INTO таблица
записи</source>
записи</syntaxhighlight>


=== DELETE ===
=== DELETE ===
Строка 31: Строка 31:
DELETE - удаление записей.
DELETE - удаление записей.


<source lang=sql>DELETE
<syntaxhighlight lang=sql>DELETE
FROM таблица
FROM таблица
WHERE условие</source>
WHERE условие</syntaxhighlight>


== Предметная область, используемая в задачах ==
== Предметная область, используемая в задачах ==
Строка 41: Строка 41:
=== Таблицы ===
=== Таблицы ===


Таблицы <math>\rho=(S,P,SP)</math>
Таблицы {{Формула|f=\rho=(S,P,SP)}}


*<math>S</math> - поставщики.
*{{Формула|f=S}} - поставщики.
**SN - номер поставщика;
**SN - номер поставщика;
**SF - фамилия;
**SF - фамилия;
Строка 49: Строка 49:
**SG - город.
**SG - город.


*<math>P</math> - деталь.
*{{Формула|f=P}} - деталь.
** PN - номер детали, ключ;
** PN - номер детали, ключ;
** PF - название детали;
** PF - название детали;
** PC - цена за единицу.
** PC - цена за единицу.


*<math>SP</math> - поставка.
*{{Формула|f=SP}} - поставка.
** N - номер поставщика;
** N - номер поставщика;
** PN - номер детали;
** PN - номер детали;
Строка 64: Строка 64:
  | valign="top" |
  | valign="top" |
{| class="wikitable"
{| class="wikitable"
  |+ <math>S</math>
  |+ {{Формула|f=S}}
  ! SN || SF || SS || SG
  ! SN || SF || SS || SG
  |- align="center"
  |- align="center"
Строка 77: Строка 77:
  |
  |
{| class="wikitable"
{| class="wikitable"
  |+ <math>P</math>
  |+ {{Формула|f=P}}
  ! PN || PF || PC
  ! PN || PF || PC
  |- align="center"
  |- align="center"
Строка 92: Строка 92:
  |
  |
{| class="wikitable"
{| class="wikitable"
  |+ <math>SP</math>
  |+ {{Формула|f=SP}}
  ! SN || PN || kol
  ! SN || PN || kol
  |- align="center"
  |- align="center"
Строка 111: Строка 111:
Проекция. Найти города, где проживают поставщики.
Проекция. Найти города, где проживают поставщики.


<math>t=\Pi_{SG}(S)</math>
{{Формула|f=t=\Pi_{SG}(S)}}


Получится:
Получится:
Строка 123: Строка 123:
  |}
  |}


<source lang=sql>SELECT DISTINCT SG FROM S</source>
<syntaxhighlight lang=sql>SELECT DISTINCT SG FROM S</syntaxhighlight>


=== Задача №2 ===
=== Задача №2 ===
Строка 129: Строка 129:
Селекция. Найти поставщиков со статусом больше 70.
Селекция. Найти поставщиков со статусом больше 70.


<math>t=\sigma_{SS>70}(S)</math>
{{Формула|f=t=\sigma_{SS>70}(S)}}


Получится:
Получится:
Строка 141: Строка 141:
  |}
  |}


<source lang=sql>SELECT * FROM S WHERE SS > 70</source>
<syntaxhighlight lang=sql>SELECT * FROM S WHERE SS > 70</syntaxhighlight>


=== Задача №3 ===
=== Задача №3 ===
Строка 147: Строка 147:
Найти номера и фамилии поставщиков со статусом меньше 80.
Найти номера и фамилии поставщиков со статусом меньше 80.


<math>t=\Pi_{SN,SF}(\sigma_{SS<80}(S))</math>
{{Формула|f=t=\Pi_{SN,SF}(\sigma_{SS<80}(S))}}


Получится:
Получится:
Строка 157: Строка 157:
  |}
  |}
   
   
<source lang=sql>SELECT SN, SF
<syntaxhighlight lang=sql>SELECT SN, SF
FROM S
FROM S
WHERE SS < 80</source>
WHERE SS < 80</syntaxhighlight>


=== Задача №4 ===
=== Задача №4 ===
Строка 165: Строка 165:
Удалить все поставки поставщика с номером S1.
Удалить все поставки поставщика с номером S1.
   
   
<math>SP = SP - \sigma_{SN=S1}(SP)</math>
{{Формула|f=SP = SP - \sigma_{SN=S1}(SP)}}
   
   
Получится:
Получится:
Строка 177: Строка 177:
  |}
  |}
   
   
<source lang=sql>DELETE
<syntaxhighlight lang=sql>DELETE
FROM SP
FROM SP
WHERE SN = S1</source>
WHERE SN = S1</syntaxhighlight>


=== Задача №5 ===
=== Задача №5 ===
Строка 193: Строка 193:
  |}
  |}
   
   
<math>S = SP\bigcup S</math>
{{Формула|f=S = SP\bigcup S}}


Получится:
Получится:
Строка 211: Строка 211:
  |}
  |}
   
   
<source lang=sql>INSERT
<syntaxhighlight lang=sql>INSERT
INTO S
INTO S
SELECT * FROM SNEW</source>
SELECT * FROM SNEW</syntaxhighlight>


=== Задача №6 ===
=== Задача №6 ===
Строка 219: Строка 219:
Найти номера поставщиков, поставляющих детали по цене меньше 30.
Найти номера поставщиков, поставляющих детали по цене меньше 30.


<math>r = \sigma_{PC<30}(P)</math>
{{Формула|f=r = \sigma_{PC<30}(P)}}


<math>t = SP \bowtie_{PN} r </math>
{{Формула|f=t = SP \bowtie_{PN} r }}


Получится:
Получится:
Строка 237: Строка 237:
  |}
  |}


<math>z = \Pi_{SN}(t)</math>
{{Формула|f=z = \Pi_{SN}(t)}}


Получится:
Получится:
Строка 251: Строка 251:
  |}
  |}
   
   
<source lang=sql>SELECT DISTINCT SN
<syntaxhighlight lang=sql>SELECT DISTINCT SN
FROM SP, P
FROM SP, P
WHERE PC < 30 AND SP.PN = P.PN</source>
WHERE PC < 30 AND SP.PN = P.PN</syntaxhighlight>


=== Задача №7 ===
=== Задача №7 ===
Строка 259: Строка 259:
Найти номера и фамилии поставщиков, поставляющих шайбы в количестве больше 100.
Найти номера и фамилии поставщиков, поставляющих шайбы в количестве больше 100.


<math>w = \sigma_{PF=}</math><sub>'шайба'</sub><math>(P)</math>
{{Формула|f=w = \sigma_{PF=} }}<sub>'шайба'</sub>{{Формула|f=(P)}}


<math>t = w \bowtie_{PN}SP </math>
{{Формула|f=t = w \bowtie_{PN}SP }}


<math>z = \sigma_{kol>100}(t)</math>
{{Формула|f=z = \sigma_{kol>100}(t)}}


<math>q = z \bowtie_{SN} S</math>
{{Формула|f=q = z \bowtie_{SN} S}}


<math>x = \Pi_{SN,SF}(q)</math>
{{Формула|f=x = \Pi_{SN,SF}(q)}}


Получится:
Получится:
Строка 279: Строка 279:
  |}
  |}


<source lang=sql>SELECT SN, SF
<syntaxhighlight lang=sql>SELECT SN, SF
FROM S, P, SP
FROM S, P, SP
WHERE PF = 'шайба' AND kol > 100 AND P.PN = SP.PN AND SP.SN = S.SN</source>
WHERE PF = 'шайба' AND kol > 100 AND P.PN = SP.PN AND SP.SN = S.SN</syntaxhighlight>


=== Задача №8 ===
=== Задача №8 ===

Версия от 15:00, 22 сентября 2012

Операции реляционной алгебры и их связь с 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$$ - поставка.
    • N - номер поставщика;
    • PN - номер детали;
    • kol - количество поставляемых деталей.

Примеры экземпляров отношений

$$S$$
SN SF SS SG
S1 Иванов 80 Москва
S2 Петров 40 Самара
S3 Кротов 100 Москва
$$P$$
PN PF PC
P1 болт 20
P2 гайка 25
P3 шайба 10
P4 гайка 30
$$SP$$
SN PN kol
S1 P1 100
S1 P3 200
S2 P3 150
S3 P3 50

Задачи

Задача №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.