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

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


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

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

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

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

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

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


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

§ Поскольку важные новости могут появиться и между выпусками рассылки, я буду использовать (уже использую) для этого онлайновый выпуск рассылки, размещенный на сайте.
Форум не очень подходит для этого, т.к. сообщение там "убегает" и может оказаться на другой странице, прежде чем потеряет актуальность.
Так что заглядывайте, если хотите быть в курсе последних событий на сайте. Ссылка на эту страницу есть в разделе новостей на главной странице ниже подписного баннера.

§ На обучающий этап перешла 11-я задачу. Вместо нее выставлена новая задача сложности 1.

§ Изменил цвет фона страницы с упражнениями обучающего этапа в надежде уменьшить число вопросов относительно того, куда пропали задачи с номерами 1, 2 и т.д. :-)

§ С показателями 138 задач, время 11.319 подошел к третьему этапу Артём С.

§ Изменения среди лидеров (решеные задачи третьего этапа):
5. IAS56 (144)
7. MadVet (143)

§ Новые лица в ТОР 100 и вернувшиеся туда:
ABEgorov (задач 130, время 5.064)

§ Продвинулись в рейтинге:
35. Sysa (136, 24.850)
58. Ocean (133, 46.354)
71. Runaway (130, 15.114)
78. Лори (127, 29.256)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
135. Leshich (115, 99.023)
147. Gendalf (112, 86.125)
152. xuser (111, 1.010) - второе место на промещуточном этапе
153. mz (111, 25.623)

§ На этой неделе сертифицированы:
ABEgorov (B08028090) [AR] - г.Москва, Россия
АлексейПР (A08025965) [BK] - г.Москва, Россия
pref (A08022552) [BK] - г.Москва, Россия

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

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Печатнов В.В. (pvv) 146 12 21 357 105 19.165 6.326 28 01 Feb 2008 22 Feb 2008
2 Креславский О.М. (Arcan) 146 12 21 357 367 22.436 12.553 28 01 Feb 2008 22 Feb 2008
3 Карасёва Н.В. (vlksm) 145 12 21 354 636 53.277 26.801 25 01 Feb 2008 22 Feb 2008
4 Голубин Р.С. (Roman S. Golubin) 145 12 21 354 897 92.541 58.822 25 01 Feb 2008 21 Feb 2008
5 Любченко В.А. (IAS56) 143 144 21 347 533 287.729 130.012 21 19 Feb 2008 22 Feb 2008
6 Белогурова К. (Katy_Ekb) 143 134 21 347 267 10.733 4.673 18 16 Feb 2008 19 Feb 2008
7 Держальцев В.А. (MadVet) 143 143 21 347 1038 48.873 16.561 18 18 Feb 2008 19 Feb 2008
8 Войнов П.Е. (pаparome) 143 12 21 346 891 3.013 .213 17 01 Feb 2008 22 Feb 2008
9 Северюхин Ю.А. (Venser) 141 12 21 340 335 4.930 .655 14 01 Feb 2008 04 Feb 2008
10 Тарасов Д.Б. (Gavrila) 141 12 21 340 889 23.390 2.501 14 01 Feb 2008 22 Feb 2008
11 Солдатенков Ю.С. (SolYUtor) 140 142 21 339 490 17.852 2.695 14 20 Sep 2007 22 Feb 2008
12 Шептунов П.П. (Dzen) 140 142 21 339 279 8.130 3.499 14 02 Oct 2007 15 Nov 2007
13 Мурашкин И.В. (lepton) 142 134 21 343 700 15.853 5.539 14 21 Feb 2008 21 Feb 2008
14 Мальцев А.В. (Палкин) 140 142 21 339 422 48.788 7.690 14 13 Oct 2007 20 Jan 2008
15 Васьков Е.В. (Johan) 140 142 21 339 493 14.323 12.767 14 24 Nov 2007 11 Feb 2008
16 Бураков С.Г. (burakov58) 140 142 21 339 974 51.701 19.814 14 30 Sep 2007 09 Nov 2007
17 Валуев Д.И. (Fiolent) 142 141 21 343 1618 188.425 131.545 14 08 Feb 2008 22 Feb 2008
18 Агапов В. (KERBEROS) 133 141 20 323 89 6.140 1.262 11 20 Nov 2006 27 Jul 2007
19 Кувалкин К.С. (Cyrilus) 140 12 21 337 1172 12.779 2.519 11 09 Feb 2008 21 Feb 2008
20 Зверев Д.Л. (dimzv) 136 141 21 331 1503 9.352 4.938 11 16 Dec 2007 16 Dec 2007

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Безруков Н.Н. (ssew) 56 56 107 0 107 1355 21 Feb 2008
2 >Петюшко А.А. (AlexPet) 51 51 100 0 100 1530 22 Feb 2008
3 >Koshevarov D.V. (Asterlinta) 30 76 64 34 98 373 22 Feb 2008
4 Касьянов О.В. (holgret) 40 40 76 19 95 1704 20 Feb 2008
5 Калашников Д.А. (d_kalashnikov@mail.ru) 40 40 76 17 93 1748 18 Feb 2008
6 Зубрицкий Ю.Г. (shock) 38 38 73 9 82 2110 20 Feb 2008
7 >Егоров А.Б. (ABEgorov) 33 130 81 0 81 68 22 Feb 2008
8 Полбицын (Fobx) 36 44 62 17 79 1454 21 Feb 2008
9 Песоцкий А. (a v p) 32 32 60 19 79 2197 22 Feb 2008
10 Сучков А. (brevno1502) 38 46 77 0 77 1989 22 Feb 2008
11 Laktyunkin I. (Dfg5) 29 30 55 19 74 2359 17 Feb 2008
12 >Jialin L. (wildcloud) 41 41 73 0 73 2445 22 Feb 2008
13 >Кисляков (Ecliptic) 38 38 72 0 72 2496 22 Feb 2008
14 Азизов (yoyogik) 37 37 71 0 71 2543 22 Feb 2008
15 Bezwierzchny T. (TomGolab) 31 31 57 11 68 2707 22 Feb 2008
16 >Штерн А.Е. (HD82) 18 64 33 32 65 638 22 Feb 2008
17 Lipodat D. (dimik) 33 33 62 0 62 3060 18 Feb 2008
18 Срибняк А. (silver) 27 47 58 0 58 1969 22 Feb 2008
19 Башкирова Т. (gnomik) 29 38 58 0 58 2717 21 Feb 2008
20 >Михайлов И.Е. (IgorMZ) 30 30 57 0 57 3421 22 Feb 2008
21 Ирина Д. (Viper) 33 33 57 0 57 3428 21 Feb 2008
22 > (alp13) 21 32 48 7 55 2775 22 Feb 2008
23 Gorokhov (Look) 32 32 55 0 55 3604 20 Feb 2008
24 Balobanov D. (HerrDmitry) 11 59 20 34 54 694 20 Feb 2008
25 >Алексеев А.О. (Toxa Moskit) 29 29 54 0 54 3671 22 Feb 2008
26 Mikhael M.M. (misha_rcraft) 30 30 54 0 54 3677 22 Feb 2008
27 Марченко Л.В. (MarLa) 29 29 45 9 54 3693 22 Feb 2008
28 Dolzhenkov D.V. (DDV) 16 56 30 23 53 926 21 Feb 2008
29 Proskovics J. (Jurijs) 27 57 53 0 53 1306 19 Feb 2008
30 >Тимофеев А. (AlexBuzzin) 28 28 45 8 53 3796 22 Feb 2008
31 >Силантьев А. (sav) 28 28 51 0 51 3984 22 Feb 2008
32 Ермоленко В.В. (_villy_) 28 28 50 0 50 4055 20 Feb 2008
33 Sheludkov P. (Amorfis) 27 27 48 2 50 4078 22 Feb 2008

Изучаем SQL

Возвращаемся к основам: сравнение LEN() и DATALENGTH()

decipherinfosys (оригинал: Back to the basics: LEN() vs DATALENGTH() )
Перевод Моисеенко С.И.

В серии статей "Возвращаемся к основам" на этот раз мы продемонстрируем различие между функциями LEN() и DATALENGTH (), предназначенными для получения длины столбца или переменной. LEN() возвращает число символов в строке или переменной. DATALENGTH () возвращает число байтов, используемых для представления любой строки или выражения. Если значение строки или переменной есть NULL, то обе функции вернут NULL-значений. Однако между этими функциями имеются существенные различия.

Если строка содержит концевые пробелы, то функция LEN() не будет принимать их во внимание и вернет длину только до последнего непробельного символа. В то же время, DATALENGTH () учитывает полную длину, включая концевые пробелы. Пример:

COL_TEXT         LENGTH      DATA_LENGTH
----------     ----------  ---------------
Microsoft           9           14

Здесь DATALENGTH () определяет нам длину в 14 символов, в то время как функция LEN() не учла последние пять концевых пробелов и вернула длину, равную 9 символов.

Когда столбец или переменная, переданная в функцию, имеет тип данных, отличный от строкового (numeric, datetime или int), эти две функции возвращают различное значение. Функция DATALENGTH() возвращает внутреннюю длину типа данных столбца или переменной, а функция LEN() дает фактическое значение переменной или выражения. Вот пример для переменных типа данных int и datetime.

 

DECLARE @VAR3 DATETIME
SELECT  @VAR3=GETDATE()
SELECT  @VAR3 AS COL_TEXT, LEN(@VAR3) AS LENGTH, DATALENGTH(@VAR3) AS DATA_LENGTH
GO
DECLARE @VAR2 INT
SELECT @VAR2 = 347456
SELECT @VAR2 AS COL_TEXT, LEN(@VAR2) AS LENGTH, DATALENGTH(@VAR2) AS DATA_LENGTH
GO

 

Будет получен следующий результат.

COL_TEXT                LENGTH      DATA_LENGTH
----------------------- ----------- -----------
2007-10-17 15:11:40.913   19             8

COL_TEXT    LENGTH      DATA_LENGTH
----------- ----------- -----------
347456        6              4

В вышеприведенных результатах, DATALENGTH () возвратила значения 8 и 4 соответственно. Это внутренняя длина типа данных datetime и int соответственно. Можно проверить это с помощью команды sp_help. Длина, показанная командой sp_help, будет точно такой же, которую дает функция DATALENGTH(). Но функция LEN() возвращает фактическую длину строки. Это справедливо также для числовых столбцов. В зависимости от точности и масштаба DATALENGTH() может возвращать различные значения, в то время как LEN() всегда будет возвращать фактическую длину (которая включает также и десятичную точку). Ниже - подтверждающий сказанное пример.

 

SELECT  '523643.6451? AS COL_TEXT, LEN(523643.6451) AS LENGTH, DATALENGTH(523643.6451) AS DATA_LENGTH
UNION ALL
SELECT  '23643.645? AS COL_TEXT, LEN(23643.645) AS LENGTH, DATALENGTH(23643.645) AS DATA_LENGTH
GO

 

COL_TEXT      LENGTH    DATA_LENGTH
----------- ----------- -----------
523643.6451     11          9
23643.645       9           5

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

18-10-2007

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

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

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

Контакты

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

 

DECLARE @VAR1 VARCHAR(25)
SELECT @VAR1 = 'Microsoft     '
SELECT @VAR1 AS COL_TEXT, LEN(@VAR1) AS LENGTH, DATALENGTH(@VAR1) AS DATA_LENGTH

 

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

В избранное