Грубер Мартин
Шрифт:
* SELECT * FROM Customers WHERE cname LIKE 'C%';
SELECT * FROM Orders WHERE amt < > O AND (amt IS NOT NULL);
или
* SELECT * FROM Orders WHERE NOT (amt=O OR amt IS NULL);
Глава 6.
* SELECT COUNT(*) FROM Orders WHERE odate=10/03/1990;
* SELECT COUNT (DISTINCT city) FROM Customers;
* SELECT cnum, MIN (amt) FROM Orders GROUP BY cnum;
* SELECT MIN (cname) FROM Customers WHERE cname LIKE 'G%';
* SELECT city, MAX (rating) FROM Customers GROUP BY city;
* SELECT odate, count (DISTINCT snum FROM Orders GROUP BY odate;
Глава 7.
* SELECT onum, snum, amt * .12 FROM Orders;
SELECT 'For the city ', city, ', the highest rating is ', ", MAX (rating)
* FROM Customers GROUP BY city;
* SELECT rating, cname, cnum FROM Customers ORDER BY rating DESC;
* SELECT odate, SUM (amt) FROM Orders GROUP BY odate ORDER BY 2 DESC;
Глава 8.
SELECT onum, cname FROM Orders, Customers
* WHERE Customers.cnum=Orders.cnum;
SELECT onum, cname, sname FROM Orders, Customers, Salespeople
* WHERE Customers.cnum=Orders.cnum AND Salespeople.snum=Orders.snum;
SELECT cname, sname, comm FROM Salespeople, Customers
* WHERE Salespeople.snum=Customers.snum AND comm * .12;
SELECT onum, comm * amt FROM Salespeople, Orders, Customers
WHERE rating > 100 AND Orders.cnum=Customers.cnum
* AND Orders.snum=Salespeople.snum;
Глава 9.
SELECT first.sname, second.sname FROM Salespeople first, Salespeople second
WHERE first.city=second.city AND first.sname < second.sname;
* Псевдонимам нет необходимости иметь именно такие имена.
SELECT cname, first.onum, second.onum FROM Orders first, Orders second, Customers WHERE first.cnum=second.cnum
AND first.cnum=Customers.cnum
AND first.onum < second.onum;
* Ваш вывод может иметь некоторые отличия, но в вашем ответе все логические компоненты должны быть такими же.
SELECT a.cname, a.city FROM Customers a, Customers b
* WHERE a.rating=b.rating AND b.cnum=2001;
Глава 10.
SELECT * FROM Orders WHERE cnum=(SELECT cnum
FROM Customers WHERE cname='Cisneros');
или
SELECT * FROM Orders WHERE cnum IN
* (SELECT cnum FROM Customers WHERE cname='Cisneros');
SELECT DISTINCT cname, rating FROM Customers, Orders
WHERE amt > (SELECT AVG (amt) FROM Orders)
* AND Orders.cnum=Customers.cnum;
SELECT snum, SUM (amt) FROM Orders
GROUP BY snum HAVING SUM (amt) >
* (SELECT MAX (amt) FROM Orders);
Глава 11.
1. SELECT cnum, cname FROM Customers outer
* WHERE rating=(SELECT MAX (rating) FROM Customers inner WHERE inner.city=outer.city);
. Решение с помощью соотнесенного подзапроса:
SELECT snum, sname FROM Salespeople main
WHERE city IN (SELECT city FROM Customers inner
WHERE inner.snum < > main.snum);
Решение с помощью объединения:
SELECT DISTINCT first.snum, sname
FROM Salespeople first, Customers second
WHERE first.city=second.city AND first.snum < > second.snum;
* Соотнесенный подзапрос находит всех заказчиков не обслуживаемых данным продавцом и выясняет: живет ли кто-нибудь из их в его городе. Решение с помощью обьединения является более простым и более интуитивным. Оно находит случаи где поля city совпадают, а поля snums нет. Следовательно обьединение является более изящным решением для этой проблемы, чем то которое мы исследовали до этого. Имеется еще более изящное решение с помощью подзапроса, с которым Вы столкнетесь позже.
Глава 12.
1. SELECT * FROM Salespeople first WHERE EXISTS
(SELECT * FROM Customers second WHERE first.snum=second.snum
* AND rating=300);
SELECT a.snum, sname, a.city, comm FROM Salespeople a, Customers b
* WHERE a.snum=b.snum AND b.rating=300;
SELECT * FROM Salespeople a WHERE EXISTS
* (SELECT * FROM Customers b WHERE b.city=a.city AND a.snum < > b.snum);
SELECT * FROM Customers a WHERE EXISTS
* (SELECT * FROM Orders b WHERE a.snum=b.snum AND a.cnum < > b.cnum)