Следующие ответы не обязательно являются единственно возможными.
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.
Красный Зеленый Голубой |