Презентация №7

advertisement
Базы
данных
Лекция №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
Download