Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQL запрос 
:(
    Опции темы
Frosts
Дата 16.5.2011, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.3.2011

Репутация: нет
Всего: нет




Запросы для создания таблиц я составила(надеюсь правильно), но никак не получается сделать два запроса, помогите пожалуйста

Сущности: Отдел, Должность, Сотрудник, Кадровые перемещения (кто, на какой должности, даты приема и увольнения).

Создание нормализованной БД:

ОтделOtdel (id_O, название)
ДолжностьPost (id_P, название, id_O)
Сотрудникworker   (id_W, фамилия, имя,  отчество, дата приема, дата увольнения, id_P)

create table Otdel(
id_O  int unsigned not null auto_increment key,
название char(6));

create table Post (
id_P int unsigned not null auto_increment key,
название char(30),
id_O integer);

create table worker (
id_W int unsigned not null auto_increment key,
фамилия char(30),
имя char(20),
отчество char(30),
дата_П  DATE,
дата_У DATE,
id_D integer);

1 запрос
Найти всех сотрудников, уволенных из отдела маркетинга в марте 2010 г.

2 запрос
Вывести список отделов, в которых у начальника ровно два заместителя.

PM MAIL   Вверх
Akina
Дата 16.5.2011, 21:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Frosts @  16.5.2011,  19:49 Найти цитируемый пост)
надеюсь правильно

Не надейтесь. Кириллица в именах полей.

Цитата(Frosts @  16.5.2011,  19:49 Найти цитируемый пост)
Найти всех сотрудников, уволенных из отдела маркетинга в марте 2010 г.

Условия отбора по двум полям. Использовать Where 

Цитата(Frosts @  16.5.2011,  19:49 Найти цитируемый пост)
Вывести список отделов, в которых у начальника ровно два заместителя.

Использование отбора по агрегированному полю. Использовать Having. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Frosts
Дата 17.5.2011, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.3.2011

Репутация: нет
Всего: нет



Первый запрос вот так выглядеть может?

Select w.фамилия 
from post p
join Otdel o on (o.название='маркет' and o.id_O=p.id_O)
join worker w on (p.id_w=w.id_w and year(w.дата_У)=2010)
PM MAIL   Вверх
Akina
Дата 17.5.2011, 21:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Frosts @  17.5.2011,  19:41 Найти цитируемый пост)
Первый запрос вот так выглядеть может?

Не знаю... условия o.название='маркет' и year(w.дата_У)=2010 могут быть помещены как в условия связывания (как в запросе), так и в условия отбора (секция where).
Это даёт 4 разных варианта запроса (а с учётом двух разных возможных порядков связывания - 8 вариантов), причём в каждом из них реализована своя логика, не такая, как в остальных, и они в общем случае будут давать разные результаты.
Какой из вариантов нужен - решайте самостоятельно.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Frosts
Дата 17.5.2011, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.3.2011

Репутация: нет
Всего: нет



спасибо большое, натолкните, пожалуйста, по конкретнее во втором запросе, я просто даже не знаю с чего начать....
нужно ли создавать новую таблицу для замов, или достаточно существующих?
PM MAIL   Вверх
Akina
Дата 18.5.2011, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Frosts @  17.5.2011,  22:20 Найти цитируемый пост)
я просто даже не знаю с чего начать

Я тоже. Структура - кривая, и непонятно, с какого конца за неё хвататься.
Как определить, что работник - начальник или зам. начальника? хрен знает...

Но если предположить, что это прописано прямым текстом в должности - то:
- отбираем записи, где должность = начальник либо замначальника (WHERE)
- группируем по отделу (GROUP BY), считаем количество начальников и замов по отделу (COUNT, 2 штуки)
- отбираем группы (HAVING), где ровно 1 начальник и ровно 2 зама.

Всё.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1262 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.