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

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


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

SQL Exercises

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

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

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

Демонстрация плана выполнения запроса и сравнительная оценка эффективности решений поможет вам освоить принципы оптимизации запросов.

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


С Рождеством, коллеги!

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

§ На странице подтверждения сертификата теперь будет ставиться один из двух значков - "+" или "-".
Плюс означает, что сертификат отвечает требованиям сегодняшнего дня, а минус - нет. Само подтверждение будет даваться в любом случае. Не отвечающим требованиям сертификат делает замена задач на сертификационных этапах или повышение сертификационного порога.
При этом нововведении мы исходили из того, что поддержание квалификации на должном уровне требует постоянной практики. Для подтверждения своей квалификации специалисту необходимо будет решить замененные или добавленные задачи. Это не потребует много времени (новые задачи на сертификационных этапах появляются нечасто и в небольшом числе) и абсолютно никаких денег.
О появлении новых задач я всегда сообщаю в рассылке.

§ Выполнил очередное удаление "случайных" посетителей. На этот раз база сократилась на 600 участников.

§ 139 задачу решил Палкин. Этого уже недостаточно, чтобы попасть в десятку; нужно сделать хотя бы еще один шаг.

§ Новые лица в сотне замечены не были. Видимо, праздники сказались, но на подходе появились реальные претенденты.

§ Продвинулись в рейтинге:
Fencer (121, 171.601)
Kamin (113, 36.902)
ДимонХХХ (111, 19.017)

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

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

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

Сертифицировано на сайте - 121

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Агапов В. (KERBEROS) 141 141 20 333 89 6.183 1.262 11 20 Nov 2006 29 Dec 2006
2 Кувалкин К.С. (Cyrilus) 141 141 20 333 746 12.417 2.519 11 10 Dec 2006 05 Jan 2007
3 Карасёва Н.В. (vlksm) 141 141 20 333 196 27.850 2.710 11 18 Nov 2006 05 Jan 2007
4 Мурашкин И.В. (lepton) 141 141 20 333 240 14.865 4.724 11 18 Nov 2006 05 Jan 2007
5 Зверев Д.Л. (dimzv) 141 141 20 333 1141 9.324 4.938 11 19 Dec 2006 22 Dec 2006
6 Голубин Р.С. (Roman S. Golubin) 141 141 20 333 457 54.984 33.803 11 18 Nov 2006 05 Jan 2007
7 Войнов П.Е. (pаparome) 140 140 20 329 489 2.738 .049 7 26 Dec 2006 28 Dec 2006
8 Тарасов Д.Б. (Gavrila) 140 140 20 329 466 20.242 .513 7 05 Dec 2006 01 Jan 2007
9 Васьков Е.В. (Johan) 140 140 20 329 124 12.713 11.402 7 20 Nov 2006 30 Dec 2006
10 Валуев Д.И. (Fiolent) 139 140 20 326 1188 117.017 62.302 4 05 Dec 2006 01 Jan 2007
11 Юлдашев М.Р. (Snowbear) 138 139 20 324 441 4.106 .000 3 02 Oct 2006 04 Jan 2007
12 Мальцев А.В. (Палкин) 139 139 20 325 138 20.536 .353 3 02 Jan 2007 03 Jan 2007
13 Держальцев В.А. (MadVet) 138 139 20 324 540 34.249 3.085 3 08 Oct 2006 19 Oct 2006
14 Палий С.А. (PS_Sergey) 139 139 20 325 212 15.756 4.188 3 01 Dec 2006 03 Dec 2006
15 Утёнков М.Н. (=Maxim=) 138 138 20 322 200 24.998 .000 0 19 Nov 2006 02 Jan 2007
16 Slobodcicov A.N. (Testo) 136 138 20 319 337 7.171 .000 0 25 Aug 2006 10 Nov 2006
17 Иванов А.Н. (Goapsy) 136 138 20 319 270 18.911 .000 0 07 Aug 2006 18 Dec 2006
18 Абашин П.И. (Dizil) 137 137 20 318 453 3.966 .000 0 20 Nov 2006 25 Dec 2006
19 Крижевич С.А. (yaff) 137 137 20 318 523 15.010 .000 0 05 Dec 2006 05 Dec 2006
20 Виноградов С.М. (Botch) 137 137 20 318 74 19.782 .000 0 26 Dec 2006 29 Dec 2006

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Гуленко А. (xlum) 57 57 107 0 107 910 06 Jan 2007
2 нохрин (sogi86) 51 51 93 0 93 1235 30 Dec 2006
3 >Lau K. (kw) 48 49 88 0 88 943 05 Jan 2007
4 L (Glorestel) 33 33 59 1 60 2164 05 Jan 2007
5 >Калюшик Н.С. (vitaminka) 35 35 56 0 56 2369 05 Jan 2007
6 Шестопалов А.В. (freespoken) 17 58 37 15 52 683 04 Jan 2007
7 Гилев Е.М. (Eugene_G) 13 54 29 23 52 726 05 Jan 2007
8 Деревянко О.П. (Piligrim_mak) 25 48 52 0 52 1322 06 Jan 2007
9 super S.S. (super12345) 24 24 48 3 51 2610 05 Jan 2007
10 Полонский Е.Я. (un4ever) 26 26 43 0 43 3006 05 Jan 2007
11 Новикоф Ж.Ж. (human) 24 57 41 0 41 912 05 Jan 2007
12 >Лукьяненко Д. (Demoon) 23 37 38 1 39 2334 06 Jan 2007
13 sushadv (kul) 13 32 33 0 33 2281 05 Jan 2007
14 Амбалова Е.С. (Ambee) 15 86 30 0 30 210 05 Jan 2007
15 >litvak (hazard1) 22 22 29 0 29 4193 05 Jan 2007
16 Новиков А.Н. (Bulldozer) 12 56 27 0 27 728 05 Jan 2007
17 Шепелев И.Н. (wasp) 11 97 26 0 26 134 05 Jan 2007
18 Кудряшов А.А. (Lexus) 13 85 26 0 26 229 06 Jan 2007
19 Лобанов И.Д. (CyberWind) 19 19 25 0 25 4510 05 Jan 2007
20 Моисеенко Е.А. (Moiseenko) 10 106 24 0 24 109 05 Jan 2007
21 Голубинцев А.А. (lexaNRJ) 8 41 22 0 22 1880 05 Jan 2007
22 reddy N.K. (praveenreddy) 3 27 7 15 22 2213 04 Jan 2007
23 Трефилов А. (Aladdin) 9 105 21 0 21 111 04 Jan 2007
24 Ковальчук В. (valkov) 11 86 21 0 21 208 31 Dec 2006
25 Шинкаренко А.Н. (ANSH) 17 17 21 0 21 4850 04 Jan 2007
26 Першин М.Р. (Max Pershin) 9 89 20 0 20 188 05 Jan 2007
27 Ephriam (Ephriam) 17 17 19 1 20 4938 05 Jan 2007

Изучаем SQL

Рекурсивные запросы в SQL:1999 и SQL Server 2005 (продолжение, начало в вып. #117)

Frederic BROUARD (оригинал: Recursive Queries in SQL:1999 and SQL Server 2005)
Перевод Моисеенко С.И.

Начнем с Парижа:

WITH journey (TO_TOWN)
AS
     (SELECT DISTINCT JNY_FROM_TOWN
     FROM T_JOURNEY
     WHERE JNY_FROM_TOWN = 'PARIS'
     UNION ALL
     SELECT JNY_TO_TOWN
     FROM T_JOURNEY AS arrival
         INNER JOIN journey AS departure
             ON departure.TO_TOWN = arrival.JNY_FROM_TOWN)
SELECT *
FROM journey

TO_TOWN
--------------------------------
PARIS
NANTES
CLERMONT-FERRAND
LYON
MONTPELLIER
MARSEILLE
NICE
TOULOUSE
MONTPELLIER
TOULOUSE
TOULOUSE

По-видимому имеется три способа добраться до Тулузы. Можем ли мы отфильтровать пункт назначения? Конечно!

WITH journey (TO_TOWN)
AS
     (SELECT DISTINCT JNY_FROM_TOWN
     FROM T_JOURNEY
     WHERE JNY_FROM_TOWN = 'PARIS'
     UNION ALL
     SELECT JNY_TO_TOWN
     FROM T_JOURNEY AS arrival
         INNER JOIN journey AS departure
             ON departure.TO_TOWN = arrival.JNY_FROM_TOWN)
SELECT *
FROM journey
WHERE TO_TOWN = 'TOULOUSE'

TO_TOWN
---------------
TOULOUSE
TOULOUSE
TOULOUSE

Мы можем уточнить этот запрос, подсчитав число шагов по каждому направлению:

WITH journey (TO_TOWN, STEPS)
AS
     (SELECT DISTINCT JNY_FROM_TOWN, 0
     FROM T_JOURNEY
     WHERE JNY_FROM_TOWN = 'PARIS'
     UNION ALL
     SELECT JNY_TO_TOWN, departure.STEPS + 1
     FROM T_JOURNEY AS arrival
         INNER JOIN journey AS departure
             ON departure.TO_TOWN = arrival.JNY_FROM_TOWN)
SELECT *
FROM journey
WHERE TO_TOWN = 'TOULOUSE'

TO_TOWN      STEPS
------------- -----------
TOULOUSE     3
TOULOUSE     2
TOULOUSE     3

А вот расстояния по различным направлениям:

WITH journey (TO_TOWN, STEPS, DISTANCE)
AS
     (SELECT DISTINCT JNY_FROM_TOWN, 0, 0
     FROM T_JOURNEY
     WHERE JNY_FROM_TOWN = 'PARIS'
     UNION ALL
     SELECT JNY_TO_TOWN, departure.STEPS + 1,
         departure.DISTANCE + arrival.JNY_MILES

     FROM T_JOURNEY AS arrival
         INNER JOIN journey AS departure
             ON departure.TO_TOWN = arrival.JNY_FROM_TOWN)
SELECT *
FROM journey
WHERE TO_TOWN = 'TOULOUSE'

TO_TOWN      STEPS     DISTANCE
--------------- ----------- -------------------
TOULOUSE      3     1015
TOULOUSE      2     795
TOULOUSE      3     995

Теперь узнаем разные города, которые мы посетим, двигаясь по этим направлениям:

WITH journey (TO_TOWN, STEPS, DISTANCE, WAY)
AS
     (SELECT DISTINCT JNY_FROM_TOWN, 0, 0, CAST('PARIS' AS VARCHAR(MAX))
     FROM T_JOURNEY
     WHERE JNY_FROM_TOWN = 'PARIS'
     UNION ALL
     SELECT JNY_TO_TOWN, departure.STEPS + 1,
         departure.DISTANCE + arrival.JNY_MILES,
         departure.WAY + ', ' + arrival.JNY_TO_TOWN

     FROM T_JOURNEY AS arrival
         INNER JOIN journey AS departure
             ON departure.TO_TOWN = arrival.JNY_FROM_TOWN)
SELECT *
FROM journey
WHERE TO_TOWN = 'TOULOUSE'

TO_TOWN     STEPS     DISTANCE     WAY
----------------- ----------- ----------- -------------------------------------------------
TOULOUSE     3     1015     PARIS, LYON, MONTPELLIER, TOULOUSE
TOULOUSE     2     795     PARIS, CLERMONT-FERRAND, TOULOUSE
TOULOUSE     3     995     PARIS, CLERMONT-FERRAND, MONTPELLIER, TOULOUSE

(Окончание следует...)

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

§ Все статьи, публикуемые в рассылке, затем выкладываются на сайте Книги и статьи по SQL.

§ Поступила в продажу книга SQL. Задачи и решения, посвященная анализу ошибок, допускаемых при решении задач первого этапа. На сайте издательства Питер можно сделать заказ и познакомиться с содержанием.

Контакты

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

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

В избранное