- •Обзор команд создания, изменения и удаления таблиц
- •Представления и соединения
- •Представления и подзапросы
- •Ограничения представлений
- •Удаление представлений
- •Технология и модели «клиент – сервер»
- •Модель fs (файловый сервер)
- •Технологический недостаток модели
- •Модель rda (доступ к удаленным данным)
- •Модель сервера бд (dbs)
- •Модель as- сервер приложений (Application server)
- •Поддержка транзакций
- •Восстановление базы данных
SET- это команда, а не предикат.
Обзор команд создания, изменения и удаления таблиц
Создание таблицы CREATETABLE<имя таблицы>
(<имя столбца><тип данных>[(<размер>)],
<имя столбца><тип данных>[(<размер>)], …);
Создание индексаCREATEINDEX<имя индекса>ON<имя таблицы>
(<имя столбца> [,<имя столбца>]…];
Удаление индексаDROPINDEX<имя индекса>
Изменение таблицы ALTERTABLE<имя таблицы>ADD<имя столбца>
(не стандартная, но <тип данных><размер>;
широко применяема)
Исключение таблицы DROPTABLE<имя таблицы>
Расширенный синтаксис:
CREATETABLE<имя таблицы>
(<имя столбца><тип данных><ограничение на столбец>,
<имя столбца><тип данных><ограничение на столбец>…
<ограничение на таблицу>[<имя столбца>
[,<имя столбца>…])…);
Пример ограничений: NOTNULL,
NOT NULL UNIQUE, NOT NULL PRIMARY KEY, CHECK (условие)
Пример ограничения на таблицу:
UNIQUE(snum,odate)
Литература по SQL:
Мартин Грабер. Введение в SQL,SYBEX, 1990-1996
Представления (views)
Это виртуальная таблица получаемая путем запроса. До сих пор мы рассматривали только технику составления запросов. Когда необходимо сослаться на результат запроса в команде нужно представление.
Представления сравнивают с окном, через которое просматриваются данные в реальных (базовых) таблицах. Можно сравнить с кадрированием 1 фотографии.
Пример:
CREATE VIEW Londonstaff
AS SELECT *
FROM Salespeople
WHERE city = ‘London’;
Затем можно ссылаться как на таблицу
SELECT *
FROM Londonstaff;
Представление обновляется автоматически при изменении базовых таблиц.
Обновление представлений
Допустим, мы имеем представление:
CREATEVIEWSalesown
AS SELECT snum, sname, city
FROM Salespeople;
По сути, оно просто ограничивает доступ к таблице Salespeopleтремя полями.
Это представление можно модифицировать командами обновления DML. Следует понимать, что при этом модификации воздействуют только на лежащую в его основе таблицу:
UPDATE Salesown
SET city = ‘Palo Alto’
WHEREsnum= 1004;
Групповые представления
Это представления, которые в своем запросе содержат GROUPBY.
Пример. Предположим, что каждый день нужно отслеживать количество покупателей, имеющих заказы; количество продавцов, получивших заказы; количество заказов, среднее количество заказов, общее количество заказов.
Вместо сложного запроса можно сначала сконструировать представление:
CREATE VIEW Total for day
AS SELECT odate, COUNT (DISTINCT cnum),
COUNT (DISTINCT cnum), COUNT (onum), AVG (amt),
SUM (amt)
FROM Orders
GROUP BY odate;
Теперь можно получить необходимую информацию с помощью простейших запросов:
SELECT* здесь просто указывать что конкретно
FROMTotalforday;
То есть идея здесь подобна идее подпрограммы в языке программирования.
Представления и соединения
(не путать с объединениями UNION).
Ясно, что наиболее типично для представлений получать информацию из многих таблиц или других VIEWS. Например, представление, показывающее для каждого заказа имена продавца и покупателя:
CREATE VIEW Nameorders
AS SELECT onum, amt, a.snum, sname, cname
FROM Orders a, Customers b, Sales people c
WHERE a.cnum = b.cnum
AND a.snum = c.snum;
Теперь можно выбрать все заказы покупателя или продавца, например (для продавца):
SELECT *
FROM Nameorders
WHERE sname = ‘Ivanov’;
В соединении могут участвовать комбинации представлений и таблиц. Например, чтобы увидеть заказы ‘Petrov’а и его комиссионные:
выражение
SELECTa.sname,cname,amt*comm
FROM Nameorders a, Sales people b
WHERE a.sname = ‘Petrov’
AND b.snum = a.snum;