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




Запросы на реляционной алгебре

(обозначаю промежуточные множества буквами, чтобы запись умещалась)

1)

В =

А=

С=

()

2)

А=

В=

3)

 

A=

B=

4)

А=

В=

С=

D=

5)

 

А=

В=

С=

θ={ }

θ – условие, накладываемое на выбор элементов

6)

θ={ }

 

A=

 

Создание базы данных

1)

Create table town (id int not null auto_increment, name text, primary key(id));

2)

Create table postavshik (id int not null auto_increment, name text, town_id int, primary key(id), foreign key (town_id) references town(id));

3)

Create table project (id int not null auto_increment, name text, town_id int, primary key(id), foreign key (town_id) references town(id));

4)

Create table detail (id int not null auto_increment, name text, primary key(id));

5)

Create table postavka (id int not null auto_increment, id_post int,date_p date, primary key(id), foreign key (id_post) references postavshik(id));

6)

Create table detail_postavka (id int not null auto_increment, id_postavka int, id_detail int, number int, primary key(id),foreign key (id_postavka) references postavka(id), foreign key (id_detail) references detail(id));

7)

Create table detail_project (id int not null auto_increment, id_project int,id_detail int, number int, primary key(id),foreign key (id_project) references project(id),foreign key (id_detail) references detail(id));

 

Запросы на языке SQL

1) получить все номера деталей, поставляемых поставщиком из заданного города;

 

Надо задать название города.

 

SELECT name FROM detail WHERE detail.id in

(SELECT id_detail FROM detail_postavka WHERE detail_postavka.id_postavka in

(SELECT postavka.id FROM postavka INNER JOIN postavshik ON postavka.id_post=postavshik.id AND postavshik.town_id in
(SELECT id FROM town WHERE town.name=”название города”)));

 

2) получить номера деталей, поставляемых для всех проектов, обеспечиваемых поставщиком из того же города, где размещен проект;

SELECT name FROM detail WHERE detail.id in

(SELECT id_detail FROM detail_project WHERE detail_project.id_project in

(SELECT project.id FROM project INNER JOIN postavshik ON postavshik.town_id=project.town_id));

 

 

3) получить список всех поставщиков, поставляющих одну и ту же деталь для всех проектов;

Надо указать название детали.

 

SELECT name FROM postavshik WHERE postavshik.id in

(SELECT postavka.id_post from postavka INNER JOIN detail_postavka ON postavka.id=detail_postavka.id_postavka AND detail_postavka.id_detail in

(SELECT id FROM detail WHERE detail.name=”название детали”));

 

 

4) получить список проектов, использующих по крайней мере одну деталь, производимую заданным поставщиком;

SELECT name FROM project WHERE project.id in

(SELECT id_project FROM detail_project WHERE detail_project.id_detail in

(SELECT id_detail FROM detail_postavka WHERE detail_postavka.id_postavka in

(SELECT id FROM postavka WHERE postavka.id_post in

(SELECT id FROM postavshik WHERE postavshik.name=”заданный поставщик”))));

 

 

5) получить список троек (номер детали, количество, поставщик), аналогичных деталям, поставляемым заданным поставщиком;

SELECT postavshik.name, detail.name, detail_postavka.number FROM postavshik, detail,detail_postavka,postavka WHERE postavshik.id= postavka.id_post AND detail.id=detail_postavka.id_detail AND detail_postavka.id_postavka=postavka.id AND detail_postavka.id_detail in

(SELECT id_detail FROM detail_postavka WHERE detail_postavka.id_postavka in

(select id from postavka where postavka.id_post in

(select id from postavshik where postavshik.name=”заданное название”)));

 

получить список проектов, которые обеспечиваются деталями от одного поставщика.

SELECT project.name,count(postavshik.id) FROM project,postavshik,detail_project,detail_postavka,postavka WHERE

project.id=detail_project.id_project AND detail_project.id_detail=detail_postavka.id_detail AND detail_project.number=detail_postavka.number AND detail_postavka.id_postavka=postavka.id AND postavka.id_post =postavshik.id
GROUP BY project.name HAVING count(postavshik.id)=1;

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-07 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: