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

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


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

SQL Exercises

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

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

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

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

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


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

§ После восстановления решений возникли некоторые недоразумения с временем решения. В ряде случаев время решения задачи оказалось равным 0. Удивительно то, что не всех это порадовало :-), и несколько авторов таких решений обратились ко мне с вопросами по этому поводу.
Сейчас я принимаю меры по восстановлению справедливости, и прошу вас обращаться, если что-то в результатах вам покажется странным.

§ Палкин стал седьмым (и шестым в рейтинге), кто решил все задачи (время на третьем этапе 7.690).

§ Продвинулись в рейтинге:
runaway (130, 15.136)
modicus (129, 7.693)
elka (122, 52.658)
azavyalov1 (118, 36.796)

 

 

§ На этой неделе сертифицированы:
JetuS (A07017880) [BK] (г.Хмельницкий, Украина)
Aligor (A07018733) [BK] (г.Москва, Россия)

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

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

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

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

Лучшие результаты (ТОР 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 341 36 4.912 .655 14 08 Apr 2007 26 Jun 2007
2 Солдатенков Ю.С. (SolYUtor) 142 142 21 341 320 17.807 2.695 14 03 Apr 2007 08 May 2007
3 Шептунов П.П. (PavelPS) 142 142 21 341 119 8.145 3.499 14 25 Apr 2007 27 Jun 2007
4 Мурашкин И.В. (lepton) 142 142 21 341 371 15.737 5.539 14 29 Mar 2007 29 Jun 2007
5 Карасёва Н.В. (vlksm) 142 142 21 341 389 31.344 5.912 14 30 May 2007 29 Jun 2007
6 Мальцев А.В. (Палкин) 142 142 21 341 310 27.974 7.690 14 23 Jun 2007 25 Jun 2007
7 Голубин Р.С. (Roman S. Golubin) 142 142 21 341 588 55.391 34.203 14 29 Mar 2007 29 Jun 2007
8 Агапов В. (KERBEROS) 138 141 20 330 89 6.163 1.262 11 20 Nov 2006 09 Apr 2007
9 Кувалкин К.С. (Cyrilus) 141 141 20 336 901 12.541 2.519 11 14 May 2007 29 Jun 2007
10 Зверев Д.Л. (dimzv) 138 141 20 330 1141 9.294 4.938 11 19 Dec 2006 22 Dec 2006
11 Войнов П.Е. (pаparome) 141 142 21 337 616 2.765 .049 10 02 May 2007 29 Jun 2007
12 Тарасов Д.Б. (Gavrila) 138 140 21 330 577 20.220 .513 7 26 Mar 2007 27 Jun 2007
13 Васьков Е.В. (Johan) 140 140 21 334 253 12.786 11.402 7 29 Mar 2007 16 Jun 2007
14 Валуев Д.И. (Fiolent) 139 140 20 329 1345 117.088 62.302 4 11 May 2007 22 Jun 2007
15 Юлдашев М.Р. (Snowbear) 139 139 21 330 642 4.132 .000 3 21 Apr 2007 28 Jun 2007
16 Креславский О.М. (Arcan) 139 139 21 330 67 9.932 .315 3 07 Apr 2007 25 Jun 2007
17 Держальцев В.А. (MadVet) 135 139 20 321 540 34.190 3.085 3 08 Oct 2006 19 Oct 2006
18 Палий С.А. (PS_Sergey) 136 139 20 322 212 15.704 4.188 3 01 Dec 2006 03 Dec 2006
19 Солопов А.Н. (15th) 138 138 21 327 125 16.082 .000 0 25 Apr 2007 28 Jun 2007
20 Бородкина М.И. (marishkin) 138 138 21 327 145 19.015 .000 0 10 Apr 2007 03 May 2007

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Назаренко П. (pashan) 43 43 79 0 79 1807 27 Jun 2007
2 >Степенко В.В. (ВВВ) 37 37 68 0 68 2226 29 Jun 2007
3 >Белогурова (Katy_Ekb) 28 107 64 0 64 134 29 Jun 2007
4 >Приходько А.Я. (apr_b322) 36 36 59 3 62 2489 29 Jun 2007
5 >Дмитриев А.М. (Felix1001) 19 65 37 23 60 469 29 Jun 2007
6 Адаманов Д.В. (OLAPER) 29 57 60 0 60 558 28 Jun 2007
7 Давлетов А.В. (Light Yagami) 18 57 36 21 57 728 28 Jun 2007
8 >sh (x66) 30 32 57 0 57 2655 29 Jun 2007
9 Lew (Lukom!) 25 53 53 0 53 1232 25 Jun 2007
10 Тесленко М.С. (X-Maksimus) 29 29 52 0 52 3154 27 Jun 2007
11 >Коротких В.Ю. (Тритонище) 23 29 46 2 48 3059 29 Jun 2007
12 Dhanapal (HemaG) 25 25 41 3 44 3709 29 Jun 2007
13 >Burago D. (kristobald) 26 26 43 0 43 3764 29 Jun 2007
14 Тимофеева А.А. (Puzick) 3 67 8 34 42 432 29 Jun 2007
15 >Фенев А.С. (Arseniy) 25 25 40 0 40 3993 29 Jun 2007
16 Pilipenko A. (Darrko) 23 23 36 3 39 4108 27 Jun 2007
17 Wilson J. (Jeyasingh Thomas) 14 29 35 3 38 2963 26 Jun 2007
18 >Борунов А.В. (ProfLupin) 21 21 29 8 37 4306 29 Jun 2007
19 >Cherkashin D.U. (DmitryCher) 14 54 28 7 35 973 29 Jun 2007
20 >Шеожева О. (oliyliy) 18 44 35 0 35 1839 29 Jun 2007
21 Чудинов Д.И. (alias) 18 26 35 0 35 3754 28 Jun 2007
22 Дащак П. (Pan4o) 23 23 34 0 34 4649 27 Jun 2007
23 >Пухаев А.Г. (Grotesque) 23 23 34 0 34 4656 29 Jun 2007
24 Indupalli P.S. (Parasuram) 12 12 23 9 32 4978 29 Jun 2007
25 >Карелин Р. (Roman Karelin) 8 50 16 15 31 778 29 Jun 2007
26 >Петров М. (tmaster) 22 22 31 0 31 5077 29 Jun 2007
27 >Мухаметшин Р.С. (Schummi) 11 113 30 0 30 111 29 Jun 2007
28 >Rysev (MGR) 12 109 30 0 30 171 29 Jun 2007
29 >Potehin A. (AleksandrP) 20 29 30 0 30 4041 29 Jun 2007

Изучаем SQL

Новые возможности T-SQL в SQL Server 2005 - Часть 1/3 (продолжение, начало в вып.143)

Kevin S. Goff, Microsoft MVP (оригинал: Take Five with SQL Server 2005: New T-SQL Capabilities in SQL Server 2005 - Part 1 of 3 )
Перевод Моисеенко С.И.

2 - OUTPUT

Как поступить в SQL Server 2000, если вы захотите сразу запросить таблицу после оператора INSERT или UPDATE, чтобы вернуть значение столбца, подвергнувшегося изменению? Это может быть результат вычисляемого столбца или значение столбца identity, или некоторое другое значение по умолчанию. Обычно вы либо следом пишите оператор SELECT в хранимой процедуре, либо из своего приложения посылаете вызов обратно на сервер, чтобы получить этот результат. А как в SQL Server 2000 сразу вернуть и старое, и новое значения, после обновления данных (UPDATE)? Зачастую вам приходится обращаться к системным таблицам INSERTED и DELETED, которые видны только в триггере.

Например, в SQL Server 2000, если мы хотим определить значение столбца IDENTITY после выполнения оператора INSERT, нам часто приходится использовать функцию SQL Server SCOPE_IDENTITY:

DECLARE @tTestTable TABLE ( MainPK [int] IDENTITY(1,1) NOT NULL, Name Char(50))
INSERT INTO @tTestTable VALUES ('steve Goff')
SELECT SCOPE_IDENTITY()

SQL Server 2005 предоставляет новый оператор OUTPUT, который позволяет разработчикам решать эти задачи более удобно и эффективно.

Используя OUTPUT в сочетании с оператором INSERT/UPDATE, мы можем легко прочитать добавленную/измененную информацию. Вместо использования SCOPE_IDENTITY, мы можем сразу ВЫВЕСТИ значение столбца IDENTITY:

DECLARE @tTestTable TABLE ( MainPK [int] IDENTITY(1,1) NOT NULL, Name Char(50))
INSERT @tTestTable OUTPUT Inserted.MainPK VALUES ('steve Goff')

Если Вы выполняете несколько операторов INSERT, и вам необходим после этого список вставленных строк, Вы можете перенаправить ВЫВОД в таблицу:

DECLARE @tTestTable TABLE ( MainPK [int] IDENTITY(1,1) NOT NULL, Name Char(50))
DECLARE @tTemp table (mainpk int)
INSERT @tTestTable OUTPUT Inserted.MainPK into @tTemp VALUES ('Kevin Goff')
INSERT @tTestTable OUTPUT Inserted.MainPK into @tTemp VALUES ('steve Goff')
SELECT * FROM @tTemp

Далее, если Вы выполняете оператор UPDATE и хотите сразу увидеть новое/старое значения из системных таблиц INSERTED и DELETED, Вы можете сделать следующее:

DECLARE @tTest TABLE ( MainPK [int] IDENTITY(1,1) NOT NULL ,Amount decimal(10,2))
INSERT INTO @tTest VALUES (100)
INSERT INTO @tTest VALUES (200)
INSERT INTO @tTest VALUES (300)

UPDATE @tTest SET Amount = Amount * 10
OUTPUT DELETED.MainPK, DELETED.Amount AS OldValue, INSERTED.Amount AS NewValue

И снова, если Вы хотите перенаправить результаты OUTPUT в табличную переменную, то можно сделать следующее:

DECLARE @tTemp TABLE (MainPK int, OldValue Decimal(10,2), NewValue Decimal(10,2))

UPDATE @tTest SET Amount = Amount * 10
OUTPUT DELETED.MainPK, DELETED.Amount AS OldValue, INSERTED.Amount AS NewValue INTO @tTemp

Одно замечание: не думайте о новой возможности OUTPUT как о замене аудиторской журнализации с помощью триггеров базы данных. Думайте об этом как об удобном средстве получить мгновенную обратную связь без необходимости обращаться к дополнительным операторам и/или лишним обращениям к серверу.

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

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

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

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

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

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

Контакты

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

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

В избранное