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

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