SET rating = rating + 100
WHERE city = 'Rome';
UPDATE Customers
SET snum = 1004
WHERE snum = 1002;
Глава 16
INSERT INTO Multicust
SELECT *
FROM Salespeople
WHERE 1 <
(SELECT COUNT (*)
FROM Customers
WHERE Customers.snum = Salespeople.snum);
DELETE FROM Customers
WHERE NOT EXISTS
(SELECT *
FROM Orders
WHERE cnum = Customers.cnum);
UPDATE Salespeople
SET comm = comm + (comm * .2)
WHERE 3000 <
(SELECT SUM (amt)
FROM Orders
WHERE snum = Salespeople.snum);
В более сложный вариант этой команды можно было бы вставить проверку чтобы убедиться, что значения комиссионных не превышают 1.0 ( 100 % ):
UPDATE Salespeople
SET comm = comm + (comm * .2)
WHERE 3000 <
(SELECT SUM (amt)
FROM Orders
WHERE snum = Salespeople.snum)
AND comm + (comm * .2) < 1.0;
Эти проблемы могут иметь другие, такие же хорошие решения.
CREATE TABLE Customers
(cnum integer,
Cname char(10),
City char(10),
Rating integer,
snum integer);
2. CREATE INDEX Datesearch ON Orders(odate);
( Все индексные имена используемые в этих ответах - произвольные. )
3. CREATE UNIQUE INDEX Onumkey ON Orders(onum);
4. CREATE INDEX Mydate ON Orders(snum, odate);
CREATE UNIQUE INDEX Combination ON
Customers(snum, rating);
Глава 18
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));
Или