Операция объединения
Объединение ( UNION )
отношений R и S можно получить в результате их конкатенации с образованием одного отношения с исключением кортежей-дубликатов. При этом отношения R и S должны быть совместимы, т.е. иметь одинаковое количество полей с совпадающими типами данных. Иначе говоря, отношения должны быть совместимы по объединению.
Объединением двух таблиц R и S является таблица, содержащая все строки, которые имеются в первой таблице R, во второй таблице S или в обеих таблицах сразу.
SELECT R.a1, R.a2
FROM R
UNION
SELECT S.b2, S.b1
FROM S
Пример
5.13.
Объединение отношений в SQL.
(html,
txt)
Операция пересечения
Операция пересечения ( INTERSECT )
определяет отношение, которое содержит кортежи, присутствующие как в отношении R, так и в отношении S. Отношения R и S должны быть совместимы по объединению .
Пересечением двух таблиц R и S является таблица, содержащая все строки, присутствующие в обеих исходных таблицах одновременно.
SELECT R.a1, R.a2
FROM R,S
WHERE R.a1=S.b1 AND R.a2=S.b2
или
SELECT R.a1, R.a2
FROM R
WHERE R.a1 IN
(SELECT S.b1 FROM S
WHERE S.b1=R.a1) AND R.a2 IN
(SELECT S.b2
FROM S
WHERE S.b2=R.a2)
Пример
5.14.
Пересечение отношений в SQL.
(html,
txt)
Операция разности
Разность ( EXCEPT ) R-S двух отношений R и S состоит из кортежей, которые имеются в отношении R, но отсутствуют в отношении S. Причем отношения R и S должны быть совместимы по объединению.
Разностью двух таблиц R и S является таблица, содержащая все строки, которые присутствуют в таблице R, но отсутствуют в таблице S.
SELECT R.a1, R.a2
FROM R
WHERE NOT EXISTS
(SELECT S.b1,S.b2
FROM S
WHERE S.b1=R.a2 AND S.b2=R.a1)
Пример
5.15.
Разность отношений в SQL.
(html,
txt)
Операция деления отношений
Результат операции деления R:S - набор кортежей отношения R, определенных на множестве атрибутов C, которые соответствуют комбинации всех кортежей отношения S .
T1=ПC( R );
T2=ПC( (S X T1) -R );
T=T1 - T2.
Отношение R определено на множестве атрибутов A, а отношение S - на множестве атрибутов B, причем
и C=A - B.
Пусть A ={имя, пол, рост, возраст, вес}; B ={имя, пол, возраст}; C ={рост, вес}.
Таблица 5.6.
| Отношение R |
|---|
| имя | пол | рост | возраст | вес |
|---|
| a | ж | 160 | 20 | 60 |
| b | м | 180 | 30 | 70 |
| c | ж | 150 | 16 | 40 |
| Отношение S |
|---|
| имя | пол | возраст |
|---|
| a | ж | 20 |
| T1=ПC(R) |
|---|
| рост | вес |
|---|
| 160 | 60 |
| 180 | 70 |
| 150 | 40 |
| TT=(S X T1)-R |
|---|
| имя | пол | возраст | рост | вес |
|---|
| a | ж | 20 | 180 | 70 |
| a | ж | 20 | 150 | 40 |
| T2=ПC((S X T1)-R) |
|---|
| рост | вес |
|---|
| 180 | 70 |
| 150 | 40 |
Пример 5.16. Деление отношений в SQL.
- Создание отношения R
CREATE TABLE R
(i int primary key,
имя varchar(3),
пол varchar(3),
рост int,
возраст int,
вес int)
Пример
5.16a.
Деление отношений в SQL.
(html,
txt)
- Создание отношения S
CREATE TABLE S
(i int primary key,
имя varchar(3),
пол varchar(3),
возраст int)
Пример
5.16b.
Деление отношений в SQL.
(html,
txt)
- Создание отношения T1
CREATE VIEW T1
AS
SELECT рост,вес
FROM R
Пример
5.16c.
Деление отношений в SQL.
(html,
txt)
- Создание отношения TT
CREATE VIEW TT AS
SELECT S.имя, S.пол, S.возраст,
T1.рост, T1.вес
FROM S, T1
Пример
5.16d.
Деление отношений в SQL.
(html,
txt)
- Создание отношения T2
CREATE VIEW T2
AS
SELECT TT.рост, TT.вес
FROM TT
WHERE NOT EXISTS
(SELECT R.рост, R.вес
FROM R
WHERE TT.имя=R.имя AND TT.пол=R.пол
AND TT.возраст=R.возраст
AND TT.рост=R.рост
AND TT.вес=R.вес)
Пример
5.16e.
Деление отношений в SQL.
(html,
txt)
- Создание отношения T
SELECT T1.рост, T1.вес
FROM T1
WHERE NOT EXISTS
(SELECT T2.рост,T2.вес
FROM T2
WHERE T1.рост=T2.рост AND T1.вес=T2.вес)
Пример
5.16f.
Деление отношений в SQL.
(html,
txt)