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

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


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

http://www.sql-ex.ru

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

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

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

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

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


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

§ Выставлены новые задачи вместо старых. Авторы задач:
dorin_larsen (32 задача)
Shurgenz (52)
Snowbear (110)
pаparome (113)

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

<>Лучшие результаты, показанные на упражнении #110

No Surname Seconds Date
1 Юлдашев М.Р. (Snowbear) 7 14 Mar 2006
2 Войнов П.Е. (pаparome) 2677 15 Mar 2006
3 Абашин П.И. (Dizil) 7413 15 Mar 2006
4 Крижевич С.А. (yaff) 9967 16 Mar 2006
5 Kamaev V.M. (Heromantor) 18748 14 Mar 2006
6 Самохвалов В. (ValdemarES) 21846 14 Mar 2006
7 Валуев Д.И. (Fiolent) 25026 17 Mar 2006
8 Зырин В.Е. (Vezyr) 26081 14 Mar 2006
9 Голубин Р.С. (Roman S. Golubin) 48728 15 Mar 2006
10 Страшников А.С. (EffEct) 166041 16 Mar 2006
11 Балдин О.Б. (Weed) 171992 17 Mar 2006

§ Следует отметить появление в десятке Vezyr (задач 137, время 20.618), который подошел к 138 задаче.

§ Поскольку практически все лидеры поучаствовали в решении новых задач, Отмечу продвижение в рейтинге только тех, кто находится за пределами 20-ки, опубликованной ниже. Итак,
VIG (133, 13.885)
User_Name (130, 23.615)
Sp999 (130, 35.757)
Weed (123, 84.944)
xax (119, 55.199)
f.nietzsche (108, 17.815)
Lady (103, 16.136)
gps (97,95.458)
Eugeniе (97, 19.112)

§ В сотне появился новый участник:
arm (94, 8.159)

§ Сертифицированы на прошедшей неделе:
Julia_M (B06007120) [AR] (Россия, г.Москва)

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 LastSolved LastVisit
1 Kamaev V.M. (Heromantor) 138 113 20 320 128 9.067 14 Mar 2006 17 Mar 2006
2 Голубин Р.С. (Roman S. Golubin) 138 113 20 320 210 20.835 16 Mar 2006 17 Mar 2006
3 >Валуев Д.И. (Fiolent) 137 110 20 318 925 47.930 17 Mar 2006 17 Mar 2006
4 Войнов П.Е. (pаparome) 137 113 20 316 203 1.769 15 Mar 2006 17 Mar 2006
5 Юлдашев М.Р. (Snowbear) 137 113 20 316 239 3.448 14 Mar 2006 17 Mar 2006
6 Абашин П.И. (Dizil) 137 113 20 316 203 3.776 15 Mar 2006 17 Mar 2006
7 Самохвалов В. (ValdemarES) 137 113 20 316 117 7.788 14 Mar 2006 15 Mar 2006
8 Крижевич С.А. (yaff) 137 113 20 316 259 14.801 16 Mar 2006 17 Mar 2006
9 >Зырин В.Е. (Vezyr) 137 137 20 316 63 20.618 17 Mar 2006 17 Mar 2006
10 Страшников А.С. (EffEct) 137 113 20 316 305 59.973 16 Mar 2006 17 Mar 2006
11 Кувалкин К.С. (Cyrilus) 136 52 20 315 476 5.213 15 Mar 2006 17 Mar 2006
12 Тарасов Д.Б. (Gavrila) 136 52 20 315 200 16.183 14 Mar 2006 17 Mar 2006
13 >Духин А. (Shark) 135 52 20 311 249 2.785 17 Mar 2006 17 Mar 2006
14 Зверев Д.Л. (dimzv) 135 52 20 311 863 3.124 16 Mar 2006 16 Mar 2006
15 Иванов А.Н. (Goapsy) 135 52 20 311 124 15.932 14 Mar 2006 14 Mar 2006
16 Леденев С.А. (Shurgenz) 134 52 20 309 573 11.574 14 Mar 2006 17 Mar 2006
17 Держальцев В.А. (MadVet) 134 32 20 309 334 18.469 16 Mar 2006 16 Mar 2006
18 Бураков С.Г. (burakov58) 133 137 20 307 400 13.129 05 Mar 2006 16 Mar 2006
19 Галиаскаров Э.Г. (Galogen) 133 137 20 307 392 72.172 19 Dec 2005 15 Mar 2006
20 Мельникова И.А. (Iris_m) 133 137 20 307 622 96.833 24 Jan 2006 10 Feb 2006

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Трикоз Ю.А. (yta) 57 57 105 17 122 409 17 Mar 2006
2 >Яковлев А.В. (AYakovlev) 51 51 90 28 118 436 17 Mar 2006
3 >Ширяева Е.И. (wblp) 57 57 105 9 114 463 17 Mar 2006
4 Pohodzhai R. (rpohodzhai) 45 45 75 3 78 957 17 Mar 2006
5 >Sudakov (Sudakov) 43 43 76 1 77 968 17 Mar 2006
6 Berezhnoi V. (Vetal) 32 47 61 8 69 825 14 Mar 2006
7 >Fedchenko (Bless) 38 38 69 0 69 1128 17 Mar 2006
8 Полякова М.В. (Рита) 38 38 69 0 69 1129 17 Mar 2006
9 >Елоев О.К. (OlegE) 31 88 66 0 66 119 17 Mar 2006
10 >Островский Е. (ЕО) 26 61 48 15 63 240 17 Mar 2006
11 Martynenko S.V. (sez) 37 37 52 9 61 1324 17 Mar 2006
12 Антонов Д.Ю. (3ter) 34 34 60 0 60 1319 12 Mar 2006
13 k (k111) 35 35 59 0 59 1347 17 Mar 2006
14 >Левина (tali) 29 41 58 0 58 1116 17 Mar 2006
15 Chawla (Chinni) 28 28 49 9 58 1368 13 Mar 2006
16 >Сорокин А.С. (gnolmen) 29 53 57 0 57 756 17 Mar 2006
17 Журихин А.В. (Журихин) 32 32 57 0 57 1423 15 Mar 2006
18 K A. (etony) 19 19 39 15 54 1502 15 Mar 2006
19 bakshaev (lelchik) 31 31 52 0 52 1548 16 Mar 2006
20 >Дутов С.Е. (ds) 18 74 38 13 51 168 17 Mar 2006
21 >Коробейников С.А. (Sergik2006) 19 33 42 7 49 1167 17 Mar 2006
22 >Korotkov V.V. (цепеш) 28 28 49 0 49 1617 17 Mar 2006
23 Лещев С.А. (BMSerg) 15 48 27 20 47 541 15 Mar 2006
24 Мухамедшин Р.Н. (cisur) 24 48 43 3 46 867 16 Mar 2006
25 >Hovsepyan A. (mumush) 27 27 46 0 46 1728 17 Mar 2006
26 Grebennikov S. (sntr) 26 26 43 0 43 1810 16 Mar 2006

Изучаем SQL

Определяемые пользователем функции (UDF)

Microsoft Corp. (оригинал: Microsoft SQL Server 2000 User Defined Functions Whitepaper )
Выборочный перевод Моисеенко С.И.

...

Типы функций

SQL Server 2000 поддерживает три типа UDF:

" Скалярнозначные функции
" Однострочные (inline) табличнозначные функции
" Многооператорные табличнозначные фунции

Скалярнозначные функции

Пользовательская скалярная функция возвращает в качестве ответа единственное значение при каждом вызове функции. Функции являются скалярнозначными, если предложение RETURNS определяет один из скалярных типов данных. Скалярнозначные функции могут быть определены с помощью нескольких операторов Transact-SQL. Например:

CREATE FUNCTION CubicVolume
    (@CubeLength decimal (4,1), @CubeWidth decimal (4,1), @CubeHeight decimal (4,1))
RETURNS decimal (12,3) -- тип данных возвращаемого значения.
AS
BEGIN
     RETURN (@CubeLength * @CubeWidth * @CubeHeight)
END

В данном примере предложение RETURNS определяет, что функция будет возвращать скалярное значение типа decimal. Предложение RETURNS может использовать любой из скалярных типов данных, которые поддерживает SQL Server, за исключением timestamp, text, ntext или image.

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

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

Select dbo.CubicVolume(12.2,10.6,10.0)

Однострочные табличнозначные функции

Для однострочных табличнозначных функций предложение RETURNS задает TABLE без указания списка столбцов. Однострочные функции представляют собой табличнозначные функции, которые определяются единственным оператором SELECT, представляющим тело функции. Столбцы, включающие типы данных таблицы, возвращаемой функцией, определяются списком SELECT оператора SELECT, который определяет функцию. Например:

CREATE FUNCTION fn_CustomerNamesInRegion
     (@RegionParameter nvarchar (30))
RETURNS TABLE
AS
RETURN (
     SELECT CustomerID, CompanyName
     FROM Northwind.dbo.Customers
     WHERE Region = @RegionParameter
     )

Предложение RETURNS в примере просто указывает TABLE без списка столбцов. Также единственный оператор RETURN, который содержит оператор SELECT, определяет тело функции.

Ниже приведен пример вызова рассмотренной выше однострочной табличнозначной функции:

SELECT * FROM fn_CustomerNamesInRegion (N'WA')

Многооператорные табличнозначные функции

Если предложение RETURNS задает тип TABLE с определением столбцов и их типов данных, функция является многооператорной табличнозначной функцией. Например:

CREATE FUNCTION LargeOrderShippers (@FreightParm money)
RETURNS @OrderShipperTab TABLE
     (
     ShipperID int,
     ShipperName nvarchar (80),
     OrderID int,
     ShippedDate datetime,
     Freight money
     )
AS
BEGIN
     INSERT @OrderShipperTab
         SELECT S.ShipperID, S.CompanyName,
         O.OrderID, O.ShippedDate, O.Freight
         FROM Shippers AS S INNER JOIN Orders AS O
         ON S.ShipperID = O.ShipVia
         WHERE O.Freight > @FreightParm
     RETURN
END

Предложение RETURNS в данном примере определяет локальную возвращаемую переменную типа table с именем @OrderShipperTab, а также определяет структуру таблицы с определениями столбцов.

Операторы в теле функции вставляют строки в переменную @OrderShipperTab, создавая табличный набор строк, который возвращается функцией.

Заметим, что оператор RETURN не имеет аргумента. Значение возвращаемой переменной функции возвращается как значение функции.

Ниже приводится пример, который вызывает многооператорную табличнозначную функцию:

SELECT *
FROM LargeOrderShippers ($500)

Вызов табличнозначной функции может иметь последующий табличный алиас. Вы можете использовать этот алиас для ссылки на столбцы, которые возвращаются функцией в предложениях запроса SELECT и WHERE.

...

Прочитать всю статью

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

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

Контакты

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

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

В избранное