Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Новости сайта "Упражнения по SQL" (http://www.sql-ex.ru)


Информационный Канал Subscribe.Ru

Новости сайта "Упражнения по SQL (http://www.sql-ex.ru)" Выпуск 34 (7 мая 2005 г.)

http://www.sql-ex.ru

Новым посетителям сайта

Сайт посвящен изучению языка, с помощью которого осуществляется взаимодействие с реляционными (и не только) СУБД. Суть обучения состоит в выполнении заданий на написание запросов к учебным базам данных; при этом система контролирует правильность выполнения заданий. В настоящее время реализованы все операторы подъязыка манипуляции данными (DML), которые включают в себя оператор извлечения данных SELECT, а также операторы модификации данных - INSERT, DELETE и UPDATE.

Мы надеемся, что справочного материала сайта окажется достаточно для самостоятельного обучения. Кроме того, свои решения вы можете обсудить на форуме сайта. Опытных же специалистов приглашаем проверить (продемонстрировать) свое мастерство и принять участие в соревновании, обеспечиваемом рейтинговой системой учета времени выполнения заданий. Фактически, рейтинг ведется на втором этапе тестирования, который начинается сейчас после решения 59-ти задач первого этапа. При подсчете рейтинга каждого участника отбрасывается один самый худший показатель среди всех решенных им упражнений.

Имеется возможность получить сертификат по SQL DML при выполнении определенного количества заданий.


C Днем Победы!

Новости сайта

§ Выставлена новая задача, которая заменила 67-ю. Я все же решил последовать совету Shurgenz и не менять 66-ю, учитывая еще и то, что потери времени на 67-ой задаче минимальны.

§ Замечено прохождение не вполне верных решений. В результате были добавлены данные для проверки задач 18 (сообщение gyuol) и 39 (KAI).

§ Я переписал некоторые статьи FAQ, т.к. кое-что устарело, а кое-что новое накопилось.

§ Число подписчиков - 2079

Число участников рейтинга - 3097

Число участников второго этапа - 308

Лучшие результаты (ТОР 20)

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 LastSolved LastVisit
1 Колосов А.С. (KAS) 136 137 20 308 25 3.404 11 Mar 2005 05 May 2005
2 Кувалкин К.С. (Cyrilus) 136 137 20 308 102 4.885 06 Mar 2005 06 May 2005
3 Гонтовой В.А. (noname) 136 137 20 308 40 9.656 25 Apr 2005 06 May 2005
4 Леденев С.А. (Shurgenz) 136 137 20 308 256 9.825 01 May 2005 06 May 2005
5 Валуев Д.И. (Fiolent) 136 137 20 308 581 26.415 07 Apr 2005 06 May 2005
6 Галиаскаров Э.Г. (Galogen) 136 137 20 308 137 61.215 08 Apr 2005 05 May 2005
7 Мельникова И.А. (Iris_m) 136 137 20 308 324 89.875 01 Apr 2005 04 May 2005
8 Зверев Д.Л. (dimzv) 135 136 20 304 513 2.426 31 Mar 2005 31 Mar 2005
9 Сныткин В.Л. (Ded I) 135 136 20 304 202 7.442 23 Mar 2005 06 May 2005
10 Рахманов И.Е. (bloom) 135 136 20 304 118 14.136 11 Apr 2005 01 May 2005
11 Hakobyan H.H. (hamlet) 135 136 20 304 161 37.809 09 Mar 2005 30 Apr 2005
12 Шипунов И. (IAS) 135 136 20 304 265 82.048 05 Mar 2005 31 Mar 2005
13 Иткин И.Л. (joseph_itkin) 134 136 20 301 375 2.851 07 Mar 2005 13 Apr 2005
14 Spirin (spirin) 133 136 19 298 158 13.466 21 Jan 2005 24 Jan 2005
15 Михайлов В.Г. (mslava) 134 136 17 295 648 10.509 25 Mar 2005 25 Mar 2005
16 Пятница О.А. (Robin) 127 128 20 289 754 74.637 19 Mar 2005 06 May 2005
17 Gershovich (VIG) 121 122 20 277 764 10.553 14 Apr 2005 06 May 2005
18 Булаев В.В. (Kvix) 120 121 20 274 247 24.655 29 Apr 2005 29 Apr 2005
19 Якутин Н.В. (ZrenBy) 131 136 6 272 511 3.989 14 Sep 2004 18 Jan 2005
20 Тортумашев Е.А. (Johnny) 119 120 20 271 167 17.341 28 Mar 2005 04 May 2005

Лучшие результаты за неделю

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Kuch (nibbles01) 73 73 137 32 169 125 06 May 2005
2 Нужненко С.А. (DarkBoatman) 56 56 98 9 107 361 06 May 2005
3 Каинов К. (Leor) 52 52 87 0 87 430 05 May 2005
4 Воробьев П.А. (PVorobev) 48 48 79 3 82 489 05 May 2005
5 Konyshev (Phohack) 45 45 74 0 74 528 06 May 2005
6 Коголев А.В. (Kogolev) 46 46 73 0 73 547 06 May 2005
7 Лобанов (Витька) 41 41 66 1 67 606 05 May 2005
8 Комаров И. (wolfcub) 42 42 65 0 65 614 05 May 2005
9 Иванов (OLEG2005) 27 34 51 9 60 729 06 May 2005
10 Novikov (Nikolai) 23 53 49 9 58 418 06 May 2005
11 Лазарев М. (Maxx) 34 34 56 0 56 744 06 May 2005
12 Ильинец Д.В. (idv) 21 81 48 4 52 93 04 May 2005
13 Caimacan S.G. (cusha) 29 29 52 0 52 781 06 May 2005
14 Andronic (Miguel) 29 29 52 0 52 782 06 May 2005
15 Яковлев (ton) 26 29 49 0 49 790 06 May 2005
16 Sirotko A.N. (Shurik Siroko) 27 27 46 0 46 894 06 May 2005
17 Ерофеев Е.Ф. (Zhekaus) 15 79 36 9 45 101 05 May 2005
18 Сопіла Ю.М. (Lord) 18 57 44 0 44 342 01 May 2005
19 Окунев Е.Е. (Yamaneko) 19 42 40 4 44 541 06 May 2005
20 MURATOVA E.A. (test) 25 25 40 3 43 961 06 May 2005
21 Кубанов Н.Х. (Тигр) 12 59 33 9 42 328 03 May 2005
22 Держальцев В.А. (MadVet) 19 78 41 0 41 103 04 May 2005
23 Агапов С.В. (stasag) 24 32 36 5 41 925 06 May 2005
24 Бордаченков А.А. (AlanBor) 21 46 40 0 40 486 05 May 2005
25 Щепилов Ю. (Shepilov Yura) 20 28 40 0 40 849 06 May 2005
26 Первунецких Д.А. (Dan) 23 23 34 4 38 1104 06 May 2005
27 Гущин А. (_Alex) 22 50 35 1 36 456 06 May 2005
28 Спузяк С.В. (West) 20 20 27 9 36 1334 07 May 2005
29 Korneliuk V. (vansha) 14 77 34 0 34 105 05 May 2005
30 Семафоров (tet) 16 90 33 0 33 81 30 Apr 2005
31 Prishvin M. (Mikheil) 16 16 32 0 32 1178 04 May 2005
32 Sagoyan D. (savageman) 18 24 31 0 31 1072 06 May 2005
33 Карабанов Е.Ю. (Dragon) 22 22 31 0 31 1208 04 May 2005

Характерные ошибки при решении упражнений

SELECT

Задача 39
Найдите корабли, "сохранившиеся для будущих сражений"; т.е. выведенные из строя в одной битве (damaged), они участвовали в другой.

Возвращаюсь к рассмотренной ранее задаче 39 (вып.21). Удивительно, но факт, нижеприведенный запрос до последних дней принимался системой:

SELECT s.name
FROM Ships s JOIN Outcomes o ON s.name = o.ship
   JOIN Battles b ON o.battle = b.name
GROUP BY s.name HAVING COUNT (s.name) = 2
    AND (MIN(result) = 'damaged' or MAX(result) = 'damaged')
UNION
SELECT o.ship
FROM Classes c JOIN Outcomes o ON c.class = o.ship
    JOIN Battles b ON o.battle = b.name
WHERE o.ship NOT IN(SELECT name FROM Ships)
GROUP BY o.ship HAVING COUNT (o.ship) = 2
    AND (MIN(result) = 'damaged' OR MAX(result) = 'damaged')

Во-первых, объединяются запросы, которые выполняют соединение участвующих в сражениях кораблей (таблица Outcomes) с таблицами Ships и Classes соответственно. Кстати говоря, предикат o.ship NOT IN(SELECT name FROM Ships) во втором запросе явно лишний, т.к. UNION исключит возможные дубликаты.

Эти соединения не просто избыточны, они ошибочны, т.к. в описании БД сказано, что в таблице Outcomes могут быть корабли, отсутствующие в Ships. Т.е. если найдется не головной корабль, которого нет в таблице Ships и который отвечает условиям задачи, то он не попадет в результирующий набор вышеприведенного запроса.

Во-вторых, предикат HAVING COUNT (o.ship) = 2 ограничивает возможные варианты только двумя сражениями корабля. А почему корабль не может принимать участие более чем в двух сражениях? Он же не обязательно был потоплен после того, как получил повреждение.

В третьих, мне не вполне понятно условие:

(min(result) = 'damaged' or max(result) = 'damaged')

В соответствии с описанием предметной области корабль может быть:

Damaged (поврежден)
Ok (невредим)
Sunk (потоплен)

Поэтому условие min(result) = 'damaged' будет выполнено, если в одной из битв корабль был поврежден (при естественной сортировке текстовых строк буква "D" идет раньше, чем буквы "O" и "S"). Однако это совсем не означает, что поврежден он был прежде, чем принял участие в следующем сражении, что требуется по условиям задачи. Здесь уже нужно оценивать дату сражения. Что же касается max(result) = 'damaged', то это условие не будет выполняться, если результаты сражений были разные; а если одинаковые, то это не даст ничего нового по сравнению с первым условием на минимум.

Вот такое наложение ошибок дало правильный результат на обеих базах. Меры уже приняты, т.е. добавлены проверочные данные, на которых данное решение дает неверный результат. Как это и должно быть.

§ Приведенные здесь примеры можно выполнить непосредственно на сайте, установив флажок "Без проверки" на странице с упражнениями на SELECT.

Полезная информация

Конкурс

§ Мы выставили наш сайт на конкурс Интернить 2005. Победитель определяется числом поданых голосов. Просьба проголосовать. (рекомендуемая оценка 3 :-)).

Контакты

По всем вопросам, связанным с функционированием сайта, проблемами при решении упражнений, идеями вы можете обращаться к Сергею И.Моисеенко msi77@yandex.ru. Вы также можете предложить свои задачи для публикации на сайте.

Подписка Subscribe.Ru
Новости сайта "Упражнения по SQL"

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.db.sqlex
Отписаться

В избранное