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

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


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

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

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

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

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

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


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

§ SQL Server User Group и Факультет высоких технологий Южного Федерального Университета проводят
в Ростове-на-Дону 31 октября в 15:00 семинар.

Будут представлены доклады:

Проект SQL-EX.RU и опыт использования Microsoft SQL Server
Моисеенко С.И. (ФВТ ЮФУ)

Новые возможности SQL в реализации Microsoft SQL Server 2008
Шуленин А. (Microsoft, Москва)

Приглашаются все желающие.
Семинар проводится по адресу:
ул. Мильчакова 10 (здание НКТБ Пьезоприбор),
Факультет высоких технологий ЮФУ, а. 510 (5 этаж)
Проезд: авт. 26, 67, 71, 94, 96; маршрут. такси 23, 25, 40, 52, 67, 71, 93, 94, 96.
Остановка Кустанайская (8-этажное здание за рынком Привоз)

§ Последнюю 143 задачу решили Arcan и Roman S. Golubin. В итоге 1 и 3 место соответственно.
Между тем, впервые изменил сложность задачи. Теперь авторская оценка 143 задачи - 4 балла.

§ До третьего этапа дошел Faust_zp (задач 138, время 16.308).

§ paparome устоял :-). Недавний лидер на промежуточном этапе zerga немного отстал и на рубеже 136-й задачи занимает вторую позицию (время 1.857).

§ Новые лица в сотне или вернулись в нее:
Ариам (120,6.819)

§ Продвинулись в рейтинге:
mslava (136, 14.826)
Kamin (132, 57.402)
Онуфрий Голохвастов (128, 120.83)
raul (125,16.356)
Kos123 (124, 24.070)
Gleb (124, 150.370)
Ded I (121, 7.279)
Eugeniе (121, 70.364)

§ На этой неделе сертифицированы:
avk_sql (A07022598) [BK] - г.Барнаул, Россия

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 >Креславский О.М. (Arcan) 143 143 21 346 269 17.514 7.720 18 26 Oct 2007 26 Oct 2007
2 Карасёва Н.В. (vlksm) 143 143 21 346 529 38.118 12.414 18 17 Oct 2007 26 Oct 2007
3 Голубин Р.С. (Roman S. Golubin) 143 143 21 346 795 69.101 43.885 18 22 Oct 2007 26 Oct 2007
4 Северюхин Ю.А. (Venser) 142 142 21 342 200 4.950 .655 14 19 Sep 2007 19 Oct 2007
5 Белогурова (Katy_Ekb) 142 142 21 342 144 7.204 2.315 14 16 Oct 2007 26 Oct 2007
6 Тарасов Д.Б. (Gavrila) 142 142 21 342 755 23.423 2.501 14 20 Sep 2007 26 Oct 2007
7 Солдатенков Ю.С. (SolYUtor) 142 142 21 342 490 17.853 2.695 14 20 Sep 2007 26 Oct 2007
8 Шептунов П.П. (Dzen) 142 142 21 342 279 8.186 3.499 14 02 Oct 2007 16 Oct 2007
9 Мурашкин И.В. (lepton) 142 142 21 342 544 15.800 5.539 14 18 Sep 2007 26 Oct 2007
10 Мальцев А.В. (Палкин) 142 142 21 342 422 49.738 7.690 14 13 Oct 2007 26 Oct 2007
11 Бураков С.Г. (burakov58) 142 142 21 342 974 51.702 19.814 14 30 Sep 2007 30 Sep 2007
12 Агапов В. (KERBEROS) 135 141 20 326 89 6.143 1.262 11 20 Nov 2006 27 Jul 2007
13 Кувалкин К.С. (Cyrilus) 139 141 20 334 1014 12.506 2.519 11 04 Sep 2007 26 Oct 2007
14 Зверев Д.Л. (dimzv) 135 141 20 326 1141 9.278 4.938 11 19 Dec 2006 22 Dec 2006
15 Войнов П.Е. (pаparome) 141 142 21 338 765 2.788 .049 10 28 Sep 2007 22 Oct 2007
16 Любченко В.А. (IAS56) 141 142 21 338 377 177.859 20.130 10 16 Sep 2007 28 Sep 2007
17 Васьков Е.В. (Johan) 138 140 21 332 402 12.733 11.402 7 25 Aug 2007 25 Aug 2007
18 Радар Ю.В. (inkerman) 139 143 21 332 60 5.354 .000 4 07 Oct 2007 26 Oct 2007
19 Валуев Д.И. (Fiolent) 139 140 21 332 1511 118.144 62.302 4 24 Oct 2007 26 Oct 2007
20 Юлдашев М.Р. (Snowbear) 139 139 21 331 791 4.162 .000 3 17 Sep 2007 26 Oct 2007

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Темников В.В. (Темников Вадим) 44 57 95 30 125 671 26 Oct 2007
2 Blagushko (Asia_tml) 51 52 94 21 115 823 26 Oct 2007
3 >Mihalina V. (Valya) 55 55 106 0 106 1189 26 Oct 2007
4 >Печатнов В.В. (pvv) 31 71 63 29 92 372 26 Oct 2007
5 >Быков И. (SPATHI) 38 38 71 9 80 1926 26 Oct 2007
6 >Verbatium M.D. (dvid) 39 39 75 0 75 2096 26 Oct 2007
7 >Мережников А.Б. (Scorpion) 28 51 61 0 61 1486 26 Oct 2007
8 >Песчаный В.В. (vpischany) 33 33 60 0 60 2873 26 Oct 2007
9 >Шутов А. (alex55) 17 49 29 29 58 931 26 Oct 2007
10 >Аблов И.В. (bujhm) 27 27 47 9 56 3166 26 Oct 2007
11 Беликов А.Д. (A1ex) 30 30 55 0 55 3218 22 Oct 2007
12 >Кучерова А. (Nastyaru) 29 29 54 0 54 3325 26 Oct 2007
13 Вьюговский Д.В. (Denis V.) 23 43 52 0 52 1957 23 Oct 2007
14 >Kandrashevich S.M. (Siarhei) 25 25 43 8 51 3579 26 Oct 2007
15 Ignatenko A. (Alesha) 28 28 50 0 50 3672 26 Oct 2007
16 >Фомин (Crow) 28 28 50 0 50 3678 26 Oct 2007
17 >Sergeev (Wild Wolf) 20 39 49 0 49 2116 26 Oct 2007
18 >Киреев О.В. (DragonOleg) 27 28 48 0 48 3788 26 Oct 2007
19 Сбруин Г.М. (Genrih_4) 22 29 46 0 46 3460 26 Oct 2007
20 >Оноприенко А.А. (Aleeman) 21 21 33 11 44 4160 26 Oct 2007
21 >Левенков С.Н. (Cергей L) 5 70 13 30 43 398 26 Oct 2007
22 Kryak I. (orgone) 20 27 40 0 40 3982 25 Oct 2007
23 >Юхневич М. (yuchnevichM) 24 24 40 0 40 4404 26 Oct 2007

Изучаем SQL

Количественное определение различий текста на T-SQL

William Brewer (оригинал: Quantifying Text differences in T-SQL )
Перевод Моисеенко С.И.

В T-SQL имеются ограниченные возможности по сравнению текстовых строк. Они являются либо равными, либо нет. Рано или поздно, обычно при очистке данных, требуется нечто более тонкое!

Когда Вы сравниваете два фрагмента текста или две строки в выражении на SQL Server, Вы получите только значение 'true', которое возвращается, если эти два фрагмента совпадают, 'false', если - нет, или 'null' ('unknown' - прим. переводчика), если один из сравниваемых фрагментов был null.

Всего лишь одного лишнего символа пробела достаточно, чтобы склонить чашу весов. Это весьма не похоже на действительность - если мы смотрим на два фрагмента текста, мы оцениваем их как одинаковые, почти одинаковые, близкие, совсем непохожие, и еще много промежуточных оттенков. Итак, нам нужно оценить различия?

Алгоритмы различия текста столько же стары, как холмы, но не в T-SQL

В приложениях ИТ есть несколько случаев, когда нам нужно больше мер различия текстов, чем просто 'да, они одинаковы / нет, они не одинаковы'. Типичная проблема состоит в обнаружении дубликатов в записях базы данных, где понимание 'дубликата' учитывает незначительные различия. Построение надежного алгоритма для количественного определения подобия текстов весьма сложно, особенно алгоритма, основанного на теории множеств. T-SQL не имеет никаких естественных средств для использования регулярных выражений и других средств, которые бы сделали жизнь проще при выполнении такого рода работы

Я нахожу эту проблему весьма интригующей, но я не могу претендовать на то, чтобы предложить решение, которое является в какой-либо степени совершенным. Я хотел бы предложить это решение для обсуждения нашим читателям, поскольку хорошее решение было бы необычайно полезным. Меня совсем не вдохновляют алгоритмы 'soundex', они, кажется, мало чему помогают. Я имел виды на получение хорошего решения для количественной оценки различий между блоками текста, но не достиг идеала.

Я нахожу, что решение, счетчик различий, которое я привожу ниже, достаточно хорошо для моих целей, хотя иногда дает счет различий, который мне не нравится. Испытайте его сами на множестве вариантов строк, и вы увидите, что это довольно неплохая попытка. Он, конечно, медленный из-за скучного разбиения текста на слова и разделители. Обычно это только делается только один раз при импорте текста в базу данных - в таблицу 'inversion'. Можно использовать эти данные, чтобы проверить подобие оригинального текста, что будет намного быстрее. Только для того, чтобы этот код работал на SQL Server 2000, я использую в функции параметр nTEXT, а не VARCHAR (MAX), хотя последний сделал бы процедуру более простой.

"Очистка данных - не точная наука"

В действительности, каждый из нас сталкивается с требованиями при проверке различий, которые за счет тонких отличий никогда не есть те же самые. Очистка данных не является точной наукой. Я вообще предпочитаю игнорировать разделители (White-space), включая новую строку и знаки пунктуации, при проверке различий. Мой подход состоит в том, чтобы разбить текст на слова и 'не-слова' или разделители. Я именую так различные типы символов. Табличная функция, которую я привожу ниже, позволяет Вам определить слово в терминах символов, которые составляют слово. Это различается в разных языках. Процедура вообще, хотя и не всегда, будет намного быстрее, если Вы воспользуетесь таблицей чисел 'number', но я решил, что создание такой таблицы для этой статьи отвлекло бы читателя от главного.

С использованием табличной функции 'parsing', я делаю затем простое внешнее соединение между двумя наборами слов, и считаю количество раз, когда минимум 'лучших совпадений' слов меняется в их последовательности. Конечно, это - аппроксимация: я должен бы использовать прокрутку и другие приспособления, основанные на итерациях. У каждого наступает момент, когда следует передать работу программистам. Я обычно останавливаюсь тогда, когда процедура выполняет нужную мне работу.

Напоследок я приготовил изменение функции, которая обеспечивает однострочную таблицу, дающую первую точку, в которой отличаются два образца текста. Это действительно лишь побочный продукт первой процедуры, но я включил ее, чтобы дать представление о многих способах, которыми процедура может быть приспособлена к специфическим случаям. Это удивительно удобно для приложений типа итоговых отчетов о последних изменениях, сделанных в хранимых процедурах!

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

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

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

§ В рамках Премии Рунета проводится "народное голосование". Если вы считаете, что наш сайт заслуживает большей известности в рунете, проголосуйте за него. Для этого
- Пройдите по ссылке www.premiaruneta.ru/narod/vote/.
- Поставьте флажок напротив sql-ex.ru (ближе к концу списка).
- Поставьте флажок "Я согласен с правилами..." ниже списка участников.
- Нажмите кнопку Проголосовать!
Вы можете проголосовать сразу за нескольких участников.

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

Контакты

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

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

В избранное