Скачиваний:
19
Добавлен:
01.04.2014
Размер:
82.43 Кб
Скачать

Приложение A

ОТВЕТЫ ДЛЯ УПРАЖНЕНИЙ

360 ПОНИМАНИЕ SQL

___________________________________________________________________

ПРИЛОЖЕНИЕ. A

Глава 1

1. cnum

2. rating

3. Другим словом для строки является - запись. Другим словом для столбца

является - поле.

4. Потому что строки, по определению, находятся без какого либо

определенного упорядочения.

Глава 2

1. Символ ( или текст ) и номер

2. Нет

3. Язык Манипулирования Данными (ЯЗЫК DML)

4. Это слово в SQL имеет специальное учебное значение.

Глава 3

1. SELECT onum, amt, odate

FROM Orders;

2. SELECT *

FROM Customers

WHERE snum = 1001;

3 SELECT city, sname, snum, comm

FROM Salespeople;

4. SELECT rating, cname

FROM Customers

WHERE city = 'SanJose';

5. SELECT DISTINCT snum

FROM Orders;

ОТВЕТЫ НА УПРАЖНЕНИЯ 361

___________________________________________________________________

Гдава 4

1. SELECT * FROM Orders WHERE amt > 1000;

2. SELECT sname, city

FROM Salespeople

WHERE city = 'London'

AND comm > .10;

3. SELECT *

FROM Customers

WHERE rating > 100

OR city = 'Rome';

или

SELECT *

FROM Customers

WHERE NOT rating < = 100

OR city = 'Rome';

или

SELECT *

FROM Customers

WHERE NOT (rating < = 100

AND city < > 'Rome');

Могут быть еще другие решения.

4. onum amt odate cnum snum

3001 18.69 10/03/1990 2008 1007

3003 767.19 10/03/1990 2001 1001

3005 5160.45 10/03/1990 2003 1002

3009 1713.23 10/04/1990 2002 1003

3007 75.75 10/04/1990 2004 1002

3008 4723.00 10/05/1990 2006 1001

3010 1309.95 10/06/1990 2004 1002

3011 9891.88 10/06/1990 2006 1001

5. onum amt odate cnum snum

3001 18.69 10/03/1990 2008 1007

3003 767.19 10/03/1990 2001 1001

362 ПОНИМАНИЕ SQL

___________________________________________________________________

ПРИЛОЖЕНИЕ A

onum amt odate cnum snum

3006 1098.16 10/03/1990 2008 1007

3009 1713.23 10/04/1990 2002 1003

3007 75.75 10/04/1990 2004 1002

3008 4723.00 10/05/1990 2006 1001

3010 1309.95 10/06/1990 2004 1002

3011 9891.88 10/06/1990 2006 1001

6. Select *

FROM Salespeople;

Глава 5

1. SELECT *

FROM Orders

WHERE odate IN (10/03/1990,10/04/1990);

и

SELECT *

FROM Orders

WHERE odate BETWEEN 10/03/1990 AND 10/04,1990;

2. SELECT *

FROM Customers

WHERE snum IN (1001,1004);

3. SELECT *

FROM Customers

WHERE cname BETWEEN 'A' AND 'H';

ПРИМЕЧАНИЕ: ВЫ ASCII базовой системе Hoffman не буде выве-

ден из-за конечных пробелов после H. По той же самой причине вот-

орая граница не может быть G, поскольку она не выведет имена

Giovanni и Grass.

G может использоваться в сопровождении с Z, так чтобы следовать

за другими символами в алфавитном порядке, а не предшествовать

им, как это делают пробелы.

4. SELECT *

FROM Customers

WHERE cname LIKE 'C%';

ОТВЕТЫ НА УПРАЖНЕНИЯ 363

___________________________________________________________________

5. SELECT *

FROM Orders

WHERE amt < > O

AND (amt IS NOT NULL);

или

SELECT *

FROM Orders

WHERE NOT (amt = O

OR amt IS NULL);

Глава 6

1. SELECT COUNT(*)

FROM Orders

WHERE odate = 10/03/1990;

2. SELECT COUNT (DISTINCT city)

FROM Customers;

3. SELECT cnum, MIN (amt)

FROM Orders

GROUP BY cnum;

4 SELECT MIN (cname)

FROM Customers

WHERE cname LIKE 'G%';

5. SELECT city,

MAX (rating)

FROM Customers

GROUP BY city;

6 SELECT odate, count (DISTINCT snum

FROM Orders

GROUP BY odate;

Глава 7

1. SELECT onum, snum, amt * .12

FROM Orders;

364 ПОНИМАНИЕ SQL

___________________________________________________________________

ПРИЛОЖЕНИЕ. A

2. SELECT 'For the city ', city, ', the highest rating is ', ",

MAX (rating)

FROM Customers

GROUP BY city;

3 SELECT rating, cname, cnum

FROM Customers

ORDER BY rating DESC;

4. SELECT odate, SUM (amt)

FROM Orders

GROUP BY odate

ORDER BY 2 DESC;

Глава 8

1. SELECT onum, cname

FROM Orders, Customers

WHERE Customers.cnum = Orders.cnum;

2. SELECT onum, cname, sname

FROM Orders, Customers, Salespeople

WHERE Customers.cnum = Orders.cnum

AND Salespeople.snum = Orders.snum;

3. SELECT cname, sname, comm

FROM Salespeople, Customers

WHERE Salespeople.snum = Customers.snum

AND comm * .12;

4. SELECT onum, comm * amt

FROM Salespeople, Orders, Customers

WHERE rating > 100

AND Orders.cnum = Customers.cnum

AND Orders.snum = Salespeople.snum;

Глава 9

1. SELECT first.sname, second.sname

FROM Salespeople first, Salespeople second

WHERE first.city = second.city

AND first.sname < second.sname;

Псевдонимам нет необходимости иметь именно такие имена.

ОТВЕТЫ К УПРАЖНЕНИЯМ 365

___________________________________________________________________

2. 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;

Ваш вывод может иметь некоторые отличия, но в вашем ответе все логические

компоненты должны быть такими же.

3. SELECT a.cname, a.city

FROM Customers a, Customers b

WHERE a.rating = b.rating

AND b.cnum = 2001;

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

366 ПОНИМАНИЕ SQL

___________________________________________________________________

ПРИЛОЖЕНИЕ. A

Глава 11

1. SELECT cnum, cname

FROM Customers outer

WHERE rating =

(SELECT MAX (rating)

FROM Customers inner

WHERE inner.city = outer.city);

2. Решение с помощью соотнесенног7о подзапроса:

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 нет.

Следовательно обьединение является более изящным

решением для этой

проблемы, чем то которое мы исследовали до этого. Имеется еще более

изящное решение с помощью подзапроса, с которым Вы столкнетесь по-

зже.

Соседние файлы в папке ПОНИМАНИЕ SQL