Обновление данных
Увеличить тираж всех выпусков, выходящих с июня 2011 года, на 1000 экземпляров:
UPDATE copies SET copies.copies =(copies+1000) WHERE id_publication = (SELECT id_publication FROM publications WHERE date_publ>= '2011-06-01');
Изменить id приложения, в котором находилась статья под названием «Встреча с авторами», на начение 5:
UPDATE id_inclusion SET title=5 WHERE id_inclusion = (SELECT id_inclusion FROM inclusion_article, articles WHERE inclusion_article.id_article=articles.id_article AND articles.title='Встреча с авторами');
Изменить ответственного за оборудование, которое имеет название "Сканер EPSON PERFECTION V33" на того, у которого должность “Ответственный секретарь"^
UPDATE equipment SET id_worker = (SELECT worker_workposition.id_worker FROM worker_workposition WHERE id_workposition IN (SELECT id_workposition FROM workpositions WHERE title='корреспондент')) WHERE equipment.title='Сканер EPSON PERFECT';
Изменить автора фото под названием "Браконьеры" на фамилию и инициалы корреспондента газеты:
UPDATE images SET author=(SELECT CONCAT(surname, ' ', SUBSTR(name, 1, 1), '. ',SUBSTR(patronymic, 1, 1), '. ') FROM workers,
worker_workposition, workpositions WHERE worker_workposition.id_worker=workers.id_worker AND worker_workposition.id_workposition=workpositions.id_workposition AND workpositions.title='корреспондент') WHERE title='Браконьеры';
Обновить email, телефон, адрес организации, которая является типографией и которая осуществляет все виды печати:
UPDATE organisations SET adress='г.Псков, ул. Льва Толстого, д.25/1'
WHERE id_organisation IN (SELECT id_printer FROM printers WHERE print_type='все виды печати');
Выборки
Вывести ФИОработника, который чаще всех был ответственным за выпуск номера газеты:
SELECT CONCAT(surname, ' ', name, ' ',patronymic), count(publications.id_duty) as c FROM workers, publications WHERE publications.id_duty=workers.id_worker
GROUP BY publications.id_duty HAVING c = (SELECT count(id_duty) as cc FROM publications GROUP BY id_duty HAVING cc=3);
Найти средний тираж газеты:
SELECT (max(copies)+min(copies))/2 FROM publications;
Вывести название вида самого частовыпускаемого вкладыша:
SELECT id_type_inclusion, count(id_type_inclusion) as c FROM publication_inclusion GROUP BY id_type_inclusion ORDER BY DESC LIMIT 1;
Вывести название и контакты компании, которой был отправлен хотя бы один документ по факсу:
SELECT title, adress, phone, email FROM organisations WHERE id_organisation IN (SELECT id_organisation FROM outerdoc_organisation WHERE id_outerdocumentIN(SELECT id_outerdocument FROM outerdocuments WHERE send_or_get='Отправлен' AND type_send='Факс'));
Вывести описание статьи и описание изображения, у которых одинаковые названия:
SELECT articles.*, images.* FROM articles, images, image_article
WHERE articles.id_article=image_article.id_article
AND images.id_image=image_article.id_image
AND images.title=articles.title;
Вывести автора самой большой статьи и тип самого большого вкладыша:
(SELECT author FROM articles GROUP BY simbols HAVING max(simbols) ORDER BY DESC LIMIT 1) UNION (SELECT title FROM type_inclusions WHERE id_type_incl IN (SELECT id_type_incl FROM inclusions GROUP BY pages HAVING max(pages) ORDER BY DESC LIMIT 1));
Найти самую дорогостоящую закупку, показать статью расходов, в которую входит эта закупка, а также годовой бюджет, рассчитанный на эту статью расходов:
SELECT costs.title, costs.amount, expenseitems.title, expenseitems.year_budget FROM expenseitems, costs
WHERE costs.id_expenseitem=expenseitems.id_expenseitem GROUP BY costs.amount HAVING max(costs.amount) ORDER BY costs.amount DESC LIMIT
1;
Найти ФИО и должность таких работников, которые работали в период с 20 января 2010 года по с 20 января 2011 и не уезжали в это время в командировки:
SELECT CONCAT(surname, ' ', name, ' ',patronymic), workpositions.title FROM workers, worker_workposition, contracts, workpositions
WHERE workers.id_worker=worker_workposition.id_worker AND worker_workposition.id_contract=contracts.id_contract
AND worker_workposition.id_workposition=workpositions.id_workposition
AND contract_start BETWEEN '2010-01-20' AND '2011-01-20' AND contract_end BETWEEN '2010-01-20' AND '2011-01-20'
AND workers.id_worker NOT IN (SELECT id_worker FROM worktrips WHERE trip_start BETWEEN '2010-01-20' AND '2011-01-20');
Вывести все даты и типы отпусков, в которые уходил редактор газеты:
SELECT CONCAT(holidays.start_holiday, ' ', holidays.end_holiday), holidays.type_holiday FROM holidays
WHERE id_worker = (SELECT id_worker FROM worker_workposition WHERE id_workposition = (SELECT id_workposition FROM workpositions WHERE title='редактор'));
Найти ФИО таких работников, которые получали 3 поощрения:
SELECT CONCAT(surname, ' ', name, ' ',patronymic), COUNT(workers_encouragements.id_worker) as c FROM workers, workers_encouragements
WHERE workers_encouragements.id_worker=workers.id_worker GROUP BY workers_encouragements.id_worker
HAVING c = (SELECT COUNT(id_worker) FROM workers_encouragements GROUP BY id_worker HAVING id_worker=3);
Выводы
База данных для редакции газеты «Одуванчик» создана: созданы таблицы, в них помещены данные. Также данные в таблицах возможно обновлять, что и было проверено посредством тестовых обновлений.