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

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

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

(SELECT •

FROH Customers Ь WHERE b.city =a.city

AND a.snum < > b.snum);

4. SELECT •

FROH Customers а WHERE EXISTS

(SELECT •

FROM Orders Ь

WHERE a.snum = b.snum);

AND а. snum < > Ь. snum);

ГЛАВА 13

1.

SELECT •

 

 

 

 

 

 

 

FROM

Custome rs

 

 

 

 

 

 

WHERE

rating

> = ANY

 

 

 

 

(SELECT

rating

 

 

 

 

 

FROH

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

San Jose

300

1007

З.

SELECT •

 

 

 

 

 

 

 

FROM Salespeople

 

 

 

 

WHERE city < > ALL

 

 

 

 

(SELECT

city

 

 

 

 

 

 

FROM

Custome rs);

 

 

 

или

 

 

 

 

 

 

 

 

SELECT •

 

 

 

 

 

 

 

FROM Salespeople

 

 

 

 

WHERE NOT city = ANY

 

 

 

 

 

(SELECT city

 

 

 

 

 

FROM

Customers);

 

 

 

4.SELECT •

FROM Orders WHERE amt > ALL

(SELECT amt

FROM Orders а, Customers Ь WHERE a.cnum =b.cnum

AND Ь.city = 'London');

307

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

5.SELECT •

FROM Orders WHERE amt >

(SELECT МАХ (amt)

FROM Orders а, Customers Ь WHERE a.cnum =b.cnum

AND b.city = 'London');

ГЛАВА 14

1. SELECT cname, city, rating, 'High Rating· FROM Customers

WHERE rating > =200 UNION

SELECT cname, city, rating, · Low Rating· FROM Customers

WHERE rating <2 00;

или

SELECT cname, city, rating, 'High Rating' FROM Customers

WHERE rating > =200 UNION

SELECT cname, city, rating, · Low Rating· FROM Customers

WHERE NOT rating > = 200:

Различие между двумя предложениями заключается в способе записи второго пре­ диката. В обоих случаях строка 'Low Rating' имеет предшествующий пробел, таким образом длина этой строки совпадает с длиной строки 'High Rating'.

2. SELECT cnum, cname

FROM Customers а WHERE 1 <

(SELECT COUNТ( •) FROM Orders Ь

WHERE a.cnum =b.cnum)

UNION

SELECT snum, sname FROM Salespeople а

WH~RE 1 <

(SELECT COUNT (•) FROM Orders Ь

WHERE a.snum = b.snum) ORDER ВУ 2;

3.SELECT snum

FROM Salespeople

308

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

WHERE

city = ·san Jose·

UNION

 

 

(SELECT

cnum

 

FROM

Customers

WHERE

city

= ·san Jose·

UNION ALL

 

SELECT onum

 

FROM

Orders

= 10/03/1990);

WHERE

odate

ГЛАВА 15

1.

INSERT INTO Salespeople (city, cname, comm, cnum)

 

VALUES (" San Jose ", "Blanco ", NULL, 1100);

2.

DELEТE FROM Orders WHERE cnum =2006;

З.

UPDATE Customers

 

SЕТ rating = rating + 100

 

WHERE ci ty = 'Rome' ;

4.

UPDATE Customers

 

SЕТ snum =1004

WHERE snum = 1002;

ГЛАВА 16

1.INSERT INTO Multicust SELECT •

FROM Salespeople WHERE 1 < (SELECT COUNT(•)

FROM Customers

WHERE Customers.snum =Salespeople.snum):

2.DELETE FROM Customers

WHERE NOT EXISTS (SELECT •

FROM Orders

WHERE cnum =Customers.cnum); З. UPDATE Salespeople

SET comm =comm + (comm•.2) WHERE 3000 <

(SELECT SUM (amt) FROM Orders

WHERE snum = Salespeople.snum);

Можно представить более наглядную версию этой команды, которая корректна только для случая, когда комиссионные (comm) не превышают 1.0 (100 процентов).

UPDATE Salespeople

309

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

SET comm =comm + (comm• .2) WHERE 3000 <

(SELECT SUM (amt) FROM Orders

WHERE snum =Salespeople.snum) AND comg + (comm•.2) < 1.0;

Существуют другие успешные способы решения этих проблем.

ГЛАВА 17

1.CREATE TABLE Customers (cnum integer,

cname

char(10),

city

char(10).

rating

intege г,

snum

integer);

2. CREATE INDEX Datesearch ON Orders(odate);

(В примерах используются произвольные имена индексов.)

З. CREATE UNIQUE INDEX Onumkey ON Orders (onum); 4. CREATE INDEX Mydate ON Orders (snum, odate); 5. CREATE UNIQUE INDEX Combination ON

Customers (snum, rating);

ГЛАВА 18

1.CREATE TABLE Orders

(onum

integer NOT NULL PRIMARY КЕУ,

amt

decimal,

 

 

adate

date

NOT

NULL,

cnum

integer

NOT

NULL,

snum

integer

NOT

NULL,

UNIQUE

(snum,

cnum));

 

или

 

 

 

 

CREATE TABLE Orders

 

 

(onum

integer

NOT

NULL UNIQUE,

amt

decimal,

 

 

odate

date

NOT

NULL,

cnum

integer

NOT

NULL,

snum

integer

NOT

NULL.

UNIQUE

(snum, cnum));

Первый вариант ответа является более предпочтительным.

2. CREATE TABLE Salespeople

(snum

integer NOT NULL PRIMARY КЕУ,

310

 

 

 

 

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

 

 

sname

char(15) СНЕСК (sname BEТWEEN 'АА' AND 'MZ'),

city

char(15),

 

DEFAULT = .10);

comm

decimal

NOY

NULL

з. CREATE TABLE Orders

 

 

 

(onum

integer

NOT

NULL,

 

amt

decimal,

 

 

 

odate

date,

 

 

 

cnum

integer

NOT NULL,

 

snum

integer

NOT NULL,

 

СНЕСК

((cname > sname) AND

(onum > cnum))):

ГЛАВА 19

1.CREATE TABLE Cityorders

(onum

integer NOT NULL PRIMARY КЕУ,

amt

decimal,

cnum

integer,

snum

integer,

city

char(15),

FOREIGN

КЕУ (onum,amt,snum)

REFERENCES Orders (onum, amt, snum)

FOREIGN

КЕУ

(cnum, city)

REFERENCES

Customers (cnum, city) ):

2.CREATE TABLE Orders

(onum

integer

NOT

NULL,

amt

decimal,

 

 

odate

date,

 

 

cnum

integer

NOT

NULL,

snum

integer,

 

 

prev

integer,

 

 

UNIOUE

(cnum, onum),

 

FOREIGN

КЕУ (cnum,

prev) REFERENCES Orders (cnum, onum) ): 9

ГЛАВА20

1.CREATE VIEW Highratings AS SELECT •

FROM Customers WHERE rating =

(SELECT МАХ (rating) FROM Custome rs);

2.CREATE VIEW Citynumber

AS SELECT city, COUNT (DISTINCT snum)

FROM Salespeople

GROUP ВУ ci ty;

311

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