Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > SQL запросы


Автор: Frostss 28.5.2011, 14:29
помогите пожалуйста, избавиться от вложенных селектов в двух запросах:

1 запрос: Найти сотрудников, работавших в должности начальника отдела, и
не работавших в должности зам. директора.

SELECT * 
FROM [worker] 
WHERE [id_P] IN ( SELECT [id_P] 
 FROM [Post]
 WHERE [название] = 'начальник отдела' ) AND 
NOT IN ( SELECT [id_P] 
 FROM [Post]
 WHERE [название] = 'зам. директора' )  


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

SELECT b.*
FROM [Otdel] b
INNER JOIN
(SELECT id_O, COUNT(название) AS Naz
   FROM [Post]
   WHERE [название] = 'зам начальника'
   GROUP BY [id_O]  ) m
ON b.id_O = m.id_O AND m.Naz = 2



Сущности: Отдел (Otdel), Должность (Post), Сотрудник (worker).

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

Otdel (id_O,name)
Post (id_P, name, id_O)
worker (id_W,  so-name, name, дата приема, дата увольнения, id_P)

create table Otdel(
id_O int unsigned not null auto_increment key,
name char(6));

create table Post (
id_P int unsigned not null auto_increment key,
name char(30),
id_O integer);

create table worker (
id_W int unsigned not null auto_increment key,
so-name char(30),
name char(20),
date_П DATE,
date_У DATE,
id_D integer);


Автор: Zloxa 29.5.2011, 21:39
Зти задания даны вам либо для того чтобы вы лучше усвоили агрегацию, либо для того, чтобы проконтролировать степень усвоения вами материала. Любой, написавший Вам запрос, сделает вам тем самым медвежью услугу.  smile 

http://segfault.kiev.ua/smart-questions-ru.html#homework

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)