Базы данных Лекция №07 Основы SQL 1. Объявление домена BOOLEAN Двухфазный переключатель со значением по умолчанию 'F‘: CREATE DOMAIN D_BOOLEAN AS CHAR DEFAULT 'F' NOT NULL CHECK (VALUE IN ('T', 'F')); Трехфазный переключатель, допускающий UNKNOWN: CREATE DOMAIN D_LOGICAL AS SMALLINT CHECK (VALUE IS NULL OR VALUE IN (1,0)); Трехфазный переключатель, где UNKNOWN как значение: CREATE DOMAIN D_GENDER AS CHAR(4) DEFAULT 'N/K' NOT NULL CHECK (VALUE IN ('FEM', 'MASC', 'N/K')); 2 2. Операции над отношениями Основные операции над отношениями: • Выборка (унарная) • Проекция (унарная) • Расширенное декартово произведение отношений • Соединение • Объединение • Пересечение • Разность • Деление 3 2. Операции над отношениями CREATE TABLE R (a1 CHAR(1), a2 INT, PRIMARY KEY(a1, a2)) Отношение S CREATE TABLE S S.b1 S.b2 (b1 INT PRIMARY KEY, 1 h b2 CHAR(1)) 2 g 3 H Отношение R R.a1 R.a2 A 1 A 2 B 1 B 3 B 4 4 2.1. Операция выборки SELECT a1, a2 FROM R WHERE a2 = 1 Отношение R R.a1 R.a2 A 1 B 1 5 2.2. Операция проекции SELECT DISTINCT b2 FROM S Отношение S S.b2 h g 6 2.3. Декартово произведение RxS={(a, 1, 1, h), (a, 2, 1, h), (b, 1, 1, h), ... } SELECT R.a1, R.a2, S.b1, S.b2 FROM R, S RxS R.a1 R.a2 S.b1 a 1 1 a 1 2 a 1 3 a 2 1 a 2 2 a 2 3 b 1 1 b 1 2 b 1 3 b 3 1 b 3 2 b 3 3 b 4 1 b 4 2 b 4 3 S.b2 h g h h g h h g h h g h h g h 7 2.4. Операции соединения Формат операции: FROM имя_таблицы_1 {INNER | LEFT | RIGHT} JOIN имя_таблицы_2 ON условие_соединения Типы операций соединения: • • • • • Тета-соединение (Theta Join) Соединение по эквивалентности (Equi Join) Естественное соединение (Natural Join) Внешнее соединение (Outer Join) Полусоединение (Semi Join) 8 2.4.1. Операция тета-соединения Декартово произведение отношений R и S, удовлетворяющие предикату F (>, >=, <, <=, =, <>) SELECT R.a1, R.a2, S.b1, S.b2 FROM R, S WHERE R.a2 = S.b1 SELECT R.a1, R.a2, S.b1, S.b2 FROM R INNER JOIN S ON R.a2 = S.b1 Таблица тетасоединения R.a1 a a b b R.a2 1 2 3 1 S.b1 1 2 3 1 S.b2 h g h h 9 2.4.2. Естественное соединение Это соединение по эквивалентности, выполненное по всем общим атрибутам SELECT R.a1, R.a2, S.b2 FROM R, S WHERE R.a2 = S.b1 SELECT R.a1, S.b1, S.b2 FROM R INNER JOIN S ON R.a2 = S.b1 Таблица 5.3. R.a1 R.a2 или S.b1 a 1 a 2 b 3 b 1 S.b2 h g h h 10 2.4.2. Естественное соединение SELECT * FROM Сделка, Товар WHERE Сделка.КодТовара = Товар.КодТовара эквивалентно: SELECT * FROM Товар INNER JOIN Сделка ON Товар.КодТовара = Сделка.КодТовара SELECT Товар.Название, Сделка.Количество, Сделка.Дата, Клиент.Фирма FROM Клиент INNER JOIN (Товар INNER JOIN Сделка ON Товар.КодТовара = Сделка.КодТовара) ON Клиент.КодКлиента = Сделка.КодКлиента SELECT Т.Название, С.Количество, С.Дата, К.Фирма FROM Клиент AS К INNER JOIN (Товар AS Т INNER JOIN Сделка AS С ON Т.КодТовара = С.КодТовара) ON К.КодКлиента = С.КодКлиента; 11 2.4.3. Внешнее соединение (Левое/Правое) LEFT – левое внешнее соединение, ведущая таблица слева RIGHT – правое внешнее соединение , ведущая таблица справа SELECT R.a1, R.a2, S.b1, S.b2 R.a1 R.a2 S.b1 S.b2 FROM R LEFT OUTER JOIN S a 1 1 h ON R.a2 = S.b1 SELECT R.a1, R.a2, S.b1, S.b2 FROM R RIGHT OUTER JOIN S ON R.a2 = S.b1 a b b b 2 1 3 4 2 1 3 null SELECT Товар.*, Сделка.* FROM Товар LEFT OUTER JOIN Сделка ON Товар.КодТовара = Сделка.КодТовара g h h null 12 2.4.4. Полусоединение (SEMI-JOIN) SELECT R.a1, R.a2 FROM R, S WHERE R.a2 = S.b1 SELECT R.a1, R.a2 FROM R INNER JOIN S ON R.a2 = S.b1 R.a1 a a b b R.a2 1 2 3 1 13 2.5. Операция объединения (UNION) Из результирующего отношения кортежи-дубликаты исключаются SELECT FROM UNION SELECT FROM R.a1, R.a2 R S.b2, S.b1 S R.a1 a a b b b g h h R.a2 1 2 3 1 4 2 1 3 14 2.6. Операция пересечения (INTERSECT) Отношение с кортежами, общими для обоих отношений: SELECT R.a1, R.a2 FROM R, S WHERE R.a1 = S.b2 R.a1 R.a2 AND R.a2 = S.b1 или SELECT R.a1, R.a2 FROM R WHERE R.a1 IN (SELECT S.b2 FROM S WHERE S.b2 = R.a1) AND R.a2 IN (SELECT S.b1 FROM S 15 WHERE S.b1 = R.a2) 2.7. Операция разности (EXCEPT) Отношение с кортежами из 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) R.a1 a a b b b R.a2 1 2 1 3 4 16 2.8. Операция деления R:S – набор кортежей R на множестве атрибутов C (СR:S = АR – ВS), ВА), соответствующие комбинации всех кортежей S. Алгоритм: 1.T1 = ПC(R) 2.T2 = ПC((SxT1) – R) 3.T = T1 – T2 17 2.8. Операция деления Создание отношения R CREATE TABLE R ( i int primary имя varchar(3), пол varchar(3), рост int, возраст int, имя вес int a ) b c key, Отношение R пол рост возраст ж 160 20 м 180 30 ж 150 16 вес 60 70 40 18 2.8. Операция деления Создание отношения S CREATE TABLE S ( i int primary key, имя varchar(3), пол varchar(3), возраст int ) Отношение S имя a пол ж возраст 20 19 2.8. Операция деления Создание отношения T1 CREATE VIEW T1 AS SELECT рост, вес FROM R T1 = ПC(R) рост вес 160 60 180 70 150 40 20 2.8. Операция деления Создание отношения TT CREATE VIEW TT AS SELECT S.имя, S.пол, S.возраст, T1.рост, T1.вес FROM S, T1 TT = (SхT1) – R имя пол возраст рост a ж 20 180 a ж 20 150 вес 70 40 21 2.8. Операция деления Создание отношения T2 T2 = ПC((SхT1) – R) рост вес 180 70 150 40 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.вес) 22 2.8. Операция деления Создание отношения T SELECT T1.рост, T1.вес FROM T1 WHERE NOT EXISTS (SELECT T2.рост, T2.вес FROM T2 WHERE T1.рост=T2.рост AND T1.вес=T2.вес) T = T1 – T2 рост вес 160 60 23 2.9. Краткий перечень операций Операция Выборка Проекция Объединение Разность Пересечение Декартово произведение Тета-cоединение Соединение по эквивалентности Естественное соединение (Левое) внешнее соединение Полусоединение Деление Область применения Определяет результирующее отношение, которое содержит только те кортежи (строки) из отношения R, которые удовлетворяют заданному условию (предикату) Определяет новое отношение, содержащее вертикальное подмножество отношения R, создаваемое посредством извлечения значений указанных атрибутов и исключения из результата строк-дубликатов Определяет новое отношение, которое включает все кортежи, содержащиеся только в R, только в S, одновременно в R и S, причем все дубликаты кортежей исключены. При этом отношения R и S должны быть совместимыми по объединению Разность двух отношений R и s состоит из кортежей, которые имеются в отношении R. но отсутствуют в отношении S. Причем отношения R и s должны быть совместимыми по объединению Определяет отношение, которое содержит кортежи, присутствующие как в отношении R, так и в отношении S. Отношения R и S должны быть совместимыми по объединению Определяет новое отношение, которое является результатом конкатенации (т.е. сцепления) каждого кортежа из отношения R с каждым кортежем из отношения S Определяет отношение, которое содержит кортежи из декартова произведения отношений R и S, удовлетворяющие предикату F Определяет отношение, которое содержит кортежи из декартова произведения отношений R и S, удовлетворяющие предикату F (предикат должен предусматривать только сравнение на равенство) Естественным соединением называется соединение по эквивалентности двух отношений R и S, выполненное по всем общим атрибутам х, из результатов которого исключается по одному экземпляру каждого общего атрибута Соединение, при котором кортежи отношения R, не имеющие совпадающих значений в общих столбцах отношения S, также включаются в результирующее отношение Определяет отношение, содержащее те кортежи отношения R, которые входят в соединение отношений R иS Определяет отношение, состоящее из множества кортежей отношения R, которые определены на атрибуте С, соответствующем комбинации всех кортежей отношения S, где C — множество атрибутов, имеющихся в отношении R, но отсутствующих в отношении S 24 Спасибо за внимание 25