Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0053325_72FAB_graber_m_vvedenie_v_sql.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.07 Mб
Скачать

Глава 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;