Чтение онлайн

на главную - закладки

Жанры

Понимание SQL

Грубер Мартин

Шрифт:

UNIQUE (snum, cnum));

* Первое решение предпочтительнее.

CREATE TABLE Salespeople (snum integer NOT NULL PRIMARY KEY,

sname char(15) CHECK (sname BETWEEN 'AA' AND 'MZ'),

* city char(15), comm decimal NOT NULL DEFAULT=.10);

CREATE TABLE Orders (onum integer NOT NULL, amt decimal,

odate date, cnum integer NOT NULL,

* snum integer NOT NULL, CHECK ((cnum > snum) AND (onum > cnum)));

Глава 19.

CREATE TABLE Cityorders (onum integer NOT NULL PRIMARY KEY,

amt decimal, cnum integer, snum integer,

city char (15), FOREIGN KEY (onum, amt, snum)

REFERENCES Orders (onum, amt, snum),

FOREIGN KEY (cnum, city)

* REFERENCES Customers (cnum, city) );

CREATE TABLE Orders (onum integer NOT NULL,

amt decimal, odate date, cnum integer NOT NULL,

snum integer, prev integer, UNIQUE (cnum, onum),

* FOREIGN KEY (cnum, prev) REFERENCES Orders (cnum,onum) );9

Глава 20.

CREATE VIEW HighratingsAS SELECT * FROM Customers

* WHERE rating=(SELECT MAX (rating) FROM Customers);

CREATE VIEW Citynumber AS SELECT city, COUNT (DISTINCT snum)

* FROM Salespeople GROUP BY city;

CREATE VIEW Nameorders AS SELECT sname, AVG (amt), SUM (amt)

FROM Salespeople, Orders WHERE Salespeople.snum=Orders.snum

* GROUP BY sname;

. CREATE VIEW Multcustomers AS SELECT *

FROM Salespeople a WHERE 1 < (SELECT COUNT (*)

* FROM Customers b WHERE a.snum=b.snum);

Глава 21.

#1 -

не модифицируемый, потому что он использует DISTINCT.

#2 - не модифицируемый, потому что он использует обьединение, агрегатную функцию, и GROUP BY.

* #3 - не модифицируемый, потому что он основывается на #1, который сам по себе не модифицируемый.

CREATE VIEW Commissions AS SELECT snum, comm

FROM Salespeople WHERE comm BETWEEN .10 AND .20

* WITH CHECK OPTION;

CREATE TABLE Orders

(onum integer NOT NULL PRIMARY KEY, amt decimal,

odate date DEFAULT VALUE=CURDATE, snum integer,

cnum integer);

CREATE VIEW Entryorders AS SELECT onum, amt, snum, cnum

* FROM Orders;

Глава 22.

* GRANT UPDATE (rating) ON Customers TO Janet;

* GRANT SELECT ON Orders TO Stephen WITH GRANT OPTION;

* REVOKE INSERT ON Salespeople FROM Claire;

Шаг 1:

CREATE VIEW Jerrysview AS SELECT * FROM Customers

WHERE rating BETWEEN 100 AND 500 WITH CHECK OPTION;

Шаг 2:

* GRANT INSERT, UPDATE ON Jerrysview TO Jerry;

Шаг 1:

CREATE VIEW Janetsview

AS SELECT * FROM Customers

WHERE rating=(SELECT MIN (rating) FROM Customers);

Шаг 2:

* GRANT SELECT ON Janetsview TO Janet;

Глава 23.

* CREATE DBSPACE Myspace (pctindex 15, pctfree 40);

* CREATE SYNONYM Orders FOR Diane.Orders;

*

Они должны быть откатаны обратно назад.

* Блокировка взаимоисключающего доступа.

* Толко чтение

Глава 24.

SELECT a.tname, a.owner, b.cname, b.datatype

FROM SYSTEMCATOLOG a, SYSTEMCOLUMNS b

WHERE a.tname=b.tname AND a.owner=b.owner

AND a.numcolumns > 4;

* Обратите Внимание: из-за того что большинство имен столбца объединяемых таблиц - различны, не все из используемых псевдонимов a и b в вышеупомянутой команде - строго обязательны. Они представлены просто для понимания.

SELECT tname, synowner, COUNT (ALL synonym)

* FROM SYTEMSYNONS GROUP BY tname, synowner;

. SELECT COUNT (*) FROM SYSTEMCATALOG a

WHERE numcolumns/2 < (SELECT COUNT (DISTINCT cnumber)

FROM SYSTEMINDEXES b WHERE a.owner=b.tabowner

* AND a.tname=b.tname);

Глава 25.

EXEC SQL BEGIN DECLARE SECTION;

SQLCODE:integer;

{требуемый всегда}

cnum integer;

snum integer;

custnum: integer;

salesnum: integer;

EXEC SQL END DECLARE SECTION;

EXEC SQL DECLARE Wrong_Orders AS CURSOR FOR

SELECT cnum, snum

FROM Orders a

WHERE snum < >

(SELECT snum

FROM Customers b

WHERE a.cnum=b.cnum);

{ Мы пока еще используем здесь SQL для выполнения основной работы.

Запрос выше размещает строки таблицы Порядков которые не согласуются с таблицей Заказчиков. }

EXEC SQL DECLARE Cust_assigns AS CURSOR FOR

SELECT cnum, snum

FROM Customers;

{Этот курсор используется для получения правильных значений snum}

begin { основная программа }

EXEC SQL OPEN CURSOR Wrong_Orders;

while SQLCODE=O do

{Цикл до тех пор пока Wrong_Orders не опустеет}

begin

EXEC SQL FETCH Wrong_Orders INTO

(:cnum, :snum);

if SQLCODE=O then

begin

{Когда Wrong_Orders опустеет, мы не хотели бы продолжать выполнение

этого цикла до бесконечности}

EXEC SQL OPEN CURSOR Cust_Assigns;

repeat

EXEC SQL FETCH Cust_Assigns

INTO (:custnum, :salesnum);

until :custnum=:cnum;

{Повторять FETCH до тех пор пока ... команда будет просматривать Cust_Assigns курсор до строки которая соответствует текущему значению cnum найденого в Wrong_Orders}

Поделиться:
Популярные книги

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Барон Дубов

Карелин Сергей Витальевич
1. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Попытка возврата. Тетралогия

Конюшевский Владислав Николаевич
Попытка возврата
Фантастика:
альтернативная история
9.26
рейтинг книги
Попытка возврата. Тетралогия

Долгий путь домой

Русич Антон
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Долгий путь домой

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Завод-3: назад в СССР

Гуров Валерий Александрович
3. Завод
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Завод-3: назад в СССР

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая

Отдельный танковый

Берг Александр Анатольевич
1. Антиблицкриг
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Отдельный танковый

Метатель. Книга 3

Тарасов Ник
3. Метатель
Фантастика:
попаданцы
альтернативная история
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель. Книга 3

Боярышня Евдокия

Меллер Юлия Викторовна
3. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Евдокия