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

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


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

Выпуск 292 от 01 мая 2010 г.

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

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

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

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

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


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

§ Под номерами 41 (1 балл), 59 (1), 100 (2) выставил задачи от нового автора qwrqwr.
Под номером 78 выставил 2-х бальную задачу от нового автора _ORA_.
Под номером 82 выставил 2-х бальную задачу от нового автора _Virt_.
Под номером 63 выставил 3-х бальную задачу Ozzy.
Под номером 164 выставил 2-х бальную задачу anddros.
Прежде временно находящаяся под номером 164 задача теперь имеет номер 86.
Cтарая задача 86 теперь имеет номер 36.
Cтарая задача 100 теперь имеет номер 38.
Cтарая задача 82 теперь имеет номер 40.
Cтарая задача 63 теперь имеет номер 84.
Cтарая задача 84 теперь имеет номер 39.
Cтарая задача 41 теперь имеет номер 19.
Cтарая задача 59 теперь имеет номер 37.
Cтарая задача 38 теперь имеет номер 21.
Cтарая задача 40 теперь имеет номер 20.
Cтарая задача 78 теперь имеет номер 42.
Cтарая задача 42 теперь имеет номер 8.
Cтарые задачи 8, 19, 20, 21, 36, 37, 39 перенесены на обучающий этап.
Второй этап теперь начинается с номера 36.
Просроченные заказы сертификатов удалены.

Есть еще несколько задач в разной степени готовности. Так что продолжение следует...

§ Ozzy внес уточнение в условие рейтинговой задачи 63.
risp усилил проверку задачи 132.
qwrqwr добавил для проверки задачи 52 (обучающий этап) данные, предложенные anddros и _ORA_.

§ Изменения среди лидеров (решенные за неделю задачи третьего этапа):
Смена лидера!
1. Arcan (164)
6. anddros (164)
65. qwrqwr (164)

§ К третьему этапу подошли:
65. qwrqwr (задач 138, время 52.285)

§ Продвинулись в рейтинге:
70. alex.i (131, 169.727)
75. Johnnymnemonic (126, 135.988)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
108. Vladius (113, 23.594)
112. uon (114, 369.400)

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

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

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

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

На обучающем этапе - 12758

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

Лучшие результаты (ТОР 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)1 163 59 22 400 1186 126.703 102.137 79 30 Apr 2010 30 Apr 2010
2 >Карасёва Н.В. (vlksm)1 166 63 22 407 1455 131.385 94.468 77 30 Apr 2010 30 Apr 2010
3 Зотов П.Г. (Ozzy)1 159 63 22 394 778 199.850 211.373 75 27 Apr 2010 30 Apr 2010
4 >Сальников С.А. ($erges)1 164 100 22 402 794 7.818 7.297 72 30 Apr 2010 30 Apr 2010
5 Яцук А.А. (Faust_zp)1 157 252 22 390 1093 121.912 92.200 72 01 Feb 2010 20 Mar 2010
6 >Дроздков А.Н. (anddros)5 159 59 22 389 703 8.337 8.273 68 30 Apr 2010 30 Apr 2010
7 Умрихина Е.В. (Umrikhina)1 143 252 22 357 488 41.244 47.336 59 25 Aug 2009 14 Apr 2010
8 Дубинский А.В. (_yizraor)8 152 252 22 374 671 67.232 28.051 55 31 Mar 2010 29 Apr 2010
9 >Бойко Д.М. (Angellore)9 155 100 22 371 997 877.780 166.307 41 30 Apr 2010 30 Apr 2010
10 Тарасов Д.Б. (Gavrila)9 151 78 22 365 1707 71.055 36.268 41 29 Apr 2010 30 Apr 2010
11 Сенкевич С.В. (GreyC)1 126 251 21 322 612 57.718 26.238 41 07 Oct 2009 01 Jan 2010
12 Селезнёв А.С. (Артём С.)1 123 251 21 314 444 47.221 34.492 41 25 Jan 2009 03 Mar 2009
13 Никотин В.М. (@Nikotin)1 127 251 21 319 471 8.335 3.704 35 11 Dec 2009 27 Apr 2010
14 Мурашкин И.В. (lepton)1 119 251 21 299 1139 69.439 58.709 32 05 May 2009 18 Apr 2010
15 Печатнов В.В. (pvv)1 135 252 21 330 845 36.963 17.410 31 10 Feb 2010 19 Apr 2010
16 Шиндин А.В. (AlShin)10 135 251 21 328 498 26.251 418.630 30 28 Feb 2010 09 Mar 2010
17 Муллаханов Р.Х. (rem)9 129 251 22 319 649 14.598 20.041 29 20 Jun 2009 02 Feb 2010
18 Орлов М.В. (Eagleoff)15 143 252 22 346 687 47.274 12.519 28 05 Mar 2010 30 Apr 2010
19 Анисимов Д. (danilko)13 132 252 22 317 32 12.700 9.283 26 12 Aug 2009 17 Aug 2009
20 Держальцев В.А. (MadVet)7 134 86 21 316 1838 61.828 28.209 23 28 Apr 2010 29 Apr 2010

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Андропов (zergey2) 19 19 44 19 63 1916 30 Apr 2010
2 Исмаилов А.Р. (aklerk) 32 35 62 0 62 1739 30 Apr 2010
3 Добрынин С. (inGray) 19 62 26 25 51 594 29 Apr 2010
4 >Жуков А.С. (zhuckovas) 20 21 42 3 45 2617 30 Apr 2010
5 Terentjev (Phantom_TSV) 9 9 11 34 45 6317 29 Apr 2010
6 >Fedorov A. (fan_1989) 18 18 40 2 42 3018 30 Apr 2010
7 Кормазев А.В. (drednout) 1 34 1 31 32 1000 29 Apr 2010
8 >Королев А. (Gluck) 13 68 27 0 27 405 30 Apr 2010
9 Макулина Ю. (Yulioka) 12 29 20 7 27 1243 29 Apr 2010
10 sonets O.V. (sonce) 0 0 27 27 6767 30 Apr 2010
11 Дмитриев А.А. (v.s.o.p.) 11 29 26 0 26 2036 30 Apr 2010
12 Дегтярь С.Б. (degt) 11 100 23 0 23 209 30 Apr 2010
13 >frenkental (a2010) 16 101 22 0 22 159 30 Apr 2010
14 Сухарев В.В. (YodaS) 11 99 21 0 21 220 30 Apr 2010
15 >ARS (vjantonio) 1 14 2 19 21 2328 30 Apr 2010
16 >Курочкин П.А. (qwrqwr) 9 139 18 0 18 65 30 Apr 2010
17 Kac (AlexKac) 11 51 18 0 18 644 30 Apr 2010
18 Сергеев Д.А. (Ethereal) 1 1 1 17 18 6710 30 Apr 2010
19 Санько А.В. (count) 10 93 17 0 17 248 30 Apr 2010
20 Шаламов (Hiddenman) 6 8 17 0 17 6063 30 Apr 2010

Изучаем SQL

Рекурсивные СТЕ (продолжение, начало в вып.291)

Моисеенко С.И.

Давайте решим еще одну задачу в качестве ответа на вопрос, который мне неоднократно встречался на просторах Интернет.

Преобразовать текст в столбце таблицы таким образом, чтобы каждое слово начиналось с заглавной буквы.

Вот пример данных и требуемый результат:

name      rep     
delta    Delta
KSI PSI    Ksi Psi
alfa beta gamma    zeta  Alfa Beta Gamma    Zeta
ALfa and omegA   Alfa And Omega

За небольшим числом исключений (среди которых можно упомянуть аббревиатуры и инициалы) можно считать, что слову внутри текста предшествует пробел. Это можно использовать в качестве критерия поиска нужных нам элементов текста. Предлагаю реализовать такой достаточно примитивный алгоритм:
1. Первую букву текста делаем прописной, а остальные - строчными.
2. Затем каждую конструкцию "пробел+буква" переводим в верхний регистр.

С первым пунктом алгоритма все просто:

SELECT name, UPPER(LEFT(name, 1)) + LOWER(SUBSTRING(name, 2, LEN(name) - 1)) rep
FROM
(SELECT 'ALfa and omegA' AS name
UNION ALL SELECT 'alfa beta gamma    zeta'
UNION ALL SELECT 'KSI PSI'
UNION ALL SELECT 'delta'
) X
 
name       rep
ALfa and omegA   Alfa and omega
alfa beta gamma    zeta  Alfa beta gamma    zeta
KSI PSI    Ksi psi
delta    Delta

Для реализации второго пункта есть варианты. Поскольку букв латинского алфавита не так много (26), можно просто сделать 26 замен. Я не поленюсь и приведу полный вариант, чтобы вы могли поэкспериментировать с запросом.

Итак,

SELECT name, REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(rep, ' a', ' A'), ' b', ' B'), ' c', ' C'), ' d', ' D'), ' e', ' E'),
' f', ' F'), ' g', ' G'), ' h', ' H'), ' i', ' I'), ' j', ' J'), ' k', ' K'), ' l', ' L'), ' m', ' M'),
 ' n',' N'), ' o', ' O'), ' p', ' P'), ' q', ' Q'), ' r', ' R'), ' s', ' S'), ' t', ' T'), ' u', ' U'),
' v', ' V'), ' w', ' W'), ' x', ' X'), ' y', ' Y'), ' z', ' Z')
FROM(
SELECT name, UPPER(LEFT(name,1)) + LOWER(SUBSTRING(name, 2, LEN(name)-1)) rep
FROM
(SELECT 'ALfa and omegA' AS name
UNION ALL SELECT 'alfa beta gamma    zeta'
UNION ALL SELECT 'KSI PSI'
UNION ALL SELECT 'delta'
) X
) Y

Нетрудно догадаться, что следующий вариант будет использовать рекурсивный CTE.

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

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

§ Приглашаем вас посетить Интерактивный учебник по SQL.
   Ресурс позиционируется как "справочное обеспечение" для сайта SQL-EX.RU, но может использоваться и независимо от него.

§ Онлайновый выпуск рассылки можно почитать на сайте.

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

§ Хотите поддержать проект? Вот инструкция по применению.

Контакты

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

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

В избранное