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

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


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

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

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

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

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

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


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

§ Закончилось голосование в рамках Премии Рунета. В итоге 51 место. Спасибо всем проголосовавшим за сайт.
Даешь ТОР 30 в следующем году! :-)

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

§ Усилил проверку задачи 42, добавив данные, предложенные prima lux.

§ Произошли изменения в стане лидеров.
Johan решил 141 задачу, а Fiolent - 139-ю. В итоге 11 и 18 места соответственно.
Одна задача до третьего этапа осталась pvv (задач 137, время 9.976).

§ Продвинулись в рейтинге:
Kamin (135, 57.523)
nebiros (131, 83.634)
raul (127, 16.897)
maar (125, 87.628)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
Ant (113, 6.505)
Bulldozer (111, 179.063)
zjor (110, 74.475)
nadush (110, 105.820)
Ant,55 (110, 153.981)

§ На этой неделе сертифицированы:
OlechkaL (A07021904) [BK] - г.Раменское, МО, Россия
Sysa (A07023918) [BK] - г.Воронеж, Россия
KAYDevelop (A07004474) [BK] - г.Москва, Россия

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Белогурова К. (Katy_Ekb) 143 143 21 346 155 9.563 4.673 18 27 Oct 2007 18 Nov 2007
2 Креславский О.М. (Arcan) 143 143 21 346 269 17.514 7.720 18 26 Oct 2007 29 Nov 2007
3 Карасёва Н.В. (vlksm) 143 143 21 346 529 38.118 12.414 18 17 Oct 2007 30 Nov 2007
4 Голубин Р.С. (Roman S. Golubin) 143 143 21 346 795 69.101 43.885 18 22 Oct 2007 29 Nov 2007
5 Северюхин Ю.А. (Venser) 142 142 21 342 200 4.950 .655 14 19 Sep 2007 27 Nov 2007
6 Тарасов Д.Б. (Gavrila) 142 142 21 342 755 23.423 2.501 14 20 Sep 2007 30 Nov 2007
7 Солдатенков Ю.С. (SolYUtor) 142 142 21 342 490 17.853 2.695 14 20 Sep 2007 30 Nov 2007
8 Шептунов П.П. (Dzen) 142 142 21 342 279 8.186 3.499 14 02 Oct 2007 15 Nov 2007
9 Мурашкин И.В. (lepton) 142 142 21 342 544 15.800 5.539 14 18 Sep 2007 30 Nov 2007
10 Мальцев А.В. (Палкин) 142 142 21 342 422 49.738 7.690 14 13 Oct 2007 20 Nov 2007
11 Васьков Е.В. (Johan) 142 141 21 342 493 14.350 12.767 14 24 Nov 2007 30 Nov 2007
12 Бураков С.Г. (burakov58) 142 142 21 342 974 51.702 19.814 14 30 Sep 2007 09 Nov 2007
13 Агапов В. (KERBEROS) 135 141 20 326 89 6.143 1.262 11 20 Nov 2006 27 Jul 2007
14 Кувалкин К.С. (Cyrilus) 139 141 20 334 1014 12.506 2.519 11 04 Sep 2007 28 Nov 2007
15 Зверев Д.Л. (dimzv) 135 141 21 328 1469 9.278 4.938 11 12 Nov 2007 12 Nov 2007
16 Войнов П.Е. (pаparome) 141 142 21 338 765 2.788 .049 10 28 Sep 2007 30 Nov 2007
17 Любченко В.А. (IAS56) 141 142 21 338 377 177.859 20.130 10 16 Sep 2007 13 Nov 2007
18 Валуев Д.И. (Fiolent) 141 139 21 338 1547 122.201 66.360 10 29 Nov 2007 30 Nov 2007
19 Радар Ю.В. (inkerman) 139 143 21 332 60 5.354 .000 4 07 Oct 2007 25 Nov 2007
20 Юлдашев М.Р. (Snowbear) 139 139 21 331 791 4.162 .000 3 17 Sep 2007 30 Nov 2007

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Бондарев (LeXB) 57 57 109 17 126 897 30 Nov 2007
2 >Шишков А.В. (Flok) 53 53 101 19 120 1036 30 Nov 2007
3 Ryzhkov Y. (svinka) 58 58 110 4 114 1123 30 Nov 2007
4 >Евдокимов В. (Vit) 47 47 91 17 108 1219 30 Nov 2007
5 Николаев А. (Dron Shimoda) 56 56 107 0 107 1242 29 Nov 2007
6 Колобов А.А. (Alex.Kolobov) 36 49 80 19 99 1142 30 Nov 2007
7 >Primostka (prima lux) 47 48 89 9 98 1461 30 Nov 2007
8 >Вальтер (RomanWalter) 32 32 60 34 94 1595 30 Nov 2007
9 >Щеткин Д.С. (dante_mos) 48 48 91 0 91 1724 30 Nov 2007
10 >Греков Д.Б. (Крутой Vokerg) 37 37 69 19 88 1798 30 Nov 2007
11 >Заяц (Nel) 41 41 75 9 84 1912 30 Nov 2007
12 >Волков (Ghostyk) 31 36 63 17 80 1883 30 Nov 2007
13 >Михайлов Д.К. (den_mh) 21 65 40 33 73 556 29 Nov 2007
14 Ширинкин М. (M@xim_) 25 31 52 19 71 2133 30 Nov 2007
15 >Плаксин О. (Nedhogg) 32 32 53 17 70 2437 30 Nov 2007
16 Антипов М. (Mik) 35 37 69 0 69 2348 29 Nov 2007
17 Гром Н.Г. (_Kox_) 34 34 63 3 66 2666 30 Nov 2007
18 Стребулаев С. (Pseudonim) 26 26 45 17 62 2868 28 Nov 2007
19 >Белый Д. (Башибузук) 32 32 60 0 60 2988 30 Nov 2007
20 SircovSW (SircovSW) 29 29 45 15 60 3006 29 Nov 2007
21 >Долматов А.Е. (Дрон25) 29 34 50 9 59 2766 30 Nov 2007
22 >Алешин А.Н. (Aleks_Aleks) 25 39 58 0 58 2270 30 Nov 2007
23 Галицкий (aristotel) 27 34 56 0 56 2828 30 Nov 2007
24 >Сысоев А.В. (Sysa) 23 91 53 0 53 215 30 Nov 2007
25 >Бочагов Р.В. (DJAragorn) 14 60 25 27 52 642 30 Nov 2007
26 >jones (solon) 27 67 51 0 51 885 30 Nov 2007
27 >Степченко В.С. (s_vasya) 29 29 51 0 51 3729 30 Nov 2007

Изучаем SQL

Столбец UNIQUE с многочисленными NULL-значениями

Muthusamy Anantha Kumar (оригинал: UNIQUE Column with multiple NULL values )
Перевод Моисеенко С.И.

Как вы знаете, при создании ограничения UNIQUE на столбце, допускающем NULL-значения, SQL Server позволяет иметь только одно NULL-значение, тем самым поддерживается уникальность. Однако возникают ситуации, когда нам нужно иметь более одного NULL-значения в столбце, но по-прежнему поддерживать уникальность для не NULL значений.

В этой статье я собираюсь показать, как поддержать уникальность на столбце и иметь при этом многочисленные NULL-значения.

Предположим, что у нас имеется база данных Employee, и мы хотим создать следующую таблицу для хранения номеров карт социального страхования.

 

USE [master]
GO
IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'Employee')
DROP DATABASE [Employee]
GO
Create Database [Employee]
GO
use [Employee]
GO
Create Table Emp
([Employee id] int not NULL constraint Emp_pk primary key clustered,
[First Name] varchar(100) NULL,
[Last Name] varchar(100)  NULL,
[Nick Name] varchar(100) NULL,
[Social Security Number] int NULL)
GO

 

Мы знаем, что номер социального страхования уникален, поэтому добавим ограничение UNIQUE на столбец [Social Security Number].

 

Alter table Emp Add constraint ssn_unique UNIQUE
 ([Social Security Number] )

 

Теперь попробуем вставить некоторые данные, как показано ниже.

 

Insert into Emp ([Employee id],[First Name],[Last Name],
[Nick Name],[Social Security Number])
values(1,'Robert','Bates','Bob',111213422)

Insert into Emp ([Employee id],[First Name],[Last Name],
[Nick Name],[Social Security Number])
values(2,'Robert','Bates','Bob',121213422)

Insert into Emp ([Employee id],[First Name],[Last Name],
[Nick Name],[Social Security Number])
values(3,'Robert','William','Rob',131213422)

Insert into Emp ([Employee id],[First Name],[Last Name],
[Nick Name],[Social Security Number])
values(4,'Sonia','Keira','Sony',131413426)

 

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

Теперь давайте вставим одну строку без номера социального страхования:

 

Insert into Emp ([Employee id],[First Name],[Last Name],
[Nick Name],[Social Security Number])
values(5,'Mellisa','Brown','Mel',NULL)

 

Результат

(1 row(s) affected)

Теперь вставим еще одну строку без номера социального страхования:

 

Insert into Emp ([Employee id],[First Name],[Last Name],
[Nick Name],[Social Security Number])
values(6,'Sibey','Chikhs','Ciby',NULL)

 

Результат

Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'ssn_unique'. Cannot insert duplicate key in object 'dbo.Emp'.
The statement has been terminated.
(Нарушение ограничения UNIQUE KEY 'ssn_unique'. Невозможно вставить дубликат ключа в объект 'dbo.Emp'.
Выполнение оператора прервано.)

Это нормальное поведение ограничения UNIQUE на столбце с NULL. Оно допускает наличие только одной строки с NULL-значением. Однако это не то поведение, которое мы хотим получить для этого столбца. Нам требуется, чтобы столбец принимал уникальные значения и многочисленные NULL-значения.

Этого можно достичь с помощью вычисляемого столбца и добавления ограничения на вычисляемый столбец, а не на сам столбец номера социального страхования.

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

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

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

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

Контакты

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

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

В избранное