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

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


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

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

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

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

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

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


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

§ Выполнил общую компенсацию времени, связанную с проблемами на сервере 15-08-2007.
Однако сегодня без всякого предупреждения наш сайт отключили. Причина стала известна только через полдня. Оказывается мы потребляем слишком много ресурсов сервера и если мы не ограничим ее, то нас и не включат. Такой вот ультиматум. Так что переходим на другой хостинг. О результатах сообщу в экстренном выпуске рассылки. Надеюсь, что к понедельнику все заработает.

§ На поздравлении с днем рождения появилась ссылка, ведущая на страницу с резюме сертифицированного специалиста. Если он предоставил контактную информацию, то это хороший способ поздравить его :-).

 

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Северюхин Ю.А. (Venser) 142 142 21 342 154 4.912 .655 14 04 Aug 2007 04 Aug 2007
2 Солдатенков Ю.С. (SolYUtor) 141 142 21 340 320 17.807 2.695 14 03 Apr 2007 10 Aug 2007
3 Шептунов П.П. (PavelPS) 142 142 21 342 222 8.145 3.499 14 06 Aug 2007 10 Aug 2007
4 Мурашкин И.В. (lepton) 142 142 21 342 499 15.737 5.539 14 04 Aug 2007 10 Aug 2007
5 Карасёва Н.В. (vlksm) 142 142 21 342 455 31.344 5.912 14 04 Aug 2007 06 Aug 2007
6 Мальцев А.В. (Палкин) 141 142 21 340 310 27.974 7.690 14 23 Jun 2007 26 Jul 2007
7 Голубин Р.С. (Roman S. Golubin) 142 142 21 342 719 55.391 34.203 14 07 Aug 2007 06 Aug 2007
8 Агапов В. (KERBEROS) 137 141 20 329 89 6.163 1.262 11 20 Nov 2006 27 Jul 2007
9 Кувалкин К.С. (Cyrilus) 140 141 20 335 901 12.541 2.519 11 14 May 2007 10 Aug 2007
10 Зверев Д.Л. (dimzv) 137 141 20 329 1141 9.294 4.938 11 19 Dec 2006 22 Dec 2006
11 Войнов П.Е. (pаparome) 141 142 21 338 712 2.765 .049 10 06 Aug 2007 09 Aug 2007
12 Любченко В.А. (IAS56) 141 142 21 338 334 176.801 20.130 10 04 Aug 2007 04 Aug 2007
13 Тарасов Д.Б. (Gavrila) 139 140 21 333 691 20.381 .513 7 18 Jul 2007 03 Aug 2007
14 Васьков Е.В. (Johan) 139 140 21 333 253 12.786 11.402 7 29 Mar 2007 26 Jul 2007
15 Валуев Д.И. (Fiolent) 139 140 20 330 1433 117.088 62.302 4 07 Aug 2007 10 Aug 2007
16 Юлдашев М.Р. (Snowbear) 139 139 21 331 749 4.132 .000 3 06 Aug 2007 10 Aug 2007
17 Утёнков М.Н. (=Maxim=) 139 139 21 331 459 25.187 .036 3 05 Aug 2007 07 Aug 2007
18 Креславский О.М. (Arcan) 139 14 21 331 191 9.932 .315 3 09 Aug 2007 10 Aug 2007
19 Держальцев В.А. (MadVet) 134 139 20 320 540 34.190 3.085 3 08 Oct 2006 19 Oct 2006
20 Палий С.А. (PS_Sergey) 135 139 20 321 212 15.704 4.188 3 01 Dec 2006 03 Dec 2006

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Яхин (yahoo) 86 87 171 6 177 219 17 Aug 2007
2 Николаенко А.В. (Shadow77) 59 59 112 34 146 561 17 Aug 2007
3 Шкарев А.В. (Маурицио) 52 52 101 0 101 1298 15 Aug 2007
4 Бирюков А. (S_Wolf) 45 58 97 3 100 1032 15 Aug 2007
5 Klyukovskyy D.V. (drima) 45 45 81 17 98 1388 17 Aug 2007
6 Рябов А.В. (h1t) 36 50 78 0 78 1463 16 Aug 2007
7 Шушков Д.Б. (DSH) 37 37 70 3 73 2089 17 Aug 2007
8 Stepanov (stal) 29 42 65 0 65 1885 17 Aug 2007
9 thabane (sage) 31 31 51 3 54 3098 12 Aug 2007
10 Киба А. (Alexiski) 23 23 35 17 52 3257 17 Aug 2007
11 jamalapuram S.K. (sashi) 28 28 51 0 51 3315 17 Aug 2007
12 Дроздова (Vitulek) 13 49 29 20 49 1012 17 Aug 2007
13 Бабин С. (Славик) 21 34 49 0 49 2541 17 Aug 2007
14 Бушуев (Bushee) 22 48 45 0 45 1552 16 Aug 2007
15 Чуркин А.Н. (LazyAndy) 26 26 45 0 45 3773 17 Aug 2007
16 Добрынин С. (Никольский™) 23 64 43 0 43 964 17 Aug 2007
17 Ледкофф (Ледков) 29 29 43 0 43 3898 16 Aug 2007
18 Арин А.Б. (TEHb) 17 32 42 0 42 2688 15 Aug 2007
19 Бизяев А. (Skripatch) 25 25 42 0 42 3966 17 Aug 2007
20 Minenko (парабеллум) 25 25 42 0 42 3969 16 Aug 2007
21 Абрамов (Abrams) 25 25 41 0 41 4032 17 Aug 2007
22 Бурлов Е.П. (Женя06) 13 65 25 15 40 492 17 Aug 2007
23 Chyzhevych V.O. (satanko) 9 57 23 17 40 787 17 Aug 2007
24 Кузьмин Д. (denvio) 24 24 40 0 40 4092 12 Aug 2007

Изучаем SQL

Мастерская XML - FOR XML PATH (окончание, начало в вып.149-150)

Jacob Sebastian (оригинал: XML Workshop - FOR XML PATH )
Перевод Моисеенко С.И.

Перейдем к режиму AUTO. Следующим кодом мы пытаемся создать необходимую структуру XML, используя метод AUTO.

 

SELECT
        Country.CountryName AS [name],
        Country.Currency,
        City.CityName AS [name],
        Customer.CustomerNumber AS [id],
        Customer.CustomerName AS [name],
        Customer.Phone
FROM
        Customers Customer
        INNER JOIN Cities City ON (City.CityID = Customer.CityID)
        INNER JOIN Countries Country ON (Country.CountryID = City.CountryID)
ORDER BY CountryName, CityName
FOR XML AUTO

 

/* Результат: <Country name="England" Currency="Pound Sterling"> <City name="London"> <Customer id="TH" name="Thomas Hardy" Phone="444-444-4444" /> </City> </Country> <Country name="India" Currency="Rupee"> <City name="New Delhi"> <Customer id="JS" name="Jacob Sebastian" Phone="555-555-5555" /> </City> </Country> <Country name="USA" Currency="US Dollars"> <City name="NJ"> <Customer id="EN" name="Elizabeth Lincoln" Phone="333-333-3333" /> </City> <City name="NY"> <Customer id="MK" name="John Mark" Phone="111-111-1111" /> <Customer id="WS" name="Will Smith" Phone="222-222-2222" /> </City> </Country> */

Здесь опять же мы можем получить прекрасный XML, за исключением корневого элемента ROOT. XML не всегда полезен без ОБЯЗАТЕЛЬНОГО корневого элемента. Режим AUTO не дает возможности определить элемент ROOT для результирующего XML. Попробуем все же добиться этого. Следующий код демонстрирует попытку разрешить вышеупомянутое ограничение.

 

SELECT CAST ('<CustomersByRegion>' + (SELECT
        Country.CountryName AS [name],
        Country.Currency,
        City.CityName AS [name1],
        Customer.CustomerNumber AS [id],
        Customer.CustomerName AS [name2],
        Customer.Phone
FROM
        Customers Customer
        INNER JOIN Cities City ON (City.CityID = Customer.CityID)
        INNER JOIN Countries Country ON (Country.CountryID = City.CountryID)
ORDER BY CountryName, CityName
FOR XML AUTO) + '</CustomersByRegion>' AS XML)

 

/* &lt;CustomersByRegion&gt; &lt;Country name=&quot;England&quot; Currency=&quot;Pound Sterling&quot;&gt; &lt;City name1=&quot;London&quot;&gt; &lt;Customer id=&quot;TH&quot; name2=&quot;Thomas Hardy&quot; Phone=&quot;444-444-4444&quot; /&gt; &lt;/City&gt; &lt;/Country&gt; &lt;Country name=&quot;India&quot; Currency=&quot;Rupee&quot;&gt; &lt;City name1=&quot;New Delhi&quot;&gt; &lt;Customer id=&quot;JS&quot; name2=&quot;Jacob Sebastian&quot; Phone=&quot;555-555-5555&quot; /&gt; &lt;/City&gt; &lt;/Country&gt; &lt;Country name=&quot;USA&quot; Currency=&quot;US Dollars&quot;&gt; &lt;City name1=&quot;NJ&quot;&gt; &lt;Customer id=&quot;EN&quot; name2=&quot;Elizabeth Lincoln&quot; Phone=&quot;333-333-3333&quot; /&gt; &lt;/City&gt; &lt;City name1=&quot;NY&quot;&gt; &lt;Customer id=&quot;MK&quot; name2=&quot;John Mark&quot; Phone=&quot;111-111-1111&quot; /&gt; &lt;Customer id=&quot;WS&quot; name2=&quot;Will Smith&quot; Phone=&quot;222-222-2222&quot; /&gt; &lt;/City&gt; &lt;/Country&gt; &lt;/CustomersByRegion&gt; */

Теперь давайте посмотрим, сможем ли мы использовать режим RAW, чтобы получить нужный нам результат. Режим RAW не обеспечивает способа генерации иерархии узлов XML. Однако может быть использована комбинация RAW и AUTO для получения нужных результатов. Следующий код демонстрирует это.

 

SELECT CAST(
        (SELECT
                Country.CountryName AS [name],
                Country.Currency,
                City.CityName AS [name],
                Customer.CustomerNumber AS [id],
                Customer.CustomerName AS [name],
                Customer.Phone
        FROM
                Customers Customer
                INNER JOIN Cities City ON (City.CityID = Customer.CityID)
                INNER JOIN Countries Country ON (Country.CountryID = City.CountryID)
        ORDER BY CountryName, CityName
        FOR XML AUTO) AS XML)
FOR XML RAW('CustomersByRegion')

 

/* Результат: &lt;CustomersByRegion&gt; &lt;Country name=&quot;England&quot; Currency=&quot;Pound Sterling&quot;&gt; &lt;City name=&quot;London&quot;&gt; &lt;Customer id=&quot;TH&quot; name=&quot;Thomas Hardy&quot; Phone=&quot;444-444-4444&quot; /&gt; &lt;/City&gt; &lt;/Country&gt; &lt;Country name=&quot;India&quot; Currency=&quot;Rupee&quot;&gt; &lt;City name=&quot;New Delhi&quot;&gt; &lt;Customer id=&quot;JS&quot; name=&quot;Jacob Sebastian&quot; Phone=&quot;555-555-5555&quot; /&gt; &lt;/City&gt; &lt;/Country&gt; &lt;Country name=&quot;USA&quot; Currency=&quot;US Dollars&quot;&gt; &lt;City name=&quot;NJ&quot;&gt; &lt;Customer id=&quot;EN&quot; name=&quot;Elizabeth Lincoln&quot; Phone=&quot;333-333-3333&quot; /&gt; &lt;/City&gt; &lt;City name=&quot;NY&quot;&gt; &lt;Customer id=&quot;MK&quot; name=&quot;John Mark&quot; Phone=&quot;111-111-1111&quot; /&gt; &lt;Customer id=&quot;WS&quot; name=&quot;Will Smith&quot; Phone=&quot;222-222-2222&quot; /&gt; &lt;/City&gt; &lt;/Country&gt; &lt;/CustomersByRegion&gt; */

Заключение

Мы рассмотрели несколько примеров применения режимов AUTO, RAW и PATH, и я надеюсь, что они достаточно ясно продемонстрировали использование вышеупомянутых режимов. Есть еще один режим, EXPLICIT, который я еще не показал. Данный способ предоставляет значительно больше возможностей по структурированию сгенерированного XML. Однако этот режим намного более сложен в использовании. В следующей статье я представлю пошаговое руководство для облегчения понимания использования режима EXPLICIT.

20-06-2007

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

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

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

§ Желающих поспособствовать популяризации сайта прошу проголосовать/поставить закладку в социальных сетях:
del.icio.us
dzone.com
Digg.com
Reddit.com

Контакты

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

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

В избранное