Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Приложение А. Ответы купраJкнениям

или

 

 

 

 

 

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/0311990

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/0511990

2006

1001

 

3010

1309.95

10/06/1990

2004

1002

 

3011

9891.88

10/0611990

2006

1001

5.

onum

amt

odate

cnum

snum

 

3001

18.69

10/0311990

2008

1007

 

3003

767.19

10/03/1990

2001

1001

 

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/0611990

2004

1002

 

3011

9891.88

10/06/1990

2006

1001

б.

SELECT

•

 

 

 

 

FROM Salespeople;

 

 

 

ГЛАВА 5

 

 

 

 

1.

SELECT

•

 

 

 

 

FROM

Orders

 

 

 

 

WНERE odate IN (10/03/1990, 10/04/1990);

 

 

и

 

 

 

 

 

 

SELECT

•

 

 

 

 

FROM

Orders

 

 

 

302

Приложение А. Ответы 1< упражнениям

WHERE odate BEТWEEN 10/03/1990 AND 10/04/1990;

2.SELECT •

FROM Customers

WHERE snum IN (1001,1004);

3.SELECT *

FROM Customers

WHERE cname BEТWEEN .А. AND . н.;

Замечание: В системах, использующих АSСП-коды, указанные границы не включа­ ют фамилию Hoffinan, поскольку после символа 'Н' предполагается пробел. По той же причине в качестве второй границы нельзя указать 'G', поскольку в этом случае не будут включены имена Giovanni и Grass. Символ 'G' можно использовать в случае, если за ним следует символ 'Z' - последний символ алфавита.

4.SELECT •

FROM Custome rs

WHERE cname LIKE . сх .;

5.SELECT •

FROM Orders

WHERE amt < > О

AND (amt IS NOT NULL);

нлн

SELECT •

FROM Orders

WHERE NOT (amt = О

OR amt IS NULL);

ГЛАВА 6

1.SELECT COUNT( •) FROM Orders

WHERE odate = 10/03/1990;

2.SELECT COUNT (DISTINCT city)

FROM Custome rs;

з. SELECT cnum, MIN (amt) FROM Orders

GROUP ВУ cnum;

4.SELECT MIN (cname) FROM Customers

WHERE cname LIKE 'GX';

5.SELECT city

МАХ (rating)

FROM Custome rs

303

Приложение А. Ответы купраж11ениям

 

 

 

GROUP

ВУ

city;

6.

SELECT odate,

count (DISTINCT snum)

 

FROM

Orders

 

 

 

 

 

GROUP

ВУ

odate;

 

 

ГЛАВА 7

 

 

 

 

 

 

1.

SELECT onum,

snum,

amt•.12

 

FROM

О rde rs;

 

 

 

 

2.

SELECT · For the

city·,

city·, · the highest rating is ·,

 

МАХ (rating)

 

 

 

 

 

 

FROH Customers

 

 

 

GROUP

ВУ city;

 

3.

SELECT rating,

cname,

cnum

 

FROH

Customers

 

 

 

 

ORDER

ВУ

rating DESC;

 

4.

SELECT odate,

SUH

(amt)

 

FROH

Orders

 

 

 

 

 

GROUP

ВУ

odate

 

 

 

 

ORDER

ВУ

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 FROH 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

304

Приложение А. Ответы купражнениям

AND first.sname < second.sname;

Алиасы могут иметь имена, отличные от указанных.

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

а, Customers Ь

WHERE а. rating

=b.rating

AND Ь. cnum

= 2001;

ГЛАВА 10

1.SELECT •

FROM Orders WHERE cnum =

(SELECT cnum

FROM Customers

WHERE cname = ·c1sneros");

или

SELECT •

FROM Orders WHERE cnum IN

(SELECT cnum

FROM Customers

WHERE cname = Cisne гоs · );

2.SELECT DISTINCT cname, rating FROM Customers, Orders WHERE amt>

(SELECT AVG (amt)

FROM Оrde гs)

AND Orders.cnum =Customers.cnum;

3.SELECT snum, SUM (amt)

FROM Orde гs GROUP ВУ snum

HAVING SUM (amt) > (SELECT МАХ (amt)

FROM Orders);

305

Приложение А. Ответы купражнениям

ГЛАВАJJ

1.SELECT cnum, cname FROM Customers outer WHERE rating =

(SELECT МАХ (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 а, Customers Ь WHERE a.snum = b.snum

AND b.rating = 300;

3.SELECT •

FROM Salespeole а

WHERE EXISTS

306

Источник: https://studfile.net/preview/16418473/