
- •3. Использование sql для извлечения информации из таблиц.
- •4. Использование реляционных и булевых операторов
- •6. Обобщение данных с помощью агрегатных функций
- •9. Объединение таблицы с собой
- •11. Соотнесенные подзапросы.
- •12. Использование оператора exists.
- •13. Использование операторов any, all, и some.
- •14. Использование предложения union
- •16. Использование подзапросов с командами модификации
- •17. Создание таблиц
- •18.Ограничение значений ваших данных
- •20. Введение: представления
- •21. Изменение значений с помощью представлений
- •Глава 23 продолжит обсуждение о выводах в sql, таких как сохранение
- •23. Глобальные аспекты sql
- •Глава 5.
- •Глава 6.
- •Глава 7.
- •Глава 8.
- •Глава 9.
- •Глава 10.
- •Глава 11.
- •Глава 12.
- •Глава 13.
- •Глава 14.
- •Глава 15.
- •Глава 16.
- •Глава 17.
- •Глава 18.
- •Глава 19.
- •Глава 20.
- •Глава 21.
- •Глава 22.
- •Глава 23.
- •Глава 24.
- •Глава 25.
Глава 18.
1. CREATE TABLE Orders
(onum integer NOT NULL PRIMARY KEY,
amt decimal,
odate date NOT NULL,
cnum integer NOT NULL,
snum integer NOT NULL,
UNIOUE (snum, cnum));
или
CREATE TABLE Orders
(onum integer NOT NULL UNIQUE,
amt decimal,
odate date NOT NULL,
cnum integer NOT NULL,
snum integer NOT NULL,
UNIQUE (snum, cnum));
Первое решение предпочтительнее.
2. 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);
3. 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.
1. 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) );
2. 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.
1. CREATE VIEW Highratings
AS SELECT *
FROM Customers
WHERE rating =
(SELECT MAX (rating)
FROM Customers);
2. CREATE VIEW Citynumber
AS SELECT city, COUNT (DISTINCT snum)
FROM Salespeople
GROUP BY city;
3. CREATE VIEW Nameorders
AS SELECT sname, AVG (amt), SUM (amt)
FROM Salespeople, Orders
WHERE Salespeople.snum = Orders.snum
GROUP BY sname;
4. CREATE VIEW Multcustomers
AS SELECT *
FROM Salespeople a
WHERE 1 <
(SELECT COUNT (*)
FROM Customers b
WHERE a.snum = b.snum);
Глава 21.
1. #1 - не модифицируемый, потому что он использует DISTINCT.
#2 - не модифицируемый, потому что он использует обьединение, агре-
гатную функцию, и GROUP BY.
#3 - не модифицируемый, потому что он основывается на #1, который
сам по себе не модифицируемый.
2. CREATE VIEW Commissions
AS SELECT snum, comm
FROM Salespeople
WHERE comm BETWEEN .10 AND .20
WITH CHECK OPTION;
3. 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.
1. GRANT UPDATE (rating) ON Customers TO Janet;
2. GRANT SELECT ON Orders TO Stephen WITH GRANT OPTION;
3. REVOKE INSERT ON Salespeople FROM Claire;
4. Шаг 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;
5. Шаг 1: CREATE VIEW Janetsview
AS SELECT *
FROM Customers
WHERE rating =
(SELECT MIN (rating)
FROM Customers);
Шаг 2: GRANT SELECT ON Janetsview TO Janet;