SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 30.01.2012 03:22:27

Маша95
Участник
Зарегистрирован: 30.01.2012
Сообщений: 4

Запросы из 4 таблиц

Есть база данных реализующая работу банка
1.Клиент
   id_k   //ид клиента
   ФИО
2.Счет
   id_ch 
   id_kl   //ид клиента
   id_fl   //ид филиала
   количество  //кол-во счетов
3.Филиал
   id_f   //ид филиала
   id_r   //ид района
4.Район
   id_r   //ид района
   Название

По данной базе нужно составить 4 запроса
1. Филиалы, клиенты которых не имеют счетов в других филиалах.
2. Клиентов, которые имеют счета во всех филиалах данного банка.
3. Клиентов, которые имеют только один счет в одном филиале банка.
4. Клиенты, которые имеют счета в нескольких филиалах банка, расположенных только в одном районе.

смогла сделать третий запрос
SELECT Клиент.ФИО
FROM Филиал INNER JOIN (Клиент INNER JOIN Счет ON Клиент.id_k = Счет.id_kl) ON Филиал.id_f = Счет.id_fl
GROUP BY Клиент.ФИО, Счет.количество
HAVING (((Счет.количество)=1) AND ((Count(Филиал.id_f))=1));

по поводу второго думала подзапросом получить общее кол-во филиалов, и сравнить с количеством записей в таблице Счет у каждого клиента, но сосем не понимаю
а по поводу 1 и 4 вообще идей нету

ПОМОГИТЕ ПОЖАЛУЙСТА!!!!!

Отредактированно Маша95 (30.01.2012 03:42:26)

Неактивен

 

#2 30.01.2012 05:18:24

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Запросы из 4 таблиц

Никак с интуита задания? Видел там что-то похожее.

Заранее предупреждаю - на сто процентов не уверен (проверял, но мало ли), поэтому проверьте очень тщательно и отпишитесь пожалуйста о результате.

Создание таблиц:
create table client(id integer, name varchar(255));
create table filial(id integer, rayon_id integer, name varchar(255));
create table shet(id integer, client_id integer, filial_id integer);
create table rayon(id integer);


Наполнение данными:

insert into client values(1,'Ivan'),(2,'Petr'),(3,'Sidor'),(4,'Ignat');
insert into rayon values(1),(2);
insert into filial values(1,1,'f1'),(2,1,'f2'),(3,2,'f3'),(4,1,'f4');
insert into shet values(1,1,1),(2,2,1),(3,2,2),(4,3,1),(5,3,2),(6,3,3),(7,4,4);



1) SELECT * FROM filial f WHERE id = (SELECT DISTINCT s.filial_id FROM shet s WHERE s.filial_id=f.id GROUP BY filial_id HAVING max( (SELECT count(*) FROM shet WHERE filial_id <> f.id AND client_id=s.client_id) )=0);
 


2) SELECT c.* FROM client c WHERE (SELECT count(distinct filial_id) from shet where client_id=c.id)=(SELECT count(*) FROM filial );

3) SELECT * FROM client INNER JOIN (SELECT client_id AS id FROM shet GROUP BY client_id HAVING count(DISTINCT filial_id) = 1 ) sub_table USING(id);

4) SELECT client.* FROM client INNER JOIN (SELECT client_id as id FROM shet s GROUP BY client_id HAVING count( DISTINCT (SELECT rayon_id FROM filial WHERE id=s.filial_id) )=1) sub_table USING(id);
 


Не уверен, что запросы построены самым оптимальным образом, но лучше сперва убедиться, что эти работают, а после уже улучшать.

Отредактированно deadka (30.01.2012 06:34:46)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 30.01.2012 13:43:49

Маша95
Участник
Зарегистрирован: 30.01.2012
Сообщений: 4

Re: Запросы из 4 таблиц

все отлично работает
СПАСИБО ВАМ ОГРОМНОЕ ПРИОГРОМНОЕ
Вы помогли мне сохранить серебряную медаль в школе
(вообще шла на золотую но я пару раз погуляла с парнем дочки училки по русскому(который мой друг детства) и она мне обламала золотую)
а теперь и препод по информатике почему то придирается,
так что еще раз Вам ОГРОМНОЕ ПРИОГРОМНОЕ СПАСИБО

а препод не дурак, тут неплохой подвох спрятан
я когда проверяла запросы, заметила что либо 1 либо 3 не работали,
а потом меня прям аж осенило, что если есть клиент у которого есть счет во всех филиалах то не будет выполнятся первый запрос, потому что выполнение 3го запроса противоречит выполнению 1го запроса, блин поняла бы это раньше наверное сама бы справилась


СПАСИБОЧКИ smile

Неактивен

 

#4 30.01.2012 13:49:51

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Запросы из 4 таблиц

Ничего себе школа, где базы данных проходят и просят такие запросы составлять. Если не секрет, что это за школа такая, где находится smile?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 30.01.2012 13:55:43

Маша95
Участник
Зарегистрирован: 30.01.2012
Сообщений: 4

Re: Запросы из 4 таблиц

в Питере на приморской, у меня друг работает созданием всякого на php, и там вроде тоже без sql далеко не уедешь, он мне обьяснил как базу более менее правильную создать, а с запросами не справился, говорит что в жизни редко используют такие жесткие запросы

Неактивен

 

#6 30.01.2012 14:00:12

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Запросы из 4 таблиц

А школа обычная дворовая или ФМШ или лицей какой? Ну или со спецуклоном каким? Что касается запросов и базы - похожие запросы составляют студенты в технических университетах, обычно на старших курсах в рамках курса базы данных, я потому и удивился, что такое школьникам задали.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 31.01.2012 00:01:22

Маша95
Участник
Зарегистрирован: 30.01.2012
Сообщений: 4

Re: Запросы из 4 таблиц

не обычная школа при том что не самая сложная на районе и франсузким, с расформированием после 9 класса по профильным классам

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson