![]() |
|
Модераторы: skyboy |
![]()
|
|
| Frosts |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 запрос Вывести список отделов, в которых у начальника ровно два заместителя. |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Не надейтесь. Кириллица в именах полей.
Условия отбора по двум полям. Использовать Where
Использование отбора по агрегированному полю. Использовать Having. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| Frosts |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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) |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Не знаю... условия o.название='маркет' и year(w.дата_У)=2010 могут быть помещены как в условия связывания (как в запросе), так и в условия отбора (секция where). Это даёт 4 разных варианта запроса (а с учётом двух разных возможных порядков связывания - 8 вариантов), причём в каждом из них реализована своя логика, не такая, как в остальных, и они в общем случае будут давать разные результаты. Какой из вариантов нужен - решайте самостоятельно. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Frosts |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.3.2011 Репутация: нет Всего: нет |
спасибо большое, натолкните, пожалуйста, по конкретнее во втором запросе, я просто даже не знаю с чего начать....
нужно ли создавать новую таблицу для замов, или достаточно существующих? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Я тоже. Структура - кривая, и непонятно, с какого конца за неё хвататься. Как определить, что работник - начальник или зам. начальника? хрен знает... Но если предположить, что это прописано прямым текстом в должности - то: - отбираем записи, где должность = начальник либо замначальника (WHERE) - группируем по отделу (GROUP BY), считаем количество начальников и замов по отделу (COUNT, 2 штуки) - отбираем группы (HAVING), где ровно 1 начальник и ровно 2 зама. Всё. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |