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

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


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

Выпуск 330 от 22 января 2011 г.

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

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

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

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

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


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

§ Новая задача от qwrqwr (сложность 3 балла) выставлена под номером 167, заменив старую задачу того же автора.

§ Усилил проверку задачи 40 (SELECT, рейтинговая) вариантом данных, предложенным DoNotLook.

§ На недавней задаче обучающего этапа 109 (автор qwrqwr) проявился печально известный баг драйвера. На этот раз коллективный разум нашел решение его обхода. В итоге я реализовал вариант, предложенный anddros.
Хочется верить, что теперь не будет причин грешить на баг при неправильном решении задач. :-)

§ Самые популярные темы недели на форуме

Топик  Сообщений

Guest's book 28
251 (SELECT) 16
109 (Learn) 14
777  11
173 (SELECT) 10

 

§ Авторы недели на форуме

Автор  Число сообщений
qwrqwr   20
anddros   17
_yizraor   8
$erges   7

Pegoopik   6

 

§ Изменения среди лидеров (решенные за неделю задачи третьего этапа):
Смена лидера!
1. _yizraor (167, 171)
2. Arcan (173)
3. vlksm (173)
7. anddros (173)
8. Baser (173)
13. qwrqwr (167, 251)
29. O.o (148, 170)
30. Johan (173)
62. Pegoopik (173, 251)

§ Новые лица в ТОР 100 и вернувшиеся туда:
98. herrRo (задач 123, время 385.401)

§ Продвинулись в рейтинге:
80. risp (131, 18.306)
84. grap (129, 4.443)
89. tolikas (125, 32.116)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
101. WereWolf777 (122, 10.772)
105. Sergey79 (121, 1331.277)
147. iv_2609 (104, 64.778)
191. iljy (99, 1.840)
195. gdengam (100, 154.807)

§ На этой неделе сертифицированы:
grap (B11061334) [AR]- г. Москва, Россия

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

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

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Дубинский А.В. (_yizraor)1 176 171 23 412 429 279.454 355.163 97 2011-01-20 2011-01-21
2 Креславский О.М. (Arcan)1 175 173 23 409 1445 150.261 105.664 94 2011-01-15 2011-01-21
3 Карасёва Н.В. (vlksm)1 175 173 23 409 1715 153.501 122.714 94 2011-01-19 2011-01-21
4 Держальцев В.А. (MadVet)3 170 172 22 393 2097 144.065 101.318 86 2011-01-18 2011-01-20
5 Сальников С.А. ($erges)1 166 172 23 390 1050 8.511 7.886 83 2011-01-11 2011-01-21
6 Зотов П.Г. (Ozzy)1 168 73 22 389 1027 214.214 190.297 80 2011-01-15 2011-01-21
7 Дроздков А.Н. (anddros)5 168 173 23 389 964 10.122 9.357 74 2011-01-18 2011-01-21
8 Бежаев А.Ю. (Baser)7 169 173 23 389 258 93.172 69.034 74 2011-01-17 2011-01-21
9 Бойко Д.М. (Angellore)8 168 172 23 388 1245 1135.371 246.257 73 2011-01-07 2011-01-15
10 Тарасов Д.Б. (Gavrila)9 164 172 23 379 1964 99.480 57.053 69 2011-01-11 2011-01-21
11 Яцук А.А. (Faust_zp)1 148 65 22 352 1093 121.896 89.835 69 2010-02-01 2010-05-22
12 Шиндин А.В. (AlShin)10 140 161 21 326 776 295.115 687.573 66 2010-12-03 2010-12-06
13 >Курочкин П.А. (qwrqwr)12 162 251 23 373 437 107.826 63.892 63 2011-01-21 2011-01-21
14 Орлов М.В. (Eagleoff)11 161 155 23 372 963 92.807 59.074 60 2010-12-06 2011-01-21
15 Умрихина Е.В. (Umrikhina)1 146 67 23 343 949 41.388 43.454 56 2010-11-29 2010-12-25
16 Мурашкин И.В. (lepton)1 117 162 21 273 1706 122.879 636.879 42 2010-11-23 2010-12-03
17 Сенкевич С.В. (GreyC)1 117 2 21 284 393 57.700 23.321 38 2009-10-07 2010-01-01
18 Селезнёв А.С. (Артём С.)1 114 106 21 276 444 47.201 30.368 38 2009-01-25 2010-09-08
19 Печатнов В.В. (pvv)1 148 140 21 332 1085 40.612 15.512 33 2010-10-08 2011-01-21
20 Dvoryaninov V. (Валдай)18 153 172 23 341 550 158.389 162.672 32 2011-01-08 2011-01-21

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Агеев (Geep) 30 30 46 33 79 873 20 Jan 2011
2 Матвиенко О.А. (Mao29) 14 16 20 37 57 1350 21 Jan 2011
3 >Кузнецов В.С. (herrRo) 15 123 40 0 40 98 21 Jan 2011
4 >Костромин И.А. (elwood) 27 47 38 0 38 1054 21 Jan 2011
5 >Kinder M.M. (Kind) 22 22 33 0 33 2320 21 Jan 2011
6 >l0ng (l0ng_) 14 57 19 12 31 387 21 Jan 2011
7 Голубев Д.С. (DmitryGolubev) 24 64 31 0 31 437 20 Jan 2011
8 >wwer (qwerty) 16 26 26 0 26 1460 20 Jan 2011
9 Буянова (glassdragonfly) 0 1 0 25 25 2691 18 Jan 2011
10 >Целищев М.А. (m.a) 11 75 23 0 23 347 21 Jan 2011
11 >Леонов (leshy) 14 28 23 0 23 1927 21 Jan 2011
12 >Аксенов В.С. (DimirDevil) 2 5 2 18 20 1813 21 Jan 2011
13 >Dedyukiev K. (alban) 13 43 19 0 19 632 21 Jan 2011
14 Коваленок Е.С. (Ключи от танка) 0 0 19 19 3337 21 Jan 2011
15 М Р. (raxanar) 0 0 16 16 18 Jan 2011
16 Зрюмов Е.А. (Зрюмов) 13 32 16 0 16 939 20 Jan 2011
17 >Базавлук М. (DoNotLook) 4 44 5 11 16 989 21 Jan 2011
18 Розанов Ф.Ф. (RozanovFedor) 7 7 16 0 16 3544 21 Jan 2011
19 >Груздев С.С. (Sergeich) 10 64 14 0 14 443 21 Jan 2011
20 tetraren (tetraren) 5 70 10 4 14 584 20 Jan 2011
21 Mishakina A.A. (njus) 7 24 12 2 14 1562 20 Jan 2011

Изучаем SQL

Постраничная выборка записей в SQL Server 2005/2008

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

Такая задача часто возникает в тех случаях, когда количество строк, возвращаемых запросом, превышает разумный размер страницы. Примером может служить представление результатов поисковой выдачи или сообщений на форумах сайтов. Результаты сортируются по некоторым критериям (например, по релевантности или по дате сообщения), а затем разбиваются по N строк на страницу. Главная проблема здесь состоит в том, чтобы не загружать на клиента весь набор строк, а выводить только запрашиваемую пользователем страницу (мало кто просматривает все страницы подряд). При отсутствии такой возможности пришлось бы выполнять разбивку по страницам программными средствами клиента, что негативно сказывается на трафике и времени загрузки страницы.

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

Для примера рассмотрим разбивку по 2 записи на страницу строк из таблицы Laptop, упорядоченных по убыванию цены.

Вот таким образом можно добавить столбец, содержащий общее число строк в таблице:

 FROM Laptop
 SELECT *, COUNT(*) OVER() AS total

Заметим, что подобное можно было сделать в рамках стандарта SQL-92 с помощью подзапроса:

 SELECT *, (SELECT COUNT(*) FROM Laptop) AS total
 FROM Laptop

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

Читать далее...

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

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

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

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

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

Контакты

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

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

В избранное