Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 2002.doc
Скачиваний:
44
Добавлен:
15.06.2014
Размер:
335.36 Кб
Скачать

Зависимые реляционные операторы.

Не все операторы реляционной алгебры являются независимыми. Некоторые из них можно выразить через другие реляционные операторы.

  1. Оператор соединенияопределяется через операторы выборка и декартово произведение. Оператор естественного соединения — через выборку, декартово произведение и проекцию.

  2. Пересечениевыражается через вычитание следуующим образом:

A INTERSECT B = A MINUS (A MINUS B)

  1. Делениевыражается через вычитание, декартово произведение и проекцию:

A DEVIDED BY B = A [X] MINUS ((A[X] TIMES B ) MINUS A)[X]

Все оставшиеся операторы (объединение, декартово произведение, выборка, проекция) будем называть примитивными, т.к.:

  1. Декартово произведение — это единственный оператор, увеличивающий количество атрибутов. Его нельзя выразить через объединение, вычитание и проекцию, т.к. любая из этих операций либо уменьшает количество атрибутов, либо оставляет неизменным.

  2. Проекция — это единственный оператор, уменьшающий количество атрибутов, поэтому его нельзя выразить через объединение, вычитание, декартово произведение и выборку.

  3. Выборка позволяет проводить сравнение по атрибутам отношения, поэтому ее нельзя выразить через объединение, вычитание, проекцию и декартово произведение.

Запросы, невыразимые средствами реляционной алгебры.

Существует ряд типов запросов, которые принципиально нельзя выразить операторами реляционной алгебры. Это не значит, что на них нельзя получить ответ, надо писать процедуры. Типы таких запросов:

  1. Невыразимость транзитивного замыкания. Например, рассмотрим отношение, описывающее сотрудника некоторой организации. Оно содержит такие атрибуты, как номер сотрудника, его фамилия, должность и номер руководителя. Запрос: перечислить всех руководителей (прямых и не прямых) данного сотрудника. Этот запрос является примером транзитивного замыкания. Его нельзя выразить при помощи операторов реляционной алгебры.

  2. Плохая нормализация отношений

  3. Кросс-таблицы

Товар

Месяц

Кол-во

PC

Jan

10

Print

Jan

20

Scan

Jan

30

PC

Feb

15

Print

Feb

25

Scan

Feb

13

Комплектующие

Jan

Feb

Dec

SB

10

20

40

Video

15

10

20

Такую таблицу средствами реляционной алгебры построить невозможно, т.к. данные, которые находятся в ячейках исходной таблицы, нельзя превратить в название колонок новой таблицы.

Лекция № 12 (25.04.02)

Элементы языка sql.

Стандарт языка SQL основан на реляционной алгебре, но оперирует терминами, отличающимися от реляционной теории.

Операторы SQL можно разбить на несколько групп:

  1. Операторы определения объекта БД:

  • CREATE SCHEMA — создает схемы

  • DROP SCHEMA — удаляет схемы

  • CREATE TABLE — создает таблицу

  • ALTER TABLE — изменяет таблицу

  • DROP TABLE — удаляет таблицу

  • CREATE DOMAIN — создает домен

  • ALTER DOMAIN — изменение домена

  • DROP DOMAIN — удаление домена

  • CREATE COLLATION — создание последоват-ти

  • DROP COLLATION — удаление последоват-ти

  • CREATE VIEW — создание вида

  • DROP VIEW — удаление вида

  1. Операторы манипулирования данными:

  • SELECT — выборка строк из таблицы

  • INSERT — вставка строки

  • DELETE — удаление строк из таблицы

  • UPDATE — изменение строк в таблице

  • COMMIT — зафиксировать внесенные изменения

  • ROLLBACK — «откатить» внесенные изменения

  1. операторы защиты и управления данными

  • CERATE CONSTRAINT — создать ограничение

  • DROP CONSTRAINT — удалить ограничение

  • GRANT — предоставить привилегии пользователю или приложению на манипулирование объектом

  • REVOKE — отменить привилегии пользователю или приложению на манипулирование объектом

Пример использования операторов второй группы.

INSERT

  1. Вставка одной строки в таблицу

INSERT INTO P (PNUM, PNAME) VALUES (4, “Ivanov”);

  1. Добавление в таблицу нескольких строк, выбранных из другой таблицы.

INSERT INTO TMP_TABLE (PNUM, PNAME)

SELECT PNUM, PNAME FROM P

WHERE PNUM > 2

UPDATE

Обновление нескольких строк в таблице

UPDATE P SET PNAME=’Ivanov’ WHERE PNUM=1;

DELETE

  1. Удалить несколько строк в таблице

DELETE FROM P WHERE PNUM=1;

  1. Удалить все строки в таблице

DELETE FROM P;

SELECT

  1. SELECT * FROM P

Вывести все строки таблицы

  1. SELECT PNAME FROM P WHERE PNUM > 2

В результате выполнения этого запроса возможно появление нескольких одинаковых значений. Для избавления от этой ситуации надо выполнить проекцию:

SELECT DISTINCT PNAME FROM P WHERE PNUM >2

  1. SELECT

Tovar.tname,

Tovar.tcol,

Tovar.tprice,

tcol * tprice AS SUMMA

FROM Tovar

  1. Группировка

SELECT PD.PNUM, PD.DNUM, PD.VOLUME

FROM PD

ORDER BY PD.PNUM (упорядочение)

5. SELECT PD.PNUM, PD.DNUM, PD.VOLUME

FROM PD

ORDER BY PD.PNUM

[ASC] PD.PNUM (по возрастанию)

[DESC] (по убыванию)

  1. Отбор данных из нескольких таблиц

SELECT P.NUM, P.NAME, D.NUM, D.NAME, PD.VOLUME

FROM P JOIN PD USING PD.PNUM

D JOIN PD USING PD.PNUM

  1. Декартово произведение таблиц

SELECT P.NUM, D.NUM

FROM P,D

Лекция №13 (2.05.02)