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

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


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

Выпуск 240 от 02 мая 2009 г.

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

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

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

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

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


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

§ По просьбе _WildMage сделал кнопочку, которая помечает все топики прочитанными, на форуме рейтинговых упражнений.

§ Исправил ошибку в подсказке к задаче 90, на которую обратила внимание lilyok.

§ Изменения среди лидеров (решенные за неделю задачи третьего этапа):
2. Arcan (155)

§ Продвинулись в рейтинге:
53. glassman (задач 136, время 196.928)
55. lemon (135, 8.835)
59. Nariman Kurbanoff (133, 105.033)
99. Avtolic (135, 16.547)

§ Новые лица в ТОР 100 и вернувшиеся туда:
51. mitronin (137, 306.489)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
101. _irina_ (123, 30.378)
140. vitaliiS (118, 100.905)
147. GrImago (116, 25.911)
178. amg__ (112, 12.263)
186. Mathematician (110, 2.124)
189. alx_ol (110, 79.148)

§ На этой неделе сертифицированы:
lemon (B09036417) [AR] - г.Уфа, Россия

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

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

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1 Карасёва Н.В. (vlksm)1 156 156 21 378 1080 91.111 61.984 57 20 Apr 2009 01 May 2009
2 Креславский О.М. (Arcan)1 155 155 21 376 817 73.639 54.738 55 26 Apr 2009 01 May 2009
3 Зотов П.Г. (Ozzy)3 151 154 21 365 408 143.850 160.719 53 22 Apr 2009 01 May 2009
4 Сальников С.А. ($erges)1 153 153 21 370 423 3.867 4.191 49 24 Apr 2009 01 May 2009
5 Умрихина Е.В. (Umrikhina)5 153 70 21 370 368 24.967 27.315 49 27 Apr 2009 29 Apr 2009
6 Сенкевич С.В. (GreyC)1 148 152 21 363 358 57.860 27.102 46 26 Jan 2009 28 Apr 2009
7 Селезнёв А.С. (Артём С.)1 146 152 21 357 444 47.248 37.524 46 25 Jan 2009 03 Mar 2009
8 Дроздков А.Н. (anddros)7 151 156 21 365 325 6.474 7.110 44 17 Apr 2009 30 Apr 2009
9 Никотин В.М. (@Nikotin)1 147 150 21 358 239 8.371 3.751 40 23 Apr 2009 01 May 2009
10 Мурашкин И.В. (lepton)1 141 156 21 342 1125 69.490 59.005 38 21 Apr 2009 29 Apr 2009
11 Печатнов В.В. (pvv)1 142 149 21 344 357 30.849 17.490 36 10 Oct 2008 01 May 2009
12 Муллаханов Р.Х. (rem)9 145 152 21 352 483 14.427 20.056 35 05 Jan 2009 10 Apr 2009
13 Шиндин А.В. (AlShin)10 143 150 21 347 79 20.458 7.203 30 05 Jan 2009 28 Jan 2009
14 Держальцев В.А. (MadVet)7 133 146 21 325 1257 60.783 28.482 28 24 Sep 2008 30 Dec 2008
15 Любченко В.А. (IAS56)6 132 146 21 324 615 403.343 373.617 28 11 May 2008 01 Dec 2008
16 Голубин Р.С. (Roman S. Golubin)3 137 145 21 330 1260 93.162 58.822 25 29 Jan 2009 08 Feb 2009
17 Nikolaenko A.V. (Shadow77)12 138 147 21 331 436 77.451 14.010 23 22 Oct 2008 11 Dec 2008
18 Солдатенков Ю.С. (SolYUtor)2 134 146 21 323 819 22.615 6.102 20 14 Aug 2008 01 Apr 2009
19 Белогурова К. (Katy_Ekb)19 129 143 21 313 552 10.666 4.673 18 27 Nov 2008 18 Jan 2009
20 Егоров А.Б. (ABEgorov)20 133 144 21 321 180 12.897 8.815 18 03 Aug 2008 12 Aug 2008

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Ермаков С.А. (sergioo) 49 49 91 0 91 1847 29 Apr 2009
2 Корчагин П. (pavka) 32 41 62 17 79 1766 30 Apr 2009
3 Пластинин С.А. (Пластинин) 13 67 24 34 58 574 01 May 2009
4 Chernyshev (DmitryChernyshev) 28 28 57 0 57 3921 29 Apr 2009
5 Ziganshin D.R. (ziga) 28 28 56 0 56 4006 28 Apr 2009
6 >Nowakowski M. (mnowakow(PL)) 12 52 21 34 55 957 01 May 2009
7 Фамилия (SimaYang) 23 67 38 0 38 572 30 Apr 2009
8 Andreeva L. (ale85) 17 20 37 0 37 5892 30 Apr 2009
9 Ветошкин И. (karam6anita) 13 36 27 6 33 1703 30 Apr 2009
10 Kuzichev S. (Simpex) 15 33 33 0 33 3484 30 Apr 2009
11 >Митронин А.А. (mitronin) 14 136 30 2 32 54 01 May 2009
12 >Chistik L. (Libelle Lidia) 14 19 28 3 31 6419 01 May 2009
13 >Денисов Ю.Н. (UraNik) 8 45 13 13 26 1186 01 May 2009
14 >Усик В.Н. (Vladius) 8 56 12 11 23 1261 01 May 2009
15 Шурыгин (Алексей) 8 26 21 0 21 4882 29 Apr 2009
16 Marina (just_me) 7 18 18 3 21 6304 28 Apr 2009
17 >Панасюк Е.Ю. (@Zhenia@) 13 13 21 0 21 9045 01 May 2009
18 marat (lemon) 10 135 20 0 20 55 28 Apr 2009
19 Дегтярь С.Б. (degt) 9 96 16 4 20 262 30 Apr 2009
20 Фокин Ф.А. (Philippok) 10 67 20 0 20 580 01 May 2009

Изучаем SQL

FAQ на задачу 11 (SELECT) рейтингового этапа

Моисеенко С.И.

Чтобы регулярно не отвечать на один и тот же вопрос, решил написать FAQ на эту задачу с последующей публикацией на sql-tutorial.ru. Формулировка задачи звучит так: "Найти тех производителей ПК, все модели ПК которых имеются в таблице PC". Вот типичный неверный запрос

SELECT DISTINCT maker
FROM Product
WHERE model IN (SELECT model FROM PC),

который сопровождается следующим вопросом: "Производитель E с моделью 1260 присутствует и в таблице PC, а правильный результат его не содержит. Почему?"

Ключевым моментом формулировки является слово "ВСЕ". Давайте посмотрим на модели производителя E.

Модели ПК, которые выпускает производитель E, дает следующий запрос:

SELECT model FROM Product WHERE maker='E' AND type='PC'

Результат:
model
--------
1260
2111
2112

А теперь проверим, какие из этих моделей имеются в таблице PC:

SELECT DISTINCT model FROM PC WHERE model IN(1260, 2111, 2112)

Оказывается, что из трех моделей только одна - 1260 - имеется в таблице PC. По условию же задачи там должны находиться ВСЕ три модели производителя E.

Собственно, решение этой задачи сводится к операции реляционного деления, только для каждого производителя у нас свой делитель (его модели). В упрощенном виде операцию реляционного деления можно записать так:

A(a, b) DIVIDEBY B(b)

где делимое (А) представляет собой бинарное (двухатрибутное) отношение, а делитель (B) - унарное. Результатом являются такие значения из первого атрибута отношения A, для каждого из которых значения второго атрибута содержат ВСЕ значения делителя.

Операция реляционного деления не является примитивной. Это означает, что эту операцию можно выразить через другие (примитивные) реляционные операции. Избыточность реляционной алгебры, предложенной Коддом, обусловлена ориентаций на практическое применение. Язык SQL тоже избыточен, в чем нас убеждает каждая задача, которую можно решить разными способами. Несмотря на это, аналога операции реляционного деления в нем нет. :-)

В заключение приведу представление реляционного деления, выраженного через другие операции.
A DIVIDEBY B = A[a] EXCEPT
((A[a] TIMES B) EXCEPT A) [a]

Здесь A[a] означает проекцию отношения A на атрибут a; TIMES - декартово произведение. "Подстрочный" перевод на язык SQL может выглядеть следующим образом:

SELECT a FROM A
EXCEPT
SELECT a FROM (
SELECT A.a, B.b FROM A, B
EXCEPT
SELECT a,b FROM A) X

Не следует использовать этот подстрочник как руководство к действию; есть более простые способы решить задачу. Впрочем, я не настаиваю. :-)

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

§ Приглашаем вас посетить новый проект - Интерактивный учебник по SQL.
   Ресурс позиционируется как "справочное обеспечение" для сайта SQL-EX.RU, но может использоваться и независимо от него.

§ Онлайновый выпуск рассылки можно почитать на сайте.

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

§ Хотите поддержать проект? Вот инструкция по применению. :-)

Контакты

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

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

В избранное