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

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


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

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

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

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

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

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


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

§ Добавил данные для проверки задачи 6 DML. Дырку в проверке заметил EXisTAnZ.
Добавил проверочные данные от paparome для задачи 146.
Добавил проверочные данные от pvv для задачи 144.

§ Продолжается формирование обучающего этапа. Туда перекинута задача 12 из первого рейтингового этапа. Вместо нее выставлена новая задача сложности 1 по базе "Окраска".

§ Изменения среди лидеров:
pvv решил 146 задачу (1 место).
Arcan - 146 (2 место).
vlksm - 144 (3 место).
paparome - 141 (6 место), при этом он остается потенциальным лидером.
MadVet - 141 (13 место).

§ Новые лица в сотне на этой неделе не появились.

§ Продвинулись в рейтинге:
yuriy.rozhok (задач 136, время 22.487)
zerga (135, 1.971)
modicus (135, 8.151)
ivan.korobov (135, 45.747)
Bulldozer (134, 169.342)
Артём С. (133, 7.758)
Scorpion (132, 58.989)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
143. comrade (112, 135.826)
155. serge77777 (109, 15.508)
159. Leshik (108, 13.063)
169. mz (107, 24.700)

§ На этой неделе сертифицированы:
Scorpion (B08021662) [AR] - г.Межгорье, Россия
s_light (A08019851) [BK] - г.Москва, Россия
denis_g (A08025952) [BK] - г.Нерюнгри, Россия

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

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

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

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

Лучшие результаты (ТОР 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 01 Feb 2008
2 >Креславский О.М. (Arcan) 146 12 21 357 367 22.436 12.553 28 01 Feb 2008 01 Feb 2008
3 >Карасёва Н.В. (vlksm) 145 12 21 354 636 53.277 26.801 25 01 Feb 2008 01 Feb 2008
4 >Голубин Р.С. (Roman S. Golubin) 145 12 21 354 897 92.541 58.822 25 01 Feb 2008 01 Feb 2008
5 Белогурова К. (Katy_Ekb) 141 143 21 343 155 9.559 4.673 18 27 Oct 2007 01 Feb 2008
6 >Войнов П.Е. (pаparome) 143 12 21 346 891 3.013 .213 17 01 Feb 2008 01 Feb 2008
7 Любченко В.А. (IAS56) 141 145 21 342 497 253.551 95.835 17 14 Jan 2008 25 Jan 2008
8 >Северюхин Ю.А. (Venser) 141 12 21 340 335 4.930 .655 14 01 Feb 2008 01 Feb 2008
9 >Тарасов Д.Б. (Gavrila) 141 12 21 340 889 23.390 2.501 14 01 Feb 2008 01 Feb 2008
10 Солдатенков Ю.С. (SolYUtor) 140 142 21 339 490 17.852 2.695 14 20 Sep 2007 01 Feb 2008
11 Шептунов П.П. (Dzen) 140 142 21 339 279 8.130 3.499 14 02 Oct 2007 15 Nov 2007
12 Мурашкин И.В. (lepton) 140 142 21 339 544 15.737 5.539 14 18 Sep 2007 12 Jan 2008
13 Держальцев В.А. (MadVet) 140 142 21 339 1019 38.894 7.309 14 30 Jan 2008 30 Jan 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 30 Nov 2007
16 Бураков С.Г. (burakov58) 140 142 21 339 974 51.701 19.814 14 30 Sep 2007 09 Nov 2007
17 Агапов В. (KERBEROS) 133 141 20 323 89 6.140 1.262 11 20 Nov 2006 27 Jul 2007
18 Кувалкин К.С. (Cyrilus) 139 141 21 336 1137 12.779 2.519 11 05 Jan 2008 29 Jan 2008
19 Зверев Д.Л. (dimzv) 136 141 21 331 1503 9.352 4.938 11 16 Dec 2007 16 Dec 2007
20 Валуев Д.И. (Fiolent) 139 142 21 335 1547 121.139 66.360 10 29 Nov 2007 01 Feb 2008

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Куваев А.А. (alhimic) 37 37 68 32 100 1486 01 Feb 2008
2 >Alekseev A.G. (Nector) 40 40 76 0 76 2256 01 Feb 2008
3 Широчкин Ю.В. (DiffMan) 19 46 37 32 69 1137 31 Jan 2008
4 Фомин (Эээх...) 36 36 65 0 65 2826 31 Jan 2008
5 Тимофеев Д.А. (Тимофеев Дмитрий) 33 33 61 3 64 2869 28 Jan 2008
6 Костылев Д.В. (DeColo®es) 33 33 62 0 62 2988 30 Jan 2008
7 Дурнев А.Н. (DANSoft) 27 34 58 3 61 2636 31 Jan 2008
8 Раздобудько С.А. (SQLFanatic) 31 31 59 0 59 3177 30 Jan 2008
9 Зайцев А.А. (salex) 12 56 26 30 56 783 01 Feb 2008
10 >Sargsyan H.M. (Hermine_Sargsyan) 30 30 54 1 55 3509 01 Feb 2008
11 >Panasyuk (Vitek_Live) 29 29 53 0 53 3686 01 Feb 2008
12 Кудряков А.И. (AKudrakov) 8 67 17 34 51 497 01 Feb 2008
13 Иванов С.В. (Skypppher) 29 29 50 0 50 3966 01 Feb 2008
14 Nazarova V. (lean) 23 36 48 0 48 2945 01 Feb 2008
15 Лядов С.А. (Serg Alex Lad) 8 60 13 34 47 672 01 Feb 2008
16 >Забурдаев А.Г. (mr.Lonely) 15 58 28 16 44 922 01 Feb 2008
17 Шепелев С.Н. (k@ch) 16 52 30 14 44 1148 01 Feb 2008
18 Неватус С.Н. (NSN) 9 27 26 16 42 2691 30 Jan 2008
19 Шаньгина Т.И. (Tasha1981) 20 29 38 0 38 4199 31 Jan 2008
20 >Botsenyuk I. (aprog) 11 57 22 13 35 717 01 Feb 2008
21 Пупкин (Vassily Pupkin) 22 22 35 0 35 5342 31 Jan 2008

Изучаем SQL

Сравнение явного и неявного преобразования типа

LewisC (оригинал: Mini-Tip #10 - Implicit vs. Explicit Conversion )
Перевод Моисеенко С.И.

Начну с того, что я полагаю, что неявное преобразование - это плохо. Еще хуже. Зло. Нет-нет, серьезно! Теперь позвольте мне дать определения преобразований обоих типов и объяснять, почему я так считаю.

Преобразование

Под преобразованием я понимаю приведение хранимых данных из одного типа к другому типу данных. Например, символьное поле "1" может быть преобразовано к числовому 1. Символьное поле может быть преобразовано к полю даты, если оно правильно отформатировано. Форматирование преобразования может управляться командой и маской формата (явное преобразование), или Вы можете положиться на Оракл и/или инструмент третьих фирм, который сделал бы это за Вас (неявное преобразование).

Неявное преобразование

Примером неявного преобразования может быть:

 

SELECT *
  FROM emp
  WHERE hiredate between '01-JAN-1981' and '01-APR-1981';

 

Если Вы используете схему scott и оригинальную таблицу emp, то должны получить две строки. Возможно. Если Вы используете sql*plus или другой инструмент, который не устанавливает маску формата даты по умолчанию, и окажется, что маска формата базы данных по умолчанию совпадает с той, что я ввел, или Вы используете инструмент, который установил маску формата в соответствии с той, что я ввел.

Явное преобразование

 

SELECT *
  FROM emp
  WHERE hiredate between TO_DATE('01-JAN-1981', 'DD-MON-YYYY')
                     and TO_DATE('01-APR-1981', 'DD-MON-YYYY');

 

Если Вы выполните этот оператор, то должны получить две строки, независимо от того, какой инструмент или какие маски формата по умолчанию установлены.

Отметьте, что различие состоит в том, что я ЯВНО выполнил преобразование из символьного представления к дате с помощью функции TO_DATE, в которой я указал правильную маску формата.

Явное преобразование требует дополнительного набора. Это верно.

Так что использовать?

Всегда, всегда, всегда используйте явное преобразование. Помимо того, что это намного проще читать и поддерживать, явное преобразование гарантирует, что, если формат по умолчанию когда-нибудь будет изменен, ваш код продолжит работать.

Вы не поверите, сколько мне встречалось проблем с производственными системами, вызванных лишь тем, что кто-то поигрался с параметрами nls в базе данных.

Всегда, всегда, всегда используйте явное преобразование.

Что говорит Оракл?

Это выдержка непосредственно из справочного руководства к Oracle 10g:

Преобразование данных

Как правило, выражение не может содержать значения данных разных типов. Например, выражение не может перемножить 5 и 10, а затем добавить 'JAMES'. Однако Оракл поддерживает как неявное, так и явное преобразование значений из одного типа данных в другой.

Неявное и явное преобразование данных

Оракл рекомендует, чтобы Вы задавали явные преобразования, вместо того, чтобы полагаться на неявные или автоматические преобразования, по следующим причинам:

? Операторы SQL легче понять, когда Вы используете функции явного преобразования типа данных.

? Неявное преобразование типа данных может оказать отрицательное влияние на производительность, особенно если тип данных столбца преобразуется к типу данных константы, а не наоборот.

? Неявное преобразование зависит от контекста, в котором оно происходит и, возможно, не будет работать одинаково в каждом случае. Например, неявное преобразование значения типа данных VARCHAR2 может возвратить неожиданный год в зависимости от значения параметра NLS_DATE_FORMAT.

? Алгоритмы для неявного преобразования подвержены изменениям при обновлении версий продуктов Оракл. Поведение явных преобразований более предсказуемо.

Я полагаю, что эти аргументы применимы не только к Оракл. Использование явных преобразований следует отнести к лучшим методам для любой базы данных и любого языка программирования.

Если Вы обнаружите случай, когда неявное преобразование окажется лучше, чем явное, пожалуйста, напишите комментарий к этому посту и объясните. Мне ничего подобное не приходит в голову.

23-05-2007

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

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

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

Контакты

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

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

В избранное