Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
26
Добавлен:
28.03.2015
Размер:
1.58 Mб
Скачать

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;

Соседние файлы в папке БД_ТР