
- •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.
Глава 10.
1. 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');
2. SELECT DISTINCT cname, rating
FROM Customers, Orders
WHERE amt >
(SELECT AVG (amt)
FROM Orders)
AND Orders.cnum = Customers.cnum;
3. 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);
2. Решение с помощью соотнесенного подзапроса:
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);
2. SELECT a.snum, sname, a.city, comm
FROM Salespeople a, Customers b
WHERE a.snum = b.snum
AND b.rating = 300;
3. SELECT *
FROM Salespeople a
WHERE EXISTS
(SELECT *
FROM Customers b
WHERE b.city = a.city
AND a.snum < > b.snum);
4. SELECT *
FROM Customers a
WHERE EXISTS
(SELECT *
FROM Orders b
WHERE a.snum = b.snum
AND a.cnum < > b.cnum)
Глава 13.
1. SELECT *
FROM Customers
WHERE rating > = ANY
(SELECT rating
FROM Customers
WHERE snum = 1002);
2. cnum cname city rating snum
2002 Giovanni Rome 200 1003
2003 Liu San Jose 200 1002
2004 Grass Berlin 300 1002
2008 Cisneros SanJose 300 1007
3. SELECT *
FROM Salespeople
WHERE city < > ALL
(SELECT city
FROM Customers);
или
SELECT *
FROM Salespeople
WHERE NOT city = ANY
(SELECT city
FROM Customers);
4. SELECT *
FROM Orders
WHERE amt > ALL
(SELECT amt
FROM Orders a, Customers b
WHERE a.cnum = b.cnum
AND b.city = 'London');
5. SELECT *
FROM Orders
WHERE amt >
(SELECT MAX (amt)
FROM Orders a, Customers b
WHERE a.cnum = b.cnum
AND b.city = 'London');