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

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


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

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

http://www.sql-ex.ru

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

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

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

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


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

§ Мы выставили наш сайт на конкурс Интернить 2005. Победитель определяется числом поданых голосов. Просьба проголосовать. Победим вместе! От вас потребуется только три щелчка: эта ссылка, оценка (рекомендуется 3 :-)), кнопка "Проголосовать". Не будем экономить на щелчках :-).

§ Замеченный Cirylus'ом огрех в проверке задачи 20 DML устранен.

§ Улучшена проверка новой задачи 60 (на недостаточность проверочных данных обратил внимание Гарсиа).

§ Таблица ТОР 100 приведена в соответствие с персональным рейтингом участников. В результате внизу таблицы произошли некоторые изменения.

§ Изменилась Персональная страница, и не только название (ранее - "Личные данные"). Теперь обладатели сертификатов смогут на ней ввести информацию о себе (вкладка "Сертифицированный специалист"). Там же можно взять кнопочку подтверждения сертификата, которую вы можете установить на своем сайте.
Пока информация о сертифицированных на сайте специалистах доступна с персональной страницы и по ссылкам в ТОР 10 на главной странице сайта. Мы работаем над общедоступной информационной страницей обо всех наших специалистах. Надеюсь, что когда они введут информацию о себе, и страница поспеет :-).

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

§ Несколько почистил базу участников. Удалил дубликаты. Старался оставлять учетную запись с максимальным числом решенных задач. В результате уменьшилось число участников рейтинга. Если кто незаслуженно пострадал, пишите, пока старые данные еще имеются в последнем бэкапе.

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

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

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 LastSolved LastVisit
1 Колосов А.С. (KAS) 78 137 20 205 25 3.441 11 Mar 2005 11 Mar 2005
2 Кувалкин К.С. (Cyrilus) 78 137 20 205 102 4.896 06 Mar 2005 11 Mar 2005
3 Hakobyan H.H. (hamlet) 77 136 20 201 161 37.812 09 Mar 2005 11 Mar 2005
4 Галиаскаров Э.Г. (Galogen) 77 136 20 201 109 52.933 11 Mar 2005 11 Mar 2005
5 Мельникова И.А. (Iris_m) 77 136 20 201 301 66.951 09 Mar 2005 12 Mar 2005
6 Шипунов И. (IAS) 77 136 20 201 265 82.049 05 Mar 2005 11 Mar 2005
7 Зверев Д.Л. (dimzv) 76 136 19 198 450 2.291 27 Jan 2005 28 Jan 2005
8 Иткин И.Л. (joseph_itkin) 76 136 20 198 375 2.853 07 Mar 2005 09 Mar 2005
9 Сныткин В.Л. (Ded I) 76 136 19 198 142 7.398 22 Jan 2005 11 Mar 2005
10 Валуев Д.И. (Fiolent) 76 136 19 198 503 19.337 19 Jan 2005 11 Mar 2005
11 Spirin (spirin) 75 136 19 195 158 13.467 21 Jan 2005 24 Jan 2005
12 Леденев С.А. (Shurgenz) 73 136 19 193 146 8.298 11 Jan 2005 02 Mar 2005
13 Михайлов В.Г. (mslava) 73 136 17 189 498 9.731 26 Oct 2004 26 Oct 2004
14 Пятница О.А. (Robin) 65 128 17 174 606 70.821 22 Oct 2004 06 Feb 2005
15 Якутин Н.В. (ZrenBy) 73 136 6 169 511 3.991 14 Sep 2004 18 Jan 2005
16 Рассказов А. (ra) 61 121 19 168 70 29.764 28 Jan 2005 25 Feb 2005
17 Губарь Д.К. (DEathkNIghtS) 61 124 17 166 23 1.046 03 Nov 2004 03 Nov 2004
18 Gershovich (VIG) 61 121 19 166 730 6.933 11 Mar 2005 11 Mar 2005
19 Смирнов А. (Leshich) 61 124 17 166 205 84.171 30 Sep 2004 19 Nov 2004
20 Черемных В.П. (Sp999) 58 117 20 161 106 14.115 10 Mar 2005 11 Mar 2005

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1 Q Q.Q. (Ромич) 52 52 89 5 94 354 09 Mar 2005
2 Schweizer A. (Sh.Alex) 46 46 76 0 76 437 11 Mar 2005
3 Грива Г. (Грива Г.Г.) 34 34 59 0 59 593 09 Mar 2005
4 Tutisani T. (KiLLBoY) 27 56 46 0 46 305 11 Mar 2005
5 Besedinsky D.I. (DeniskaB) 22 22 31 9 40 1049 10 Mar 2005
6 Koberidze M. (kobra) 24 24 37 0 37 875 11 Mar 2005
7 Литвиненко Ф.Е. (phil) 24 24 37 0 37 888 09 Mar 2005
8 Ниеша А.А. (Niesh) 26 26 37 0 37 898 11 Mar 2005
9 >Koctochka K. (punchos) 13 59 36 0 36 265 12 Mar 2005
10 Новоселов С.А. (nsa) 17 34 33 0 33 656 10 Mar 2005
11 Derbyshev I. (Igor Derbyshev) 0 94 0 32 32 58 11 Mar 2005
12 Рахманов И.Е. (bloom) 12 110 29 2 31 36 11 Mar 2005
13 Черноусов (casper_mak) 13 27 31 0 31 770 07 Mar 2005
14 Шабалин Н.В. (nsh) 17 29 26 3 29 860 11 Mar 2005
15 Колосов А.С. (KAS) 13 137 25 2 27 1 11 Mar 2005
16 >Aleksandrov P.V. (Stomat0109) 10 56 25 0 25 315 11 Mar 2005
17 Осташинский Д.М. (dimma) 7 35 12 9 21 579 11 Mar 2005
18 Gerehov D.A. (D_AGe) 13 37 20 0 20 622 10 Mar 2005
19 Аверьянова Л. (Aversana) 2 59 5 14 19 275 09 Mar 2005
20 Кузнецова О. (ok) 3 45 8 11 19 475 11 Mar 2005

Изучаем SQL

Функции работы со строками в SQL SERVER 2000 (продолжение, начало в вып.24)

Парная к LEFT функция RIGHT возвращает заданное число символов справа из строкового выражения:

RIGHT(<строковое выражения>,<число символов>)

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

SELECT name FROM Ships
WHERE LEFT(name, 1) = RIGHT(name, 1)

То, что в результате мы получим пустой результирующий набор, означает, что таких кораблей в БД нет. Давайте возьмем комбинацию значений - класс и имя корабля.

Соединение двух строковых значений в одно называется конкатенацией, и в SQL Server для этой операции используется знак "+" (в стандарте "||"). Итак,

SELECT * FROM (
   SELECT class +' '+ name AS cn FROM Ships
    ) x
WHERE LEFT(cn, 1)=RIGHT(cn, 1)

Здесь мы разделяем пробелом имя класса и имя корабля. Кроме того, чтобы не повторять всю конструкцию в качестве аргумента функции, используем подзапрос. Результат будет иметь вид:

cn
Iowa Missouri
North Carolina Washington

А если строковое выражение будет содержать лишь одну букву? Запрос выведет ее. В этом легко убедиться, написав

SELECT * FROM (
    SELECT class +' '+ name AS cn FROM Ships
    UNION ALL SELECT 'a' as nc
) x
WHERE LEFT(cn, 1)=RIGHT(cn, 1)

Чтобы исключить этот случай, можно воспользоваться еще одной полезной функцией LEN (<строковое выражение>), которая возвращает число символов в строке. Ограничимся случаем, когда число символов больше единицы:

SELECT * FROM (
    SELECT class +' '+ name AS cn FROM Ships
    UNION ALL SELECT 'a' as nc
) x
WHERE LEFT(cn, 1)=RIGHT(cn, 1) AND LEN(cn)>1

На сайте имеются задачи, в которых требуется упорядочить (найти максимум и т.д.) в числовом порядке значения, представленные в текстовом формате. Например, номер места в самолете ("2d") или скорость CD ("24x"). Проблема заключается в том, что текст сортируется так (по возрастанию)

11a
1a
2a

Действительно,

SELECT '1a' AS place
UNION ALL SELECT '2a'
UNION ALL SELECT '11a'
ORDER BY 1

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

1a
2a
11a

Чтобы добиться такого порядка, нужно выполнить сортировку по числовым значениям, присутствующим в тексте. Можно предложить такой алгоритм:
1. Извлечь число из строки.
2. Привести его к числовому формату.
3. Выполнить сортировку по приведенному значению.

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

LEFT(place, LEN(place)-1)

Если только этим и ограничиться, то получим

place
1a
11a
2a

Приведение к числовому формату может быть следующим:

CAST (LEFT(place, LEN(place)-1) AS INT)

Осталось выполнить сортировку

SELECT * FROM (
    SELECT '1a' AS place
    UNION ALL SELECT '2a'
    UNION ALL SELECT '11a'
) x ORDER BY CAST(LEFT(place, LEN(place)-1) AS INT)

Что и требовалось доказать.

(Продолжение следует...)

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

Контакты

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

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

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

В избранное