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

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


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

SQL Exercises

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

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

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

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

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


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

§ Число участников, дошедших до второго этапа, превысило 1000 человек.

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

§ IAS56 решил 141 задачу. Результат - 13 место в рейтинге (время на третьем этапе - 10.238).

§ Новые лица в сотне и вернувшиеся в нее:
lexaNRJ (задач 118, время 52.659)

§ Продвинулись в рейтинге:
=Maxim= (138, 25.151)
burakov58 (133, 17.298)
_x_F1WC (127, 42.153)
Katy_Ekb (125, 3.369)
maar (120, 40.602)

§ На этой неделе сертифицированы:
Alynder (A07009846) [BK] (г.Москва, Россия)
vru010 (A07020098) [BK] (г.Москва, Россия)
7_x_F1WC (B07016162) [AR] (г.Первоуральск, Россия)
Katy_Ekb (B07019372) [AR] (г.Екатеринбург, Россия)

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

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

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

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

Лучшие результаты (ТОР 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 13 Jul 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 13 Jul 2007
4 Мурашкин И.В. (lepton) 142 142 21 341 371 15.737 5.539 14 29 Mar 2007 13 Jul 2007
5 Карасёва Н.В. (vlksm) 142 142 21 341 389 31.344 5.912 14 30 May 2007 12 Jul 2007
6 Мальцев А.В. (Палкин) 142 142 21 341 310 27.974 7.690 14 23 Jun 2007 02 Jul 2007
7 Голубин Р.С. (Roman S. Golubin) 142 142 21 341 588 55.391 34.203 14 29 Mar 2007 07 Jul 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 10 Jul 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) 139 140 21 332 678 20.360 .513 7 05 Jul 2007 13 Jul 2007
13 >Любченко В.А. (IAS56) 140 141 21 334 312 166.908 10.238 7 13 Jul 2007 13 Jul 2007
14 Васьков Е.В. (Johan) 140 140 21 334 253 12.786 11.402 7 29 Mar 2007 16 Jun 2007
15 Валуев Д.И. (Fiolent) 139 140 20 329 1345 117.088 62.302 4 11 May 2007 10 Jul 2007
16 Юлдашев М.Р. (Snowbear) 139 139 21 330 642 4.132 .000 3 21 Apr 2007 13 Jul 2007
17 Креславский О.М. (Arcan) 139 139 21 330 67 9.932 .315 3 07 Apr 2007 06 Jul 2007
18 Держальцев В.А. (MadVet) 135 139 20 321 540 34.190 3.085 3 08 Oct 2006 19 Oct 2006
19 Палий С.А. (PS_Sergey) 136 139 20 322 212 15.704 4.188 3 01 Dec 2006 03 Dec 2006
20 Солопов А.Н. (15th) 138 138 21 327 125 16.082 .000 0 25 Apr 2007 13 Jul 2007

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Строганов Д.С. (pr1k0l) 53 53 102 30 132 708 13 Jul 2007
2 >Битков А.В. (Alexander B) 50 50 90 21 111 1024 13 Jul 2007
3 >Knyazev A. (Knyazev Alexey) 33 56 72 34 106 585 13 Jul 2007
4 >Telepnev S.L. (viruc) 43 48 79 19 98 1163 13 Jul 2007
5 Лихобабин А.А. (madGluk) 32 32 57 30 87 1636 13 Jul 2007
6 Tull J. (Jethro Tull) 24 57 47 32 79 584 13 Jul 2007
7 >Петров А.А. (alive.) 37 37 70 9 79 1837 13 Jul 2007
8 >Столов (ipist) 39 39 74 0 74 2016 13 Jul 2007
9 >Косякин А. (deilux) 28 28 49 19 68 2265 13 Jul 2007
10 >Воротников А.А. (Lurd) 28 28 49 15 64 2443 13 Jul 2007
11 >Zolotyh (Guy) 22 82 51 2 53 257 13 Jul 2007
12 >Рогова (Relati) 28 28 49 1 50 3335 13 Jul 2007
13 Чопик К.В. (katena) 28 28 49 0 49 3417 11 Jul 2007
14 Maleev D.S. (dimkO) 28 28 49 0 49 3433 12 Jul 2007
15 Расюк Е.А. (bsd) 24 55 48 0 48 1175 13 Jul 2007
16 >kap_stager (kap_stager) 29 29 47 0 47 3604 13 Jul 2007
17 Alexander (ship) 19 34 44 2 46 1883 13 Jul 2007
18 >Пименов А.Ю. (Craig) 27 27 46 0 46 3639 13 Jul 2007
19 Лясковский В.Л. (Dared to dream) 12 54 26 19 45 720 11 Jul 2007
20 Яковлевич Д.И. (Dimayk) 14 45 31 14 45 1164 12 Jul 2007
21 Почуев Д.И. (poledit) 23 23 35 9 44 3777 12 Jul 2007
22 Тараповский В.В. (BenLaden) 21 28 43 0 43 3349 11 Jul 2007
23 >Petrova (SvetlanaP) 26 29 40 3 43 3722 13 Jul 2007
24 >Купцов А.В. (Sprot) 13 48 27 15 42 1049 13 Jul 2007
25 Клюшенков В.А. (MagRUS) 26 27 42 0 42 3856 12 Jul 2007
26 >fedotova (Eka) 25 25 40 0 40 4060 13 Jul 2007

Изучаем SQL

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

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

В статье за прошлый месяц я описал возможности PIVOT, OUTPUT и TOP N в T-SQL 2005. Сейчас я хочу рассказать еще о трех новинках языка T-SQL 2005:

  • Новый оператор APPLY, который (как указывает название) позволяет разработчикам более эффективно применяться/интегрировать таблично-значные функции пользователя (UDF) в запросах SQL.
  • Новые функции ранжирования для более легкого и эффективного присвоения ранговых номеров в результирующем наборе.
  • Новая возможность обработки ошибок TRY….CATCH, позволяющая разработчикам и администраторам баз данных писать более понятный код хранимых процедур

    1 - APPLY

    Как разработчик приложений для баз данных, я часто пишу таблично-значные функции UDF в SQL Server. Если Вы не знакомы с таблично-значными UDF, скажу, что это определяемые пользователем функции, которые выполняют запрос и возвращают результаты в виде табличной переменной. Обычно таблично-значные функции создают, если Вы хотите многократно использовать результирующий набор в различных запросах (таким же образом Вы бы писали любые другие повторно используемые функции и вызывали их из различных программ). Например, в базе данных AdventureWorks в SQL Server 2005, если бы я захотел возвратить результирующий набор TOP N заказов на поставку для определенного служащего, то написал бы UDF, возвращающую табличную переменную:

    USE [AdventureWorks]
    GO /****** Object: UserDefinedFunction [dbo].[GetTopPurchaseOrders] Script Date: 03/28/2007 07:18:30 ******/
    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetTopPurchaseOrders]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
    DROP FUNCTION [dbo].[GetTopPurchaseOrders]
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    CREATE FUNCTION [dbo].[GetTopPurchaseOrders]
    (@EmployeeID INT, TopN INT)
    RETURNS TABLE
    AS
    RETURN
    SELECT TOP(@TopN) PurchaseOrderID, EmployeeID, VendorID, OrderDate, TotalDue
    FROM Purchasing.PurchaseOrderHeader WHERE EmployeeID = @EmployeeID
    ORDER BY TotalDue DESC

    Чтобы выполнить эту UDF, которая должна вернуть 10 лучших заказов для Служащего с идентификатором 164, я бы написал следующий запрос:

    SELECT * FROM [dbo].[GetTopPurchaseOrders] (164,10)

    Пока я могу все это сделать в SQL 2000 (за исключением того, что я должен буду закодировать TOP N по-другому - см. статью за прошлый месяц). Однако, если я хочу выполнить UDF для каждой записи в базе данных employee, я должен был бы использовать временную таблицу или табличную переменную как часть моего запроса.

    Другими словами, SQL Server 2000 не позволял мне непосредственно ПРИМЕНЯТЬ таблично-значные UDF к строкам в другой таблице как часть SQL-запроса. Однако Сервер SQL 2005 вводит новый оператор APPLY, который дает возможность разработчикам более эффективно интегрировать таблично-значные UDF:

    SELECT Emp.EmployeeID, Emp.LoginID,
    TopOrders.PurchaseOrderID, TopOrders.VendorID, TopOrders.OrderDate, TopOrders.TotalDue
    FROM HumanResources.Employee Emp
    CROSS APPLY [dbo].[GetTopPurchaseOrders] (Emp.EmployeeID,5) AS TopOrders
    ORDER BY Emp.EmployeeID, TotalDue DESC

    Вышеприведенный запрос читает таблицу Employee и передает идентификатор каждого Служащего (EmployeeID) как параметр в UDF. Синтаксис включает оператор CROSS APPLY, чтобы применить UDF к каждому EmployeeID:

    CROSS APPLY [dbo].[GetTopPurchaseOrders] (Emp.EmployeeID,5) AS TopOrders

    (продолжение следует...)

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

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

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

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

    Контакты

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

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

    В избранное