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

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


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

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

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

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

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

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


Прекрасную половину человечества в лице читательниц рассылки поздравляем с праздником 8 Марта!
Любви и счастья!

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

§ По просьбе vlksm и вовсе не из-за праздника :-) вывожу время исполнения запроса для задач на третьем этапе, если решение проходит основную базу.

§ А вот это действительно из-за праздника. Так будет выглядеть некоторое время десятка лучших. С праздником, дорогие женщины!

§ Теперь за текущей позицией в рейтинге можно наблюдать непосредственно на странице с упражнениями. Пока работает только на упражнениях SELECT, но если понравится, могу сделать и на DML. Мне показалось, что время загрузки страницы не изменилось. Если будет тормозить, сделаю эту возможность опциональной.

§ Выполнил компенсацию времени из-за недоступности сайта с 05.03.2008 по 06.03.2008.

§ Подлатал проверку задач (SELECT):
11 (сообщение от Yeti),
9 (Alex Iprus),
7 (SASemen)

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

§ Изменения среди лидеров (решенные за неделю задачи третьего этапа):
3. vlksm (146) - третий участник, решивший все задачи.
5. IAS56 (140)
6. MadVet (144)

§ Новые лица в ТОР 100 и вернувшиеся туда:
xuser (задач 133, время 1.839) - третий промежуточный результат.

§ Продвинулись в рейтинге:
33. zerga (136, 1.971)
34. modicus (136, 8.450)
37. Sysa (136, 24.850)
38. ivan.korobov (136, 45.795)
39. Scorpion (136, 63.973)
53. Dizil (132, 4.738)
61. iglbeat (133, 18.841)
80. Лори (127, 29.256)
82. Онуфрий Голохвастов (127, 119.952)
94. Lexus (124, 37.533)
99. Олег (124, 9.175)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
101. Gendalf (124, 98.008)
114. Ded I (120, 7.240)
117. nadush (120, 146.124)
129. Cергей L (117, 21.737)
138. Leshich (115, 99.023)

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

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

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

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

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

Лучшие результаты (ТОР 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 146 21 357 127 19.165 6.326 28 23 Feb 2008 07 Mar 2008
2 Креславский О.М. (Arcan) 146 146 21 357 389 22.436 12.553 28 23 Feb 2008 07 Mar 2008
3 Карасёва Н.В. (vlksm) 146 146 21 357 667 64.764 38.288 28 03 Mar 2008 07 Mar 2008
4 Голубин Р.С. (Roman S. Golubin) 145 145 21 354 919 92.541 58.822 25 23 Feb 2008 05 Mar 2008
5 Любченко В.А. (IAS56) 145 145 21 354 548 394.846 365.049 25 05 Mar 2008 07 Mar 2008
6 Держальцев В.А. (MadVet) 144 144 21 351 1055 54.302 21.989 22 06 Mar 2008 06 Mar 2008
7 >Белогурова К. (Katy_Ekb) 143 11 21 347 287 10.733 4.673 18 07 Mar 2008 07 Mar 2008
8 Войнов П.Е. (pаparome) 143 146 21 346 916 3.013 .213 17 26 Feb 2008 06 Mar 2008
9 Северюхин Ю.А. (Venser) 140 142 21 339 335 4.930 .655 14 01 Feb 2008 04 Feb 2008
10 Тарасов Д.Б. (Gavrila) 141 142 21 340 914 23.390 2.501 14 26 Feb 2008 07 Mar 2008
11 Солдатенков Ю.С. (SolYUtor) 139 142 21 338 490 17.852 2.695 14 20 Sep 2007 07 Mar 2008
12 Шептунов П.П. (Dzen) 139 142 21 338 279 8.130 3.499 14 02 Oct 2007 15 Nov 2007
13 Мурашкин И.В. (lepton) 142 142 21 343 705 15.853 5.539 14 26 Feb 2008 04 Mar 2008
14 Мальцев А.В. (Палкин) 139 142 21 338 422 48.788 7.690 14 13 Oct 2007 20 Jan 2008
15 Васьков Е.В. (Johan) 139 142 21 338 493 14.323 12.767 14 24 Nov 2007 11 Feb 2008
16 Бураков С.Г. (burakov58) 139 142 21 338 974 51.701 19.814 14 30 Sep 2007 09 Nov 2007
17 Валуев Д.И. (Fiolent) 142 142 21 343 1638 188.425 131.545 14 28 Feb 2008 07 Mar 2008
18 Агапов В. (KERBEROS) 132 141 20 322 89 6.140 1.262 11 20 Nov 2006 27 Jul 2007
19 Кувалкин К.С. (Cyrilus) 140 141 21 337 1190 12.779 2.519 11 27 Feb 2008 06 Mar 2008
20 Зверев Д.Л. (dimzv) 135 141 21 330 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 >Gmyz (Zephid) 29 51 66 34 100 882 07 Mar 2008
2 >карпунин А.С. (llllllll) 30 68 56 34 90 509 07 Mar 2008
3 >Павловский П. (cka3ka) 39 39 74 3 77 2263 07 Mar 2008
4 >Zalesov A. (Lexsys) 20 31 47 28 75 1976 07 Mar 2008
5 Gawin L. (G@wcio) 19 62 35 34 69 680 07 Mar 2008
6 Рабская А.Л. (ptaha) 29 40 64 0 64 2303 07 Mar 2008
7 >Ermoshkin J. (wazaaap) 33 33 61 0 61 3116 07 Mar 2008
8 Сидоров В.А. (m00nru) 19 45 47 12 59 1458 02 Mar 2008
9 Первушин А.С. (Arol...) 12 52 24 34 58 915 07 Mar 2008
10 mirek (diuk) 30 30 54 0 54 3658 06 Mar 2008
11 >Rzhevskiy (Karapuzzz) 26 60 52 0 52 855 07 Mar 2008
12 lukasz K.-. (borii) 26 26 49 3 52 3851 06 Mar 2008
13 Минчакова М.Д. (Белочка) 25 36 50 0 50 3049 06 Mar 2008
14 >Mermeladovich (Vlad Marmelad) 21 31 46 3 49 3192 07 Mar 2008
15 >Грищенко С.В. (SergeyKiev) 28 28 48 1 49 4165 07 Mar 2008
16 Baranov (myth) 26 26 47 0 47 4330 06 Mar 2008
17 Мельник М.Ю. (Muller) 7 56 14 32 46 817 07 Mar 2008
18 pkhako (pkhako1) 15 43 28 18 46 1566 05 Mar 2008
19 >Сальников С.А. ($erges) 20 91 45 0 45 234 07 Mar 2008
20 Pashin A.M. (GrImago) 19 32 40 5 45 3334 06 Mar 2008
21 Iulian (Iursachi) 26 26 45 0 45 4606 04 Mar 2008
22 Hatake (Hatake) 24 24 42 0 42 4844 06 Mar 2008
23 >Kozhaev V.P. (Vova_ko) 18 38 41 0 41 2515 07 Mar 2008
24 >Волков В.В. (uncle Stein) 20 26 41 0 41 4344 07 Mar 2008
25 >Bezwierzchny T. (TomGolab) 20 70 40 0 40 468 07 Mar 2008

Изучаем SQL

Мифы SQL: Truncate нельзя откатить, поскольку эта команда не журнализируется

Denis Gobo (оригинал: SQL Myth: Truncate Cannot Be Rolled Back Because It Is Not Logged )
Перевод Моисеенко С.И.

Я изумляюсь, как много людей все еще думают, что команда TRUNCATE TABLE не журнализируется. Журнализация, хотя и минимальная, все же выполняется; вот что говорит по этому поводу Books On Line:

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

Оператор DELETE удаляет строки по одной, для каждой удаляемой строки в журнале транзакций делается запись.

Давайте проверим, сможем ли мы откатить транзакцию.

Создайте следующую таблицу и выполните выборку:

 

CREATE TABLE dbo.Enfarkulator (ID int IDENTITY PRIMARY KEY, SomeOtherCol varchar(49))
GO
INSERT dbo.Enfarkulator VALUES(1)
INSERT dbo.Enfarkulator VALUES(1)

SELECT * FROM dbo.Enfarkulator

 

ID    SomeOtherCol
1     1
2     1

Теперь выполните следующее:

 

BEGIN TRAN
    TRUNCATE TABLE dbo.Enfarkulator
    SELECT * FROM dbo.Enfarkulator
ROLLBACK TRAN

 

ID    SomeOtherCol
(0 row(s) affected)

Как вы можете видеть, таблица была очищена. А теперь снова выберем данные:

 

SELECT * FROM dbo.Enfarkulator

 

ID    SomeOtherCol
1     1
2     1

Упс, данные на месте; и это говорит о том, что вы можете откатывать очистку и возвращать все данные. Имеется два главных отличия между truncate и delete, которые я хочу здесь объяснить.

Truncate не сохраняет значение автоинкремента (identity), а delete - сохраняет

Это еще одно отличие между truncate и delete, truncate будет сбрасывать значение identity, в то время как delete - нет. Запустите следующий код, чтобы увидеть, как это работает:

 

CREATE TABLE dbo.Enfarkulator2 (ID int IDENTITY, SomeOtherCol varchar(49))
GO
INSERT dbo.Enfarkulator2 VALUES(1)
INSERT dbo.Enfarkulator2 VALUES(1)

SELECT * FROM dbo.Enfarkulator2
SELECT * FROM dbo.Enfarkulator

DELETE dbo.Enfarkulator2
TRUNCATE TABLE dbo.Enfarkulator

INSERT dbo.Enfarkulator VALUES(1)
INSERT dbo.Enfarkulator2 VALUES(1)

SELECT * FROM dbo.Enfarkulator2
SELECT * FROM dbo.Enfarkulator

 

Значение id в таблице Enfarkulator было сброшено, а в таблице Enfarkulator2 - нет. Чтобы сделать то же самое с delete, вам необходимо выполнить команду dbcc checkident reseed. Вот как это можно сделать:

 

DELETE dbo.Enfarkulator2
TRUNCATE TABLE dbo.Enfarkulator

DBCC CHECKIDENT (Enfarkulator2, RESEED, 0)

 

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

 

INSERT dbo.Enfarkulator VALUES(1)
INSERT dbo.Enfarkulator2 VALUES(1)

SELECT * FROM dbo.Enfarkulator2
SELECT * FROM dbo.Enfarkulator

 

Вы не можете очистить таблицу, на которую есть ссылка по внешнему ключу.

Если имеется таблица, на которую есть ссылка из другой таблицы с ограничением foreign key, то вы не можете выполнить операцию truncate для первой таблицы. Вот тому подтверждение.

 

CREATE TABLE dbo.Enfarkulator3 (ID int IDENTITY, SomeOtherCol varchar(49))
GO
INSERT dbo.Enfarkulator3 VALUES(1)

 

Теперь добавим внешний ключ:

 

ALTER TABLE dbo.Enfarkulator3 ADD CONSTRAINT [FK_Fark3_Fark]
FOREIGN KEY ([ID]) REFERENCES [dbo].[Enfarkulator] ([ID])

 

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

 

TRUNCATE TABLE Enfarkulator

 

Server: Msg 4712, Level 16, State 1, Line 1
Cannot table 'Enfarkulator' because it is being referenced by a FOREIGN KEY constraint.
(Нельзя выполнить truncate для таблицы 'Enfarkulator', поскольку на нее ссылается ограничение FOREIGN KEY)

Вот видите, нельзя.

--Все убираем за собой;-)

 

DROP TABLE dbo.Enfarkulator3,dbo.Enfarkulator2,dbo.Enfarkulator

 

13-06-2007

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

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

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

Контакты

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

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

В избранное