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

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

5.1. SELECT НАЗВАНИЕ

FROM J

WHERE НОМЕР_ИЗДЕЛИЯ IN

(SELECT НОМЕР_ИЗДЕЛИЯ

FROM SPJ

WHERE НОМЕР_ПОСТАВЩИКА =’S1’);

5.2. SELECT DISTINCT ЦВЕТ

FROM P

WHERE НОМЕР_ДЕТАЛИ IN

(SELECT НОМЕР_ДЕТАЛИ

FROM SPJ

WHERE НОМЕР_ПОСТАВЩИКА='Sl');

5.3. SELECT DISTINCT Н ОМЕР_ДЕТАЛИ

FROM SPJ

WHERE НОМЕР_ИЗДЕЛИЯ IN

(SELECT НОМЕР_ИЗДЕЛИЯ

FROM J

WHERE ГОРОД = 'Лондон');

5.4. SELECT DISTINCT НОМЕР_ИЗДЕЛИЯ

FROM SPJ

WHERE НОМЕР_ДЕТАЛИ IN

(SELECT НОМЕР_ДЕТАЛИ

FROM SPJ

WHERE НОМЕР_ПОСТАВЩИКА='Sl');

5.5. SELECT DISTINCT НОМЕР_ПОСТАВЩИКА

FROM SPJ

WHERE НОМЕР—ДЕТАЛИ IN

(SELECT НОМЕР_ДЕТАЛИ

FROM SPJ

WHERE НОМЕР_ПОСТАВЩИКА IN

(SELECT НОМЕР_ПОСТАВЩИКА

FROM SPJ

WHERE НОМЕР_ДЕТАЛИ IN

(SELECT НОМЕР—ДЕТАЛИ

FROM Р

WHERE ЦВЕТ = 'Красный')));

5.6. SELECT НОМЕР—ПОСТАВЩИКА

FROM S

WHERE СОСТОЯНИЕ <

(SELECT СОСТОЯНИЕ

FROM S

WHERE НОМЕР_ПОСТАВЩИКА = 'Sl');

5.7. SELECT DISTINCT НОМЕР_ПОСТАВЩИКА

FROM SPJ SPJX

WHERE НОМЕР_ДЕТАЛИ ='Р1’

КОЛИЧЕСТВО >

(SELECT AVG (КОЛИЧЕСТВО)

FROM SPJ SPJY

WHERE НОМЕР_ДЕТАЛИ = 'Р1'

AND SPJY.НОМЕР_ИЗДЕЛИЯ=SPJX.

НОМЕР_ИЗДЕЛИЯ);

5.8 SELECT DISTINCT НОМЕР_ДЕТАЛИ

FROM SPJ

WHERE EXISTS

(SELECT *

FROM J

WHERE НОМЕР_ИЗДЕЛИЯ = SPJ. НОМЕР—ИЗДЕЛИЯ

AND ГОРОД = 'ЛОНДОН');

5.9. SELECT DISTINCT SPJX. HOMEP_ИЗДЕЛИЯ

FROM SPJ SPJX

WHERE EXISTS

(SELECT *

FROM SPJ SPJY

WHERE SPJY. HOMEP_ДЕТАЛИ=SPJX. HOMEP_ДЕТАЛИ

AND SPJY. НОМЕР_ПОСТАВЩИКА = 'Sl');

5.10. SELECT НОМЕР_ИЗДЕЛИЯ

FROM J

WHERE NOT EXISTS

(SELECT *

FROM SPJ

WHERE НОМЕР_ИЗДЕЛИЯ = J. НОМЕР_ИЗДЕЛИЯ

AND НОМЕР_ДЕТАЛИ IN

(SELECT НОМЕР_ДЕТАЛИ

FROM P

WHERE ЦВЕТ = 'Красный')

AND НОМЕР_ПОСТАВЩИКА IN

(SELECT НОМЕР_ПОСТАВЩИКА

FROM S

WHERE ГОРОД = 'Лондон'));

5.11. SELECT НОМЕР_ИЗДЕЛИЯ J

FROM SPJ SPJX

WHERE NOT EXISTS

(SELECT *

FROM SPJ SPJY

WHERE SPJY. НОМЕР_ИЗДЕЛИЯ =

SPJX.НОМЕР_ИЗДЕЛИЯ

AND SPJY. НОМЕР_ПОСТАВЩИКА ù = ‘S1’);

5.12. SELECT DISTINCT НОМЕР_ДЕТАЛИ

FROM SPJ SPJX

WHERE NOT EXISTS

(SELECT *

FROM J

WHERE ГОРОД == 'Лондон'

5.13. SELECT DISTINCT НОМЕР_ПОСТАВЩИКА

FROM SPJ SPJX

WHERE EXISTS

(SELECT НОМЕР_ДЕТАЛИ

FROM P

WHERE NOT EXISTS

(SELECT НОМЕР_ИЗДЕЛИЯ

FROM J

WHERE NOT EXISTS

(SELECT *

FROM SPJ SPJZ

WHERE SPJZ. НОМЕР_ПОСТАВЩИКА = SPJX. HOMEP_ ПОСТАВЩИКА

AND SPJZ. НОМЕР_ДЕТАЛИ =

P. НОМЕР_ДЕТАЛИ

AND SPJZ. НОМЕР_ИЗДЕЛИЯ=

J. НОМЕР_ИЗДЕЛИЯ)));

Это довольно сложное предложение SELECT можно перефразировать следующим образом: «Выдать всех поставщиков (SPJX. НОМЕР_ПОСТАВЩИКА), таких, что существует некоторая деталь (Р. НОМЕР_ДЕТАЛИ), такая, что не существует какого-либо изделия (J. НОМЕР_ИЗДЕЛИЯ), такого, что данный поставщик не поставляет данную деталь для этого изделия». Иными словами, требуется выдать таких поставщиков, что существует некоторая деталь, которую они поставляют для всех изделий. Заметим, что «SELECT НОМЕР_ДЕТАЛИ FROM...» и «SELECT НОМЕР_ИЗДЕЛИЯ FROM...» используются в двух вхождениях квантора EXISTS. При этом использование «SELECT*» не было бы некорректным, но «SELECT НОМЕР_ДЕТАЛИ», например, представляется более близким к интуитивной формулировке — должна существовать некоторая деталь, идентифицируемая номером детали, а не просто строка в таблице деталей.

5.14 SELECT DISTINCT НОМЕР_ИЗДЕЛИЯ

FROM SPJ SPJX

WHERE NOT EXISTS

(SELECT НОМЕР_ДЕТАЛИ

FROM SPJ SPJY

WHERE SPJY. НОМЕР—ПОСТАВЩИКА = 'Sl'

AND NOT EXISTS

(SELECT *

FROM SPJ SPJZ

WHERE SPJZ. НОМЕР_ДЕТАЛИ = SPJY.

НОМЕР_ДЕТАЛИ

AND SPJZ. НОМЕР_ИЗДЕЛИЯ = SPJX.

НОМЕР_ИЗДЕЛИЯ));

5.15. Выдать номера изделий, использующих только детали, поставляемые поставщиком S1.

5.16. Выдать номера изделий, для которых поставщик S1 поставляет несколько деталей каждого из поставляемых им типов.

5.17. Выдать номера деталей, таких, что по крайней мере несколько деталей каждого типа, которые в них используются, поставляется для них поставщиком S1.

5.18. Выдать номера изделий, детали для которых поставляет каждый поставщик, поставляющий какую-либо красную деталь.

5.19. SELECT COUNT (DISTINCT НОМЕР—ИЗДЕЛИЯ)

FROM SPJ

WHERE НОМЕР_ПОСТАВЩИКА == 'S1';

5.20. SELECT SUM (КОЛИЧЕСТВО)

FROM SPJ

WHERE НОМЕР_ДЕТАЛИ = 'P1’

AND НОМЕР_ПОСТАВ ЩИКА = 'S1';

5.21. SELECT НОМЕР_ДЕТАЛИ, НОМЕР_ИЗДЕЛИЯ,

SUM (КОЛИЧЕСТВО)

FROM SPJ

GROUP BY НОМЕР_ДЕТАЛИ, НОМЕР_ИЗДЕЛИЯ;

5.22. SELECT НОМЕР_ИЗДЕЛИЯ

FROM J

WHERE ГОРОД =(SELECT MIN (ГОРОД) FROM J);

5.23. SELECT НОМЕР_ИЗДЕЛИЯ

FROM SPJ

WHERE НОМЕР_ДЕТАЛИ = 'PI'

GROUP BY НОМЕР_ИЗДЕЛИЯ

HAVING AVG (КОЛИЧЕСТВО) >

(SELECT MAX (КОЛИЧЕСТВО)

FROM SPJ

WHERE НОМЕР_ ИЗДЕЛИЯ = 'J1');

5.24. SELECT DISTINCT НОМЕР_ПОСТАВЩИКА

FROM SPJ SPJX

WHERE НОМЕР_ДЕТАЛИ = 'PI'

AND КОЛИЧЕСТВО >

(SELECT AVG (КОЛИЧЕСТВО)

FROM SPJ SPJY

WHERE НОМЕР_ДЕТАЛИ ='Р1’

AND SPJY.НОМЕР_ИЗДЕЛИЯ=SPJX.

НОМЕР_ИЗДЕЛИЯ);

5.25. SELECT ГОРОД FROM S

UNION

SELECT ГОРОД FROM P UNION

SELECT ГОРОД FROM J

ORDER BY 1;

5.26.

Красный Зеленый Голубой


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: