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

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


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

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

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

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

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

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


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

§ Усилена проверка задачи 141. Автор (vlksm) добавила новые данные, учтя пожелания Johan.
§ pref обнаружил прореху в проверке задачи 41. Подлатал.
§ Добавил данные для случая, отмеченного Dared to dream на форуме задачи 25.

§ Изменений в стане лидеров на этой неделе не произошло.

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

§ Продвинулись в рейтинге:
Kamin (136, 57.578)
nebiros (136, 84.127)
Kos123 (127, 28.959)
Donald (124, 5.721)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
zjor (115, 82.248)
Bulldozer (113, 186.829)
iglbeat (111, 16.343)
CasperGhost (111, 46.407)
nadush (111, 105.946)
ImKot (110, 6.502)
Чумазик (110, 46.446)

§ На этой неделе сертифицированы:
Дмитрий Хитрый (A07021355) [BK] - г.Москва, Россия
Emi (A07021515) [BK] - г.Харьков, Украина

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

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

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

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

Лучшие результаты (ТОР 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 05 Dec 2007
3 Карасёва Н.В. (vlksm) 143 143 21 346 529 38.118 12.414 18 17 Oct 2007 03 Dec 2007
4 Голубин Р.С. (Roman S. Golubin) 143 143 21 346 795 69.101 43.885 18 22 Oct 2007 07 Dec 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 07 Dec 2007
7 Солдатенков Ю.С. (SolYUtor) 142 142 21 342 490 17.853 2.695 14 20 Sep 2007 07 Dec 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 04 Dec 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 05 Dec 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 07 Dec 2007
18 Валуев Д.И. (Fiolent) 141 139 21 338 1547 122.201 66.360 10 29 Nov 2007 07 Dec 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 06 Dec 2007

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 >Антошкин С.А. (Serj_80) 56 56 107 11 118 1073 07 Dec 2007
2 >Шалавин Д.Е. (Juster) 49 49 89 9 98 1498 07 Dec 2007
3 >Хван А.Э. (SoftDeveloper) 47 47 88 0 88 1812 07 Dec 2007
4 >Шериев А.М. (Atreides) 36 52 76 11 87 1261 07 Dec 2007
5 >Сизов Д.С. (D-m-i-t-r-y) 38 38 69 17 86 1857 07 Dec 2007
6 >Кривицкий М.В. (Hallween) 46 46 86 0 86 1858 07 Dec 2007
7 >Губайдуллин Р.М. (RufatGM) 40 42 76 0 76 2106 07 Dec 2007
8 >Панов О.Л. (OL71) 37 37 71 0 71 2408 07 Dec 2007
9 >Вальтер (RomanWalter) 34 66 65 0 65 527 07 Dec 2007
10 Alex (l2x) 33 33 62 0 62 2896 07 Dec 2007
11 Volkov D. (Woldan) 30 30 52 9 61 2953 06 Dec 2007
12 Рыхлецкий К.В. (KPbIC) 26 51 59 0 59 1484 03 Dec 2007
13 >Lyapko S. (Glukas) 25 48 58 0 58 1679 07 Dec 2007
14 Глухов А.В. (San4ezzz) 31 31 58 0 58 3166 07 Dec 2007
15 Ляшко Н. (nat-nat) 22 57 43 13 56 1007 07 Dec 2007
16 Дадажанов Ф.М. (appd) 17 33 36 19 55 2240 07 Dec 2007
17 Babishen A. (qawsedrf) 29 29 52 2 54 3485 03 Dec 2007
18 Barmin A.O. (hometown) 25 25 54 0 54 3499 07 Dec 2007
19 >Хадеев А.С. (Notna) 25 46 53 0 53 1938 07 Dec 2007
20 >Olczyk D. (DariuszOlczyk (POLAND)) 24 25 42 11 53 3526 07 Dec 2007
21 >Резников В.В. (vadik) 29 29 53 0 53 3624 07 Dec 2007
22 >Михеев М.В. (goode) 26 31 52 0 52 3249 07 Dec 2007
23 Заяц (Nel) 12 53 26 25 51 773 06 Dec 2007
24 Тарахно Д.А. (dtarakhno) 15 28 36 15 51 1945 03 Dec 2007
25 Евлампиев А.В. (Pyc) 26 30 50 0 50 3409 06 Dec 2007
26 >Колесник С.В. (_ushastiy_) 28 28 50 0 50 3876 07 Dec 2007
27 >Долгов А.В. (Botinok) 28 28 50 0 50 3879 07 Dec 2007

Изучаем SQL

Столбец UNIQUE с многочисленными NULL-значениями (окончание, начало в вып.166)

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

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

 

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

Alter table Emp Add MySSN as case when [Social Security Number]
 is NULL then [Employee id] else [Social Security Number] end
GO

 

Давайте теперь наложим ограничения UNIQUE на вычисляемый столбец:

 

Alter table Emp Add constraint ssn_unique UNIQUE ([MySSN] )
go

 

Теперь вставим некоторые данные:

 

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)

 

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

 

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)

 

Результат

(1 row(s) affected)

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

 

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] varchar(12) NULL)
go

 

Давайте создадим вычисляемый столбец для номера социального страхования:

 

Alter table Emp Add MySSN as case when [Social Security Number]
 is NULL then convert(varchar(12),[Employee id]) else [Social Security Number] end
go

 

Теперь добавим ограничение UNIQUE на вычисляемый столбец:

 

Alter table Emp Add constraint ssn_unique UNIQUE ([MySSN] )
go

 

Теперь вставим некоторые данные:

 

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

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

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

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

 

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

 

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)

 

Результат

(1 row(s) affected)

Заключение

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

21-11-2007

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

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

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

Контакты

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

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

В избранное