Порядок выполнения работы. 2.1. Подсчитать количество поставщиков, которые обеспечивают данный проект

2.1. Подсчитать количество поставщиков, которые обеспечивают данный проект:

SELECT count(*)

FROM Поставщики

WHERE Поставщики.Номер_поставщика IN

(SELECT Поставки.Номер_поставщика FROM Поставки,Проекты WHERE Проекты.Номер_проекта=Поставки.Номер_проекта AND Проекты.Наименование="< Наименование_проекта >" );

Данную задачу можно выполнить только с использованием вложенных запросов. Здесь внутренний запрос получает множество номеров поставщиков, обеспечивающих определенный проект. При этом в результате внутреннего запроса номера поставщиков могут дублироваться, так как один и тот же поставщик может осуществлять несколько поставок для одного и того же проекта. В задании же необходимо подсчитать количество различных поставщиков. Для этого внешний запрос выбирает из таблицы «Поставщики» номера только тех поставщиков, которые входят во множество, получаемое внутренним запросом. Принадлежность к множеству проверяется при помощи предиката IN. Количество выбранных номеров подсчитывается при помощи агрегатной функции count(*).

2.2. В предыдущем запросе результат внутреннего запроса являлся результатом условного соединения таблиц «Поставки» и «Проекты». Для выполнения той же операции можно воспользоваться специальным выражением IINNER JOIN.

SELECT count(*)

FROM Поставщики

WHERE Поставщики.Номер_поставщика IN

(SELECT Поставки.Номер_поставщика FROM Поставки INNER JOIN Проекты ON ( Проекты.Номер_проекта=Поставки.Номер_проекта AND Проекты.Наименование="< Наименование_проекта >" ));

2.3.На основе предыдущего запроса несложно написать запрос, который будет выводить информацию о количестве поставщиков для всех проектов.

SELECT P.Наименование, Count(*)

FROM Проекты AS P, Поставщики

WHERE Поставщики.Номер_поставщика IN

(SELECT Поставки.Номер_поставщика FROM Поставки,Проекты AS Projects WHERE ( Projects.Номер_проекта=Поставки.Номер_проекта AND Projects.Наименование = P.Наименование ))

GROUP BY P.Наименование;

Внешний запрос создает декартово произведение таблиц «Проекты» и «Поставщики», из которого по полю «Номер_поставщика» при помощи внутреннего запроса отбираются только те пары Проект-Поставщик, для которых существует запись в таблице «Поставки» с соответствующим номером поставщика.

2.4.Аналогично можно подсчитать количество различных используемых деталей для каждого проекта:

SELECT P.Наименование, Count(*)

FROM Проекты AS P, Детали

WHERE Детали.Номер_детали IN

(SELECT Поставки.Номер_детали FROM Поставки, Проекты AS Projects WHERE ( Projects.Номер_проекта = Поставки.Номер_проекта AND Projects.Наименование = P.Наименование ))

GROUP BY P.Наименование;


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



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