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

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


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

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

http://www.sql-ex.ru

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

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

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

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


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

§ Добавлены проверочные данные, блокирующие прохождение не вполне верных решений задач 25, 62 и 85 (SELECT).

§ Замечено (olegov), что при наличии битв, имевших место в один и тот же день, решение одной из задач DML становится некорректным. Поскольку такой ситуации нет в БД, в формулировке задачи сделано соответствующее уточнение.

§ Хочу напомнить о необходимости поменять логин, чтобы он не совпадал с ник'ом и паролем (на странице "Личные данные"). Я уже принудительно поменял пароли у тех участников, у которых они совпадали с логином. Если вас это коснулось, воспользуйтесь ссылкой "напомнить пароль" на сайте. Затем вы сможете его изменить.

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 LastSolved LastVisit
1 Зверев Д.Л. (dimzv) 76 136 19 198 450 2.291 27 Jan 2005 28 Jan 2005
2 Кувалкин К.С. (Cyrilus) 76 136 19 198 72 4.861 04 Feb 2005 18 Feb 2005
3 Сныткин В.Л. (Ded I) 76 136 19 198 142 7.398 22 Jan 2005 19 Feb 2005
4 Валуев Д.И. (Fiolent) 76 136 19 198 503 19.337 19 Jan 2005 19 Feb 2005
5 Hakobyan H.H. (hamlet) 76 136 19 198 114 33.952 21 Jan 2005 18 Feb 2005
6 Мельникова И.А. (Iris_m) 76 136 19 198 254 66.765 21 Jan 2005 17 Feb 2005
7 Шипунов И. (IAS) 76 136 19 198 243 82.012 11 Feb 2005 18 Feb 2005
8 Spirin (spirin) 75 136 19 195 158 13.467 21 Jan 2005 24 Jan 2005
9 Иткин И.Л. (joseph_itkin) 75 136 18 193 340 2.809 31 Jan 2005 08 Feb 2005
10 Леденев С.А. (Shurgenz) 73 136 19 193 146 8.298 11 Jan 2005 11 Jan 2005
11 Михайлов В.Г. (mslava) 73 136 17 189 498 9.731 26 Oct 2004 26 Oct 2004
12 Галиаскаров Э.Г. (edart) 68 128 19 183 88 46.853 18 Feb 2005 18 Feb 2005
13 Пятница О.А. (Robin) 65 128 17 174 606 70.821 22 Oct 2004 06 Feb 2005
14 Якутин Н.В. (ZrenBy) 73 136 6 169 511 3.991 14 Sep 2004 18 Jan 2005
15 Рассказов А. (ra) 61 121 19 168 70 29.764 28 Jan 2005 17 Feb 2005
16 Губарь Д.К. (DEathkNIghtS) 61 124 17 166 23 1.046 03 Nov 2004 03 Nov 2004
17 Смирнов А. (Leshich) 61 124 17 166 205 84.171 30 Sep 2004 19 Nov 2004
18 Gershovich (VIG) 58 121 17 159 629 6.899 30 Nov 2004 18 Feb 2005
19 Булаев В.В. (Kvix) 58 121 17 159 124 24.267 27 Dec 2004 06 Jan 2005
20 Забара М.С. (максим111) 58 121 17 159 122 67.157 30 Dec 2004 14 Jan 2005

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Александр (KAS) 64 64 115 30 145 156 19 Feb 2005
2 Semerenko T.P. (_BlinD#NigeR_) 57 57 100 9 109 286 17 Feb 2005
3 >Куликов В.Н. (Самоучка) 60 60 108 0 108 241 19 Feb 2005
4 Фомин Е. (Wanderer) 42 61 84 23 107 229 18 Feb 2005
5 Овчинников Г.В. (german) 36 45 60 30 90 465 17 Feb 2005
6 Пекарь Р. (Patrick) 45 45 77 9 86 416 18 Feb 2005
7 Аверьянова Л. (Aversana) 32 57 67 9 76 287 17 Feb 2005
8 Нициевский Д.Л. (Danil) 31 41 59 10 69 467 15 Feb 2005
9 Бузмакова Р.Н. (Buzmakova R.N.) 28 28 49 17 66 675 18 Feb 2005
10 Зуйков А.П. (sad) 34 34 59 0 59 575 18 Feb 2005
11 >Aleksandrov P.V. (Stomat0109) 30 42 55 0 55 484 18 Feb 2005
12 Veklenko D.S. (VDS) 29 51 53 0 53 377 17 Feb 2005
13 Смагин С. (Dec) 27 55 46 6 52 314 15 Feb 2005
14 Ветров П. . (Rostov) 30 36 49 0 49 615 18 Feb 2005
15 Куликов П. (kulpavel) 22 91 48 0 48 68 18 Feb 2005
16 Зернятко А.В. (Azernot) 20 42 43 0 43 436 15 Feb 2005
17 Tronyx R. (Tronyx) 24 35 32 5 37 743 18 Feb 2005
18 Корнеев А.Б. (Thror) 24 24 37 0 37 845 18 Feb 2005
19 >Самойлов А.В. (faerion) 27 27 34 3 37 925 19 Feb 2005
20 Семененко М.А. (Михаил) 22 35 36 0 36 654 17 Feb 2005
21 Рахманов И.Е. (bloom) 15 78 35 0 35 87 17 Feb 2005
22 Беликов Д.И. (Corwin from Amber) 28 28 32 0 32 982 18 Feb 2005
23 >Кудрявцев А.Н. (Александр) 22 22 31 0 31 996 19 Feb 2005
24 Петряков Д.В. (DiPet) 18 24 30 0 30 884 18 Feb 2005

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

SELECT

Задача 25
Найдите производителей принтеров, которые производят ПК с наименьшим объемом RAM и с самым быстрым процессором среди всех ПК, имеющих наименьший объем RAM. Вывести: Maker

Ключевой здесь является фраза "имеющих наименьший объем RAM". Она не избыточна, как это может показаться на первый взгляд. Не достаточно найти все модели, имеющие максимальную скорость среди ПК с минимальной RAM.

Поясню сказанное демонстрацией неправильных решений. Для этой задачи их немало накопилось :-). Вот первый пример:

SELECT c.maker     FROM Product c,
    (SELECT b.model, MAX(b.speed) speed
        FROM Pc b
        WHERE b.ram IN (SELECT MIN(a.ram) FROM Pc a)
        GROUP BY b.model) t
WHERE c.model=t.model AND EXISTS
    (SELECT d.model FROM Printer d, Product e
    WHERE d.model=e.model AND e.maker = c.maker)

1. Ошибка в подзапросе

(SELECT b.model, MAX(b.speed) speed
    FROM Pc b
    WHERE b.ram IN (SELECT MIN(a.ram) FROM Pc a)
GROUP BY b.model) t

Здесь выбираются модели ПК с минимальной памятью, а для каждой такой модели определяется ПК с максимальной скоростью. Ошибка состоит в том, что максимальную скорость нужно определять по всем ПК с минимальной памятью, а не по каждой модели. Кроме того, если у производителя будет две модели с минимальной памятью, то он дважды попадет в результирующий набор, т.к. в запросе отсутствует устранение дубликатов (DISTINCT, например).

2. Ошибка в определении производителей принтеров

EXISTS (SELECT d.model FROM Printer d, Product e
    WHERE d.model=e.model AND e.maker = c.maker)

Здесь определяется наличие у производителя ПК моделей принтеров в таблице Printer. В задании говорится о том, что искомый производитель выпускает также и принтеры, но ничего не говорится о наличии моделей в таблице Printer. Т.е. если в таблице Product имеется производитель принтеров, моделей которого нет в таблице Printer, то рассматриваемый запрос проигнорирует его, хотя он и отвечает условиям задачи.

Однако мы еще не выявили главной ошибки решения, которую лучше проанализировать, устранив предыдущие:

SELECT DISTINCT maker
FROM Product
WHERE type = 'printer' AND maker IN
    (         SELECT maker FROM Product WHERE model IN         (
            SELECT model FROM Pc
             WHERE speed = (SELECT MAX(speed) FROM
            (SELECT speed FROM Pc WHERE
        ram = (SELECT MIN(ram) FROM Pc)) AS z4)
    )
)

В этом решении устранены дубликаты, правильно определены производители принтеров, а также находится глобальный максимум по скорости среди моделей с минимальной памятью:

WHERE speed = (SELECT MAX(speed) FROM
    (SELECT speed FROM Pc WHERE
        ram = (SELECT MIN(ram) FROM Pc)) AS z4)

Что же осталось. Вспомним фразу, упомянутую в начале главы: "имеющих наименьший объем RAM". В данном решении мы определяем лишь модели, имеющие скорость, совпадающую с максимальной скоростью для моделей с минимальной памятью. Поясню на примере. Пусть минимальная память для компьютеров в БД - 64 и имеются следующие ПК:

speed ram
600 64
600 128
450 64

Код, используемый для определения искомой скорости

SELECT MAX(speed) FROM
    (SELECT speed FROM Pc WHERE
        ram = (SELECT MIN(ram) FROM Pc)) AS z4

даст 600. Действительно, это максимальная скорость для моделей с минимальной (64) памятью. А далее мы отбираем модели с этой скоростью, куда попадает и модель {600, 128}, хотя она и не отвечает условиям задачи. Если производитель этой модели выпускает еще и принтеры (а он выпускает!), да не является производителем модели {600, 64}, то получаем "неверно" при проверке запроса.

Правильным выбором будет, естественно, лишь модель {600, 64}. Надеюсь, что теперь решить эту задачу не составит труда :-).

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

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

Уже подготовив этот выпуск, я заглянул на Яндекс, чтобы посмотреть, как развивается ТИЦ (тематический индекс цитирования) нашего сайта. Восхищение вызвала ссылка на наш сайт, находящаяся на сайте олимпийской статистики - http://www.2-webs.com/. Точнее не помню. Интересующиеся могут посмотреть сами: щелкнуть по кнопке Яндекса в колонтитуле справки сайта, затем по показателю ТИЦ. Вот что значит назвать рейтинг "Олимпийский"; индекс-то тематический!?! :-))
Теперь следует ожидать появления ссылки на сайтах либеральных партий, ведь у нас и такой рейтинг есть :-)).
Хорошо еще, что я не назвал рейтинг "пессимистическим", как кто-то предлагал. Так можно и в клубе самоубийц оказаться :-)).

Контакты

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

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

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

В избранное