Ульяновский государственный университет
Опубликован: 10.09.2004 | Доступ: свободный | Студентов: 34417 / 4425 | Оценка: 4.06 / 3.65 | Длительность: 16:15:00
ISBN: 978-5-9556-0101-4
Лекция 5:

Соединения и теоретико-множественные операции над отношениями

< Лекция 4 || Лекция 5: 123 || Лекция 6 >

Операция объединения

Объединение ( UNION ) R \cup S отношений 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.

Операция пересечения

Операция пересечения ( INTERSECT ) R \cap S=R-(R-S) определяет отношение, которое содержит кортежи, присутствующие как в отношении 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.

Операция разности

Разность ( 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.

Операция деления отношений

Результат операции деления R:S - набор кортежей отношения R, определенных на множестве атрибутов C, которые соответствуют комбинации всех кортежей отношения S .

T1=ПC( R );
T2=ПC( (S X T1) -R );
T=T1 - T2.

Отношение R определено на множестве атрибутов A, а отношение S - на множестве атрибутов B, причем A \supseteq 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
T=T1-T2
рост вес
160 60

Пример 5.16. Деление отношений в SQL.

  • Создание отношения R
    CREATE TABLE R
    (i     int primary key,
    имя    varchar(3),
    пол    varchar(3),
    рост   int,
    возраст int,
    вес    int)
    5.16a. Деление отношений в SQL.
  • Создание отношения S
    CREATE TABLE S
    (i     int primary key,
    имя    varchar(3),
    пол    varchar(3),
    возраст int)
    5.16b. Деление отношений в SQL.
  • Создание отношения T1
    CREATE VIEW T1
    AS 
    SELECT рост,вес
    FROM R
    5.16c. Деление отношений в SQL.
  • Создание отношения TT
    CREATE VIEW TT AS
    SELECT S.имя, S.пол, S.возраст, 
           T1.рост, T1.вес
    FROM S, T1
    5.16d. Деление отношений в SQL.
  • Создание отношения 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.
  • Создание отношения T
    SELECT T1.рост, T1.вес
    FROM T1
    WHERE NOT EXISTS 
        (SELECT T2.рост,T2.вес
         FROM T2
         WHERE T1.рост=T2.рост AND T1.вес=T2.вес)
    5.16f. Деление отношений в SQL.
< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?

Ирина Мельник
Ирина Мельник

Здравствуйте, записалась на курс основы SQL, подскажите, стоимость курса.