Программирование >>  Понятие sql 

1 ... 77 78 79 [ 80 ] 81 82 83 ... 95


Глава 14

SELECT cname, city, rating, High Rating FROM Customers WHERE rating >= 200

UNION

SELECT cname, city, rating, Low Ratlng FROM Customers WHERE rating < 200;

SELECT cname, city, rating, High Rating FROM Customers

WHERE rating >= 200 UNION

SELECT cname, city, rating, Low Rating FROM Customers

WHERE NOT rating >= 200;

Различие между этими двумя предложениями - в форме второго предиката. Обратите внимание, что в обоих случаях строка Low Rating имеет в начале дополнительный пробел для того, чтобы совпадать со строкой High Rating по длине.

SELECT *

FROM Salespeople

WHERE city <> ALL (SELECT city

FROM Customers);

SELECT *

FROM Salespeople

WHERE NOT city = ANY (SELECT city

FROM Customers);

SELECT * FROM Orders

WHERE amt > ALL (SELECT amt

FROM Orders a, Customers b

WHERE a.cnum = b.cnum AND b.city = London);

SELECT *

FROM Orders

WHERE amt > (SELECT MAX (amt)

FROM Orders a, Customers b

WHERE a.cnum = b.cnum AND b.city = London);



SELECT cnum, cname FROM Customers a WHERE 1 < (SELECT COUNT (*)

FROM Orders b

WHERE a.cnum = b.cnum)

UNION

SELECT snum, sname FROM Salespeople a WHERE 1 < (SELECT COUNT (*) FROM Orders b

WHERE a.snum = b.snum)

ORDER BY 2;

SELECT snum

FROM Salespeople

WHERE city = San Jose

UNION

(SELECT cnum

FROM Customers

WHERE city = San Jose

UNION ALL

SELECT onum FROM Orders

WHERE odate = 10/03/1990);

Глава 15

INSERT INTO Salespeople (city, cname, comm, cnum) VALUES (San Jose, Blanco, NULL, 1100);

DELETE FROM Orders WHERE cnum = 2006;

UPDATE Customers

SET rating = rating + 100 WHERE city = Rome;

UPDATE Customers SET snum = 1004 WHERE snum = 1002;



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;

Эти проблемы могут иметь другие, такие же хорошие решения.

Глава 17

CREATE TABLE Customers (cnum integer, cname char(10), city char(10), rating integer, snum integer);

CREATE INDEX Datesearch ON Orders(odate);

(Все индексные имена, используемые в этих ответах - произвольные.)

CREATE UNIQUE INDEX Onumkey ON Orders(onum);



1 ... 77 78 79 [ 80 ] 81 82 83 ... 95

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика