Лекция 3. Реляционная алгебра.pptx
- Количество слайдов: 115
Изменение таблицы • ALTER TABLE table_name ADD column_name datatype
Изменение таблицы • Добавляем столбец ALTER TABLE table_name ADD column_name datatype
Изменение таблицы • Удаляем столбец ALTER TABLE table_name DROP COLUMN column_name
Изменение таблицы • Изменяем столбец ALTER TABLE table_name ALTER COLUMN column_name datatype
Изменение таблицы • Добавляем первичный ключ ALTER TABLE employee ADD CONSTRAINT c 1 PRIMARY KEY (id)
Изменение таблицы • Добавляем внешний ключ ALTER TABLE employee ADD FOREIGN KEY (dno) REFERENCES department(dnumber)
Изменение таблицы • Добавляем ограничение ALTER TABLE exd WITH NOCHECK ADD CONSTRAINT exd_check CHECK (column_a > 1)
Вычисляемые столбцы при создании таблицы CREATE TABLE t 2 ( a int, b int, c int, x float, y AS CASE x WHEN 0 THEN a WHEN 1 THEN b ELSE c END );
Вычисляемые столбцы при создании таблицы CREATE TABLE people ( id INT PRIMARY KEY, birth DATETIME, salary INT, age as DATEDIFF(YEAR, GETDATE(), birth), nalog as CAST(salary as real)*13/100 )
Вычисляемые столбцы при создании таблицы CREATE TABLE people ( id INT PRIMARY KEY, birth DATE, salary INT, age as DATEDIFF(YEAR, GETDATE(), birth), nalog as salary*0, 13 PERSISTED PRIMARY KEY ) • Детерминированное значение
Реляционная модель • • Домены D 1, D 2, …, Dn Атрибуты A 1, A 2, …, An Кортежи t = <a 1, a 2, …, an> , ai∈Di Формально R : D 1 х. D 2. . Dn→ {0, 1} или R ⊂D 1 х. D 2. . Dn
Еще раз терминология • Домен – множество возможных значений какоголибо атрибута • Таблица - отношение • Экземпляр– конкретное наполнение базы данных • Конкретное наполнение таблицы – тело отношения • Совокупность атрибутов отношения – Заголовок отношения (схема) • Заголовок + тело = значение отношения • Строка таблицы называется кортежем
Реляционная алгебра – механизм манипулирования реляционными данными Все операции производятся над отношениями, и результатом операции является отношение. R=f(R 1, R 2, … , Rn)
Две группы операций РА • теоретико-множественные операции • специальные реляционные операции
Теоретико-множественные операции • • объединения отношений; пересечения отношений; взятия разности отношений; взятия декартова произведения отношений.
Объединение, пересечение и разность • Отношения совместимыми по типу, если они имеют идентичные заголовки, а атрибуты с одинаковыми именами определены на одних и тех же доменах.
Объединение union • При выполнении операции объединения (UNION) двух отношений с одинаковыми заголовками производится отношение, включающее все кортежи, которые входят хотя бы в одно из отношений-операндов. • A B = { c: c A OR c B}
Пересечение intersect • пересечением множеств A и B является такое множество C{c}, что для любого c существуют такие элементы a, принадлежащий множеству A, и b, принадлежащий множеству B, что c=a=b; • A B = { c: c A AND c B}
Разность except • разностью множеств A и B является такое множество C{c}, что для любого c существует такой элемент a, принадлежащий множеству A, что c=a, и не существует такой элемент b, принадлежащий B, что c=b. • A B = { c: c A AND c B}
Есть ли избыточная операция?
Избыточность пересечения • A B = A (A B) • A B = B (B A)
Чему тождественно равно выражение (A B) (A B) • (A B) (B (A B)) • (A B) (B A) • A B
Декартово произведение • Два отношения совместимы по взятию декартова произведения в том и только в том случае, если пересечение множеств имен атрибутов, взятых из их схем отношений, пусто. • Любые два отношения всегда могут стать совместимыми по взятию декартова произведения, если применить операцию переименования к одному из этих отношений.
Декартово произведение times • Заголовок R × S R (a 1, a 2, …, an, b 1, b 2, …, bm), • Тело R × S ={ra 1, ra 2, …, ran, sb 1, sb 2, …, sbm : ra 1, ra 2, …, ran R, sb 1, sb 2, …, sbm S} R×S = {< r, s>: r ∈R , s ∈S} • Мощность [R × S ]= [R] × [S] • На основе ДК производится операция соединения
Декартово произведение - пример
Свойства операций (OP) • Ассоциативность (A OP B) OP C = A OP (B OP C) • Коммутативность (кроме разности) A OP B = B OP A
Реляционные операции • ограничение отношения (селекция) – горизонтальная вырезка; • проекцию отношения – вертикальная вырезка; • соединение отношений (по условию, эквисоединение и естественное соединение); • деление отношений.
Селекция (where) • Простое условие требует наличия двух операндов: ограничиваемого отношения и условия ограничения (f) • Условие ограничения может иметь вид: – (a comp-op b), где а и b – имена атрибутов ограничиваемого отношения; атрибуты a и b определены на одном домене, для значений которого поддерживается операция сравнения comp_op, ; – (a comp-op const), где a – имя атрибута ограничиваемого отношения, а const – константа; атрибут a должен быть определен на домене или базовом типе, для значений которого поддерживается операция сравнения comp_op. – Операцией сравнения comp-op могут быть = > <
Селекция (where) • Условие может состоять из нескольких простых условий, связанных булевскими операторами AND NOT OR Приоритеты – NOT AND OR • Результатом селекции является отношение, заголовок которого совпадает с заголовком отношения-операнда, а в тело входят те кортежи отношения-операнда, для которых значением условия ограничения является true.
Селекция (where) • σ A WHERE f = { c: c A AND f} • σf(A)= { c ∈A : f(c) } • F состоит из условий вида xθy • θ ∈{=, ≠, <, ≤, ≥, >, …}
Селекция - пример σ СЛУЖАЩИЕ_В_ПРОЕКТЕ_1 WHERE (СЛУ_ЗАРП > 20000. 00 AND (СЛУ_ОТД_НОМ = 310 OR СЛУ_ОТД_НОМ = 315))
Как обойтись только простыми условиями? • A WHERE (comp 1 AND comp 2) (A WHERE comp 1) ? ? (A WHERE comp 2); • A WHERE (comp 1 OR comp 2) (A WHERE comp 1) ? ? (A WHERE comp 2); • A WHERE NOT comp 1 (A WHERE comp 1) ? ? .
Так обойтись только простыми условиями • A WHERE (comp 1 AND comp 2) = (A WHERE comp 1) (A WHERE comp 2); • A WHERE (comp 1 OR comp 2) = (A WHERE comp 1) (A WHERE comp 2); • A WHERE NOT comp 1 = A (A WHERE comp 1).
Проекция PROJECT • Проекцией отношения A по атрибутам X, Y, …, Z, где каждый из атрибутов принадлежит отношению , называется отношение с заголовком (X, Y, …, Z) и телом, содержащим множество кортежей вида (x, y, …z) , таких, для которых в отношении найдутся кортежи со значением атрибута X равным x, значением атрибута Y равным y, …, значением атрибута Z равным z. • Синтаксис операции проекции: (X, Y, … Z) (A) = {x, y, …z : a 1, a 2, …, an A AND x= ai 1, y=ai 2, …, z=aim}, • Операция проекции дает " вертикальный срез " отношения, в котором удалены все возникшие при таком срезе дубликаты кортежей.
Проекция • Операция взятия проекции также требует наличия двух операндов – проецируемого отношения A и подмножества имен атрибутов, входящих в заголовок отношения A. • Атрибутами результирующего отношения являются один или несколько атрибутов исходного, возможно в другом порядке.
Проекция • R⊂ A 1 х. A 2, …, An, и Ai 1, …, Aik∈{A 1, …, An } • тогда • π< Ai 1, Ai 2, …, Aik> (R)= {< ai 1, …, aik>: <a 1, …, an> ∈R}
Проекция - пример PROJECT (СЛУ_ОТД_НОМ) СЛУЖАЩИЕ_В_ПРОЕКТЕ_1
Соединение по условию – JOIN Тэта-соединение • Требует наличия двух операндов – соединяемых отношений и третьего операнда – простого условия. • Условие – см. селекцию. • Операнды совместимы по взятию декартова произведения. • A JOIN B WHERE comp = (A × B) WHERE comp. • R⊳⊲ f. S = σf(R×S)
Соединение по условию - JOIN (ПРО_ЗАРП – средняя зарплата по проекту)
Соединение по условию – JOIN • СЛУЖАЩИЕ JOIN ПРОЕКТЫ WHERE (СЛУ_ЗАРП > ПРО_ЗАРП)
Эквисоединение • Операция соединения называется операцией эквисоединения (EQUIJOIN) , если условие соединения имеет вид (a = b), где a и b – атрибуты разных операндов соединения. Этот случай важен потому, что он чаще всего встречается на практике, и для него существуют наиболее эффективные алгоритмы реализации.
Эквисоединение • СЛУЖАЩИЕ JOIN (ПРОЕКТЫ RENAME ПРО_НОМ AS ПРО_НОМ 1)) WHERE (СЛУ_ЗАРП = ПРО_ЗАРП)
Естественное соединение NATURAL JOIN • Операция естественного соединения применяется к паре отношений A и B, обладающих (возможно, составным) общим атрибутом c (т. е. атрибутом с одним и тем же именем и определенным на одном и том же домене). • Пусть ab обозначает объединение заголовков отношений A и B. Тогда естественное соединение A и B – это спроецированный на ab результат эквисоединения A и B по условию A. c = B. c).
Естественное соединение через другие операции?
Естественное соединение через другие операции • • • Переименование Декартово произведение Селекция Проекция R⊳⊲S = атрибуты R, SS. AσR. A=S. A(R×S)
Естественное соединение - пример • СЛУЖАЩИЕ NATURAL JOIN ПРОЕКТЫ (естественное соединение – выдать полную информацию о служащих и проектах, в которых они участвуют).
Деление DIVIDE • Пусть заданы два отношения: • A с заголовком {a 1, a 2, . . . , an, b 1, b 2, . . . , bm} • B с заголовком {b 1, b 2, . . . , bm}. • Будем считать, что атрибут bi отношения A и атрибут bi отношения B (i = 1, 2, …, m) не только обладают одним и тем же именем, но и определены на одном и том же домене. • Назовем множество атрибутов {aj} составным атрибутом a, а множество атрибутов {bj} – составным атрибутом b. • После этого будем говорить о реляционном делении «бинарного» отношения A{a, b} на унарное отношение B{b}.
Деление • По определению, результатом деления A на B (A DIVIDE BY B) является «унарное» отношение C (a), тело которого состоит из кортежей v таких, что в теле отношения A содержатся кортежи <v, w> для любого w из B. • Операция реляционного деления не является примитивной и выражается через операции декартова произведения, взятия разности и проекции. • (A DIVIDE BY B) = С : С×B A
Деление - пример • Найдем всех сотрудников, которые работают и в 1, и во 2 проектах.
Деление R DIVIDE S = 1, 2, . . . r-s(R)- 1, 2, . . . r-s(R)x. S)-R).
Примеры: • Кто работает только в одном проекте. • Найти табельный номер начальника. • Кто получает зарплату больше, чем его начальник. • У кого самая большая зарплата.
SELECT "I do not seek, I find" – Pablo Picasso
Формат оператора SELECT [ALL | DISTINCT ] {*|[имя_столбца [AS новое_имя]]} [, . . . n] [INTO new_table ] FROM имя_таблицы [[AS] псевдоним] [, . . . n] [WHERE <условие_поиска>] [GROUP BY имя_столбца [, . . . n]] [HAVING <критерии выбора групп>] [ORDER BY имя_столбца [, . . . n]]
Обработка элементов оператора SELECT : • FROM – определяются имена используемых таблиц; • WHERE – выполняется фильтрация строк объекта в соответствии с заданными условиями; • GROUP BY – образуются группы строк , имеющих одно и то же значение в указанном столбце; • HAVING – фильтруются группы строк объекта в соответствии с указанным условием; • SELECT – устанавливается, какие столбцы должны присутствовать в выходных данных; • ORDER BY – определяется упорядоченность результатов выполнения операторов.
Пример простого запроса SELECT * FROM person SELECT DISTINCT name FROM person SELECT * FROM person WHERE name=‘Анна’
Список атрибутов SELECT * table. * column 1, column 3 table. column 1, table. column 3 FROM table
Переименование атрибутов SELECT Фирма AS Company, Фамилия AS Name FROM Клиент
Вычисляемые атрибуты SELECT Фирма, Фамилия+’ ‘+ Left(Имя, 1)+’. ’+Left(Отчество, 1)+’. ’AS ФИО FROM Клиент
Вычисляемые атрибуты SELECT name AS first_name, year(getdate()-birth) AS age, zarplata*0, 13 AS nalog, ‘works’ AS status FROM person
Создание новой таблицы SELECT name AS first_name, DATEDIFF(YEAR, GETDATE(), birth) AS age, zarplata*0, 13 AS nalog, ‘works’ AS status INTO new_table FROM person
WHERE () NOT AND OR • Выражение вычисляется слева направо. • Первыми вычисляются подвыражения в скобках. • Операторы NOT выполняются до выполнения операторов AND и OR. • Операторы AND выполняются до выполнения операторов OR.
WHERE • Сравнение: сравниваются результаты вычисления одного выражения с результатами вычисления другого. • • Диапазон Принадлежность множеству Значение NULL Соответствие шаблону
Селекция сравнение SELECT Название, Цена FROM Товар WHERE Цена>=100 AND Цена<=150
WHERE • Сравнение • Диапазон: проверяется, попадает ли результат вычисления выражения в заданный диапазон значений. • Принадлежность множеству • Значение NULL • Соответствие шаблону
Селекция диапазон SELECT Название, Цена FROM Товар WHERE Цена BETWEEN 100 AND 150
WHERE • Сравнение • Диапазон • Принадлежность множеству: проверяется, принадлежит ли результат вычислений выражения заданному множеству значений. • Значение NULL • Соответствие шаблону
Селекция принадлежность множеству SELECT Фамилия, Город FROM Клиент WHERE Город IN (‘Москва’, ‘Самара’)
WHERE Сравнение Диапазон Принадлежность множеству Значение NULL: проверяется, содержит ли данный столбец определитель NULL (неизвестное значение). • Соответствие шаблону • •
Селекция пустое значение SELECT Фамилия, Телефон FROM Клиент WHERE Телефон Is Null SELECT Клиент. Фамилия, Клиент. Телефон FROM Клиент WHERE Клиент. Телефон Is Not Null
WHERE • • • Сравнение Диапазон Принадлежность множеству Значение NULL Соответствие шаблону: проверяется, отвечает ли некоторое строковое значение заданному шаблону.
Селекция поиск по образцу SELECT Клиент. Фамилия, Клиент. Телефон FROM Клиент WHERE Клиент. Телефон Like ‘_4%’ SELECT Клиент. Фамилия, Клиент. Телефон FROM Клиент WHERE Клиент. Телефон Like ‘_[24]%’
Селекция поиск по образцу • Символ % – вместо этого символа может быть подставлено любое количество произвольных символов. • Символ _ заменяет один символ строки. • [] – вместо символа строки будет подставлен один из возможных символов, указанный в этих ограничителях. • [^] – вместо соответствующего символа строки будут подставлены все символы, кроме указанных в ограничителях.
Реляционные операции в SQL: проекция/селекция SELECT L FROM R WHERE C В реляционной алгебре: ( c(R)) L
Агрегатные функции • COUNT (Выражение) - определяет количество записей в выходном наборе; • MIN/MAX (Выражение) – наименьшее/ наибольшее из множества значений; • AVG (Выражение) - среднее значение. • SUM (Выражение) - сумма множества значений.
Агрегирование • aggregate_function ([ALL | DISTINCT] выражение) • Можно использовать только после SELECT и HAVING • В качестве выражения могут быть: любая константа, функция комбинация из названий столбцов, констант и функций, соединенных арифметическими или битовыми операциями.
Агрегирование без группировки SELECT COUNT(*), SUM(salary), AVG(salary) FROM emp • COUNT(*) – подсчет всех строк, включая NULL • Остальные функции перед вычислением отбрасывают нулевые значения. Если DISTINCT отбрасываются дубликаты
Count() T 1 S_year S_group S_name S-gpa* S_phone 4 1 Иванов 5 NULL 4 1 Петров 4 NULL 4 3 Сидоров 3 777 -77 -77 4 3 Иванов 4 NULL NULL SELECT COUNT(*), COUNT(S_name), COUNT (DISTINCT S_year), COUNT(S_phone) FROM T 1 WHERE name ’Сидоров’ * gpa - grade point average
Count() S_year S_group S_name S-gpa* S_phone 4 1 Иванов 5 NULL 4 1 Петров 4 NULL 4 3 Сидоров 3 777 -77 -77 4 3 Иванов 4 NULL NULL T 1 NULL SELECT COUNT(*), COUNT(S_name), COUNT (DISTINCT S_year), COUNT(S_phone) FROM T 1 WHERE name ’Сидоров’ 4, 3, 1, 0
Агрегирование с группировкой SELECT S_group, AVG(S_gpa) AS avg_gpa FROM T 1 WHERE name ’Сидоров’ GROUP BY S_group
Агрегирование с группировкой SELECT S_group, AVG(S_gpa) AS avg_gpa FROM T 1 WHERE name ’Сидоров’ GROUP BY S_group avg_gpa 1 4, 5 3 4
Агрегирование с группировкой SELECT S_group, AVG(S_gpa) AS avg_gpa FROM T 1 WHERE name ’Сидоров’ GROUP BY S_group HAVING COUNT(*)>1 S_group avg_gpa 1 4, 5
Агрегирование с группировкой T (курс, группа, фамилия, ср_балл) SELECT курс, группа, AVG(ср_балл) FROM T GROUP BY курс, группа HAVING MIN(ср_балл) >= 4
Вложенные запросы • Если список в предложении SELECT содержит итоговые функции, а в тексте запроса отсутствует фраза GROUP BY, обеспечивающая объединение данных в группы, то ни один из элементов списка предложения SELECT не может включать каких-либо ссылок на поля, за исключением ситуации, когда поля выступают в качестве аргументов итоговых функций.
Вложенные запросы SELECT фамилия, Max(ср_балл) FROM T
Вложенные запросы SELECT фамилия, ср_балл FROM T WHERE ср_балл =(SELECT Max(ср_балл) FROM T)
Вложенные запросы SELECT курс, группа, AVG(ср_балл) FROM T GROUP BY курс, группа HAVING AVG(ср_балл)>(SELECT AVG(ср_балл) FROM T)
Сортировка SELECT * FROM emp ORDER BY name [ASC | DESC]
Реляционные операции в SQL: произведение SELECT * FROM person, dept
Операции соединения в SQL SELECT * FROM emp, dept WHERE emp. dno = dept. dno SELECT * FROM Emp JOIN dept ON emp. dno=dept. dno
Внешнее соединение SELECT * FROM имя_таблицы_1 {INNER | LEFT | RIGHT|FULL} JOIN имя_таблицы_2 ON условие_соединения
Внешнее соединение SELECT * FROM имя_таблицы_1 {[INNER] | LEFT | RIGHT|FULL} JOIN имя_таблицы_2 ON условие_соединения Различные типы операций соединения: • тета-соединение R FS; • соединение по эквивалентности R =S; • естественное соединение R S; • внешнее соединение R S; • полусоединение RFS.
Внешнее соединение • JOIN: возвращает строки, когда есть хотя бы одно совпадение в обоих таблицах • LEFT JOIN: возвращает строки из левой таблицы, даже если нет ни одного совпадения в правой • RIGHT JOIN: возвращает строки из правой таблицы, даже если нет ни одного совпадения в левой • FULL JOIN: возвращает строки из обеих таблиц
Группа 101 102 103 Студент Сидоров Петров Иванов Николаев Ин_язык Английский Немецкий Английский Испанский S Аудитория Ин_язык 5 Английский 33 Немецкий 24 Французский R
INNER JOIN SELECT Группа, студент, ин_язык, аудитория FROM S JOIN R ON S. Ин_язык = R. Ин_язык Группа Студент Ин_язык Аудитория 101 Сидоров Английский 5 101 Петров Немецкий 33 102 Иванов Английский 5
LEFT JOIN SELECT Группа, студент, ин_язык, аудитория FROM S LEFT JOIN R ON S. Ин_язык = R. Ин_язык Группа Студент Ин_язык Аудитория 101 Сидоров Английский 5 101 Петров Немецкий 33 102 Иванов Английский 5 103 Николаев Испанский NULL
RIGHT JOIN SELECT Группа, студент, ин_язык, аудитория FROM S RIGHT JOIN R ON S. Ин_язык = R. Ин_язык Группа Студент Ин_язык Аудитория 101 Сидоров Английский 5 101 Петров Немецкий 33 102 Иванов Английский 5 NULL Французский 24
FULL JOIN SELECT Группа, студент, ин_язык, аудитория FROM S FULL JOIN R ON S. Ин_язык = R. Ин_язык Группа Студент Ин_язык Аудитория 101 Сидоров Английский 5 101 Петров Немецкий 33 102 Иванов Английский 5 103 Николаев Испанский NULL Французский 24
Вложенные подзапросы в предикатах IN, NOT IN, EXISTS, NOT EXISTS, Полусоединение: SELECT * FROM R WHERE ин_язык IN ( SELECT ин_язык FROM S) SELECT * FROM R WHERE EXISTS( SELECT ин_язык FROM S WHERE ин_язык =R. ин_язык)
EXISTS T (курс, группа, фамилия, ср_балл) SELECT курс, группа FROM T WHERE NOT EXISTS (SELECT курс, группа FROM T AS T 1 WHERE T 1. курс= T. курс AND T 1. группа= T. группа AND ср_балл = 5 ); Результат ?
EXISTS T (курс, группа, фамилия, ср_балл) SELECT курс, группа FROM T WHERE NOT EXISTS (SELECT курс, группа FROM T AS T 1 WHERE T 1. курс= T. курс AND T 1. группа= T. группа AND ср_балл = 5 ); Результат – группы, в которых нет ни одного отличника
Теоретико-множественные операции • • UNION INTERSECT EXCEPT При этом отношения должны быть совместимы, т. е. иметь одинаковое количество полей с совпадающими типами данных.
Теоретико-множественные операции SELECT * FROM emp WHERE birthdate< ‘ 1990’ UNION SELECT * from emp WHERE dno=112
Встроенные функции • Арифметические, тригонометрические • Функции над строками • Явное преобразование типов данных • Календарная арифметика • Обработка неопределенных значений • Получение системной информации (дата, время, идентификатор строки таблицы, …)
Вставка данных (1) • По одной строке: INSERT INTO t_person(список колонок) VALUES(список скалярных значений) • Множественное добавление: INSERT into t_person(список колонок) SELECT … FROM … WHERE …
Вставка данных (2) Hollywood_Person. ID First. Name Last. Name 1 Квентин Тарантино 2 Джон Траволта 3 Сэмюэль Джексон 4 Ума Турман 5 Брюс Уиллис INSERT INTO Hollywood_Person (Person. ID, First. Name, Last. Name) VALUES (1, 'Квентин', 'Тарантино'); INSERT INTO Hollywood_Person VALUES (2, 'Джон', 'Траволта'); INSERT INTO Hollywood_Person (Person. ID, First. Name, Last. Name) VALUES (3, 'Сэмюэль', 'Джексон'); INSERT INTO Hollywood_Person (Person. ID, First. Name, Last. Name) VALUES (4, 'Ума', 'Турман'); INSERT INTO Hollywood_Person (Person. ID, First. Name, Last. Name) VALUES (5, 'Брюс', 'Уиллис'); …
Вставка данных (3) INSERT INTO Table. Name (Field. Name 1, Field. Name 2, …) <SELECT statement> ; INSERT INTO Table 1 (Field. Name 1, Field. Name 2) SELECT T 2. col 1 + T 2. col 2, 0 FROM Table 2 T 2 WHERE T 2. col 3 > 0;
Обновление данных UPDATE Table. Name SET Field. Name 1=<expression 1>, Field. Name 2=<expresion 2>, … [WHERE Clause]; expression: column name; constant; function UPDATE Employee SET Surname=‘Brown’ WHERE Employee. ID=5;
Удаление данных (1) DELETE FROM Table. Name [WHERE Clause]; • Clause определяет условие для удаления. Без условий удаляются все записи в таблице. • Перед удалением производится проверка зависимых записей. Если в условии внешнего ключа ничего не указано (RESTRICT), то запись из родительской таблицы не может быть удалена, пока на нее есть ссылки из дочерних таблиц. DELETE FROM Table 1 WHERE col 1 IS NULL;
Удаление данных (2) TRUNCATE Table. Name; • Удаляются все записи в таблице. • Работает намного быстрее, чем Delete. • Перед удалением производится проверка зависимых записей. Если в условии внешнего ключа ничего не указано (RESTRICT), то запись из родительской таблицы не может быть удалена, пока на нее есть ссылки из дочерних таблиц. TRUNCATE Table 1;
Создание представлений CREATE VIEW View. Name AS SELECT Код. Клиента, Фамилия, Город. Клиента FROM Клиент WHERE Город. Клиента='Москва‘ SELECT * FROM View. Name INSERT INTO View. Name VALUES (12, 'Петров', 'Самара')
Деление отношений S (name, course) C (course) CREATE VIEW S 1 AS SELECT name FROM S CREATE VIEW S 2 AS SELECT name, course FROM S, C
Деление отношений S (name, course) C (course) CREATE VIEW S 3 AS SELECT * FROM S 2 EXEPT SELECT * FROM S CREATE VIEW S 4 AS SELECT name FROM S EXEPT SELECT name FROM S 3
Лекция 3. Реляционная алгебра.pptx