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

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


Информационный Канал Subscribe.Ru

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

http://www.sql-ex.ru

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

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

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

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


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

§ Устранены замеченные баги обновленной страницы с упражнениями на SELECT. Если у вас будут проблемы при работе с этой страницей, можете воспользоваться старой, которая пока еще доступна с именем exercises2.php.

§ Добавлены проверочные данные под задачу #57. Дыру в проверке заметила kenga.

§ Учитывая то, что в ТОР 100 присутствуют только участники второго этапа, соответствующая страница была оптимизирована и претерпела некоторые изменения. Вот список некоторых столбцов с толкованием:
Number of Sel_ex - число решенных упражнений второго этапа (SELECT);
Last_Sel - номер последнего решенного упражнения (SELECT);
Number of DML_ex - число решенных упражнений по DML;
Scores - сумма очков, полученных при решении задач второго этапа по SELECT и задач по DML (ранее подсчитывались только очки по задачам на SELECT). Поскольку это первое поле сортировки результатов, то таблица будет иметь несколько другой вид, чем прежде;
Days - число дней, прошедших от регистрации до последнего решенного задания;
Days_2 - чистое время, потраченное на решение задач (SELECT) второго этапа (второе поле сортировки);
LastSolved - дата получения последнего решения;
LastVisit - дата последнего посещения сайта.

Как выглядит теперь рейтинг, смотрите ниже.

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 LastSolved LastVisit
1 Зверев Д.Л. (dimzv) 76 136 19 198 450 2.291 27 Jan 2005 28 Jan 2005
2 Сныткин В.Л. (vlad_snt) 76 136 19 198 142 7.398 22 Jan 2005 29 Jan 2005
3 Валуев Д.И. (Fiolent) 76 136 19 198 503 19.337 19 Jan 2005 29 Jan 2005
4 Hakobyan H.H. (hamlet) 76 136 19 198 114 33.952 21 Jan 2005 29 Jan 2005
5 Мельникова И.А. (Iris_m) 76 136 19 198 254 66.765 21 Jan 2005 28 Jan 2005
6 Spirin (spirin) 75 136 19 195 158 13.467 21 Jan 2005 24 Jan 2005
7 Леденев С.А. (Shurgenz) 73 136 19 193 146 8.298 11 Jan 2005 11 Jan 2005
8 >Иткин И.Л. (joseph_itkin) 75 136 17 191 338 2.809 29 Jan 2005 29 Jan 2005
9 >Кувалкин К.С. (Cyrilus) 71 131 19 189 66 4.690 29 Jan 2005 29 Jan 2005
10 Михайлов В.Г. (mslava) 73 136 17 189 498 9.731 26 Oct 2004 26 Oct 2004
11 Шипунов И. (IAS) 64 125 19 175 226 68.035 25 Jan 2005 29 Jan 2005
12 Пятница О.А. (Robin) 65 128 17 174 606 70.821 22 Oct 2004 12 Dec 2004
13 Якутин Н.В. (ZrenBy) 73 136 6 169 511 3.991 14 Sep 2004 18 Jan 2005
14 Рассказов А. (ra) 61 121 19 168 70 29.764 28 Jan 2005 29 Jan 2005
15 Губарь Д.К. (DEathkNIghtS) 61 124 17 166 23 1.046 03 Nov 2004 03 Nov 2004
16 Смирнов А. (Leshich) 61 124 17 166 205 84.171 30 Sep 2004 19 Nov 2004
17 Gershovich (VIG) 58 121 17 159 629 6.899 30 Nov 2004 29 Jan 2005
18 Булаев В.В. (Kvix) 58 121 17 159 124 24.267 27 Dec 2004 06 Jan 2005
19 Забара М.С. (максим111) 58 121 17 159 122 67.157 30 Dec 2004 14 Jan 2005
20 Карабанов А. (gipa) 70 133 0 157 139 5.019 10 Jul 2004 10 Jul 2004

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Hunt R. (rdhunt) 37 37 62 0 62 505 26 Jan 2005
2 Joleski J. (jugo) 39 39 59 3 62 541 28 Jan 2005
3 Smilevski G. (g_smilevski) 28 28 49 0 49 617 29 Jan 2005
4 Большакова (mstsm) 27 27 38 0 38 764 25 Jan 2005
5 Бумаженко О.А. (klopik) 24 24 37 0 37 788 27 Jan 2005
6 Reznick S.Y. (kinzer) 21 57 36 0 36 273 27 Jan 2005
7 Куликов П. (kulpavel) 12 34 28 6 34 537 26 Jan 2005
8 >Галиаскаров Э.Г. (edart) 13 116 33 0 33 29 29 Jan 2005
9 Мячин Д.В. (Odin) 14 57 29 3 32 270 27 Jan 2005
10 Рассказов А. (ra) 11 121 26 4 30 19 29 Jan 2005
11 Круговец А. (ask) 9 33 21 9 30 559 28 Jan 2005
12 Hrustalev (Hrustalev) 17 17 21 8 29 1175 26 Jan 2005
13 Кубин А.Л. (NoName) 20 20 27 0 27 1052 28 Jan 2005
14 Сухов А.В. (AnS) 19 19 25 0 25 1091 24 Jan 2005
15 Глумов (jekagl) 18 18 23 1 24 1132 26 Jan 2005
16 Литвинов С.M. (ЛиС) 6 53 16 6 22 337 28 Jan 2005
17 Матвеева (maxa) 12 12 22 0 22 1159 26 Jan 2005
18 >X L. (LoDes) 11 28 21 0 21 702 29 Jan 2005
19 Мудрый С. (isnull) 17 17 21 0 21 1172 28 Jan 2005
20 Соловьянов С. (serge_sg) 6 50 16 3 19 372 29 Jan 2005

Изучаем SQL

Трехзначная логика и предложение Where (окончание, начало в вып.19)

Предикат NOT IN

Рассмотрим еще один пример, позаимствованный мной у Селко. Идея его состоит в использовании предиката NOT IN (<набор значений, включающий NULL>).

Опять таки, для того, чтобы вы могли проверить справедливость рассуждений на сайте, давайте искусственно добавим NULL-значения в результат запроса:

SELECT name, launched,
   CASE WHEN launched < 1915 THEN NULL ELSE launched END year
FROM Ships WHERE launched <=1915

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

name launched year
Hiei 1914 NULL
Kirishima 1915 1915
Kongo 1913 NULL

А теперь напишем запрос, который должен вернуть все корабли, год спуска на воду не находится в наборе значений столбца year:

SELECT * FROM Ships     WHERE launched <=1916 AND
        launched NOT IN
    (SELECT year FROM
    (
    SELECT name, launched, CASE WHEN launched < 1915 THEN NULL ELSE launched END year
    FROM Ships WHERE launched <=1915
    ) x
    )

Запрос

SELECT * FROM Ships
WHERE launched <=1915

дает нам следующий набор кораблей

name class launched
Hiei Kongo 1914
Kirishima Kongo 1915
Kongo Kongo 1913

Казалось бы, мы должны получить корабли Hiei и Kongo, т.к. год их спуска на воду известен и не равен 1915. Ан нет, мы опять получаем пустой результирующий набор.

Оценим значение предиката для первого из этих кораблей - Hiei (для остальных все будет аналогично). Итак,

1914 NOT IN (1915, NULL)

Еще одно NULL-значение я опустил для краткости. Последний предикат можно заменить следующим:

1914 <> ALL (1915, NULL)

что эквивалентно

1914 <> 1915
        AND
1914 <> NULL

Последнее выражение всегда равно UNKNOWN, следовательно, предикат можно переписать в виде:

1914 <> 1915
        AND
UNKNOWN

Следовательно, и все выражение будет равно UNKNOWN, т.к. первое сравнение дает TRUE. Если бы первое сравнение было ложным (для 1915 года), то результат всего выражения был бы равен FALSE.

Поэтому можно сделать вывод, что при наличии NULL-значения в наборе предикат NOT IN в предложении WHERE всегда будет давать пустой набор записей.

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

SELECT * FROM Ships WHERE launched <= 1915
UNION
SELECT * FROM Ships WHERE launched > 1915

не гарантирует восстановления исходной таблицы. Для этого потребуется еще один фрагмент, содержащий в столбце launched NULL-значения:

SELECT * FROM Ships WHERE launched IS NULL

§ Приведенные здесь примеры можно выполнить непосредственно на сайте, установив флажок "Без проверки" на странице с упражнениями на SELECT.

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

§ Ошибки и заплатки
SQL Server 2000
890637 FIX: A 17883 error is written to the SQL Server 2000 error log and the LogWriter component does not yield correctly
867677 You receive an ODBC error when you use BCP in SQL Server 2000
891268 FIX: You receive a 17883 error message and SQL Server 2000 may stop responding to other requests when you perform large in-memory sort operations

Контакты

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

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

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.db.sqlex
Отписаться

В избранное