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

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


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

Выпуск 462 от 03 августа 2013 г.

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

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

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

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

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


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

§ Выполнил компенсацию времени в связи с простоем 31 июля.

§ Самые популярные темы недели на форуме

Топик		Сообщений
54 (SELECT)	14
104 (Learn)	12
Guest's book	10
64 (SELECT)	5
35 (Learn)	4

 

§ Авторы недели на форуме

Автор		Число сообщений
IvanovIvam	14
qwrqwr  	12
Pegoopik  	9
dmseratila	9
oops66		9

 

§ Объявленные конкурсы по оптимизации запросов

Задача	Дата		Автор
147	2012-02-23	$erges
159	2012-07-25	anddros
170	2011-07-15	qwrqwr
182	2012-02-16	Baser
192	2012-03-03	Baser
259	2012-07-23	anddros

 

Дополнительные неоптимизационные конкурсы

Задача	Дата		Автор/Организатор конкурса
71	2010-12-26	anddros (завершен).
88	2012-07-12	crescent/Pegoopik
91	2012-05-31	smog/$erges
121	2012-07-06	ZrenBy/anddros
153	2010-09-21	Ozzy

 

§ Изменения среди лидеров (решенные за неделю задачи третьего этапа):
17. smog (175)
31. GriGrim (259)

§ Продвижение ближайших претендентов на попадание в ТОР 100:
106. aronov.oleg (137, 455.718)
123. Fuddy-Duddy (125, 144.816)
133. Fomichev (114, 26.555)
149. degt (113, 42.927)
179. YuriPetrov (104, 17.529)
183. DreamCatcher (106, 133.654)
192. Dmitry Varenikov (104, 143.995)
259. crafty_figure (109, 33.189)

§ На этой неделе сертифицированы:
alexuv (A13130337) [BK] - г. Москва, Россия
Vitality77 (A13155648) [BK] - Vilnius, Lithuania

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

Число упражнений:
   на обучающем этапе - 109;
   на рейтинговых этапах - 197;
   DML - 24
   головоломки - 9 (отрицательные номера) + 9 (3 этап).

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

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

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

На обучающем этапе - 84716

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

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

No Person Number of
Sel_ex
Last_Sel Number of
DML_ex
Scores Days Days_2 Days_3 S_3 LastSolved LastVisit
1Курочкин П.А. (qwrqwr)1217198245141348218.605146.9171592013-07-202013-08-02
2Креславский О.М. (Arcan)1217198245142361215.064160.8031592013-07-202013-08-02
3Карасёва Н.В. (vlksm)1217303245142624212.548167.6791592013-07-202013-07-28
4Бежаев А.Ю. (Baser)121158245061168151.299132.6511542013-07-132013-08-01
5Сальников С.А. ($erges)121313524506195214.82211.9891512013-07-012013-08-02
6Boiko D. (Angellore)62111552449721512890.1901428.2711422013-07-012013-07-13
7Филиппкин Д.В. (_dimon_)7210161244941633163.06599.2511392013-07-112013-07-19
8Яцук А.А. (Faust_zp)1200255244811985144.272108.8401352012-07-122012-07-30
9Кузнецов В.С. (herrRo)1185104234421170481.38873.3351222012-02-082013-06-18
10Дроздков А.Н. (anddros)519519824451188012.47211.0871052013-07-222013-07-26
11Дубинский А.В. (_yizraor)1185122244381088718.8041122.9071022012-11-052012-11-25
12Шиндин А.В. (AlShin)116125223396928408.897777.457992011-05-052011-05-21
13Тарасов Д.Б. (Gavrila)917832234182428151.46299.710952012-04-232012-05-25
14Орлов М.В. (Eagleoff)9165-323396952138.545106.466922011-11-102013-08-01
15Зотов П.Г. (Ozzy)116313233891412213.968187.364812012-02-052013-08-02
16Держальцев В.А. (MadVet)3151100223682073143.64299.698812010-12-292011-09-26
17Кукушкин С.А. (smog)1718417524409843251.504431.494752013-07-312013-08-02
18Агапов В. (KERBEROS)117525324408240935.65327.703692013-04-022013-04-05
19Гринкевич Д.Л. (Дмитрий Гринкевич)1818219624400651116.471248.314692013-07-232013-08-02
20Калинин К.А. (kalinin_k)161681692338439927.21536.659602012-06-302013-08-02

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

No surname n_sel sel_all sel_scores dml_scores scores rating last_visit
1>Григорьев А.В. (grigoriev)363849378687902 Aug 2013
2>Movlyanov A.P. (Oct)13912502529202 Aug 2013
3Балунов М.А. (Имбокофе)18362502591802 Aug 2013
4Соловьёв Ю.С. (Юрик_C)1012131225166102 Aug 2013
5>Ogg (nanny)15572302367601 Aug 2013
6>Вольская Н.И. (natali_volska)3331922330202 Aug 2013
7Григоренко В.А. (johngalt)1111920349202 Aug 2013
8>Сератила Д.П. (dmseratila)11571701764502 Aug 2013
9Карелин Е. (Evgeshka__)899817282602 Aug 2013
10Матюшов М. (FeYsT)0
01717382201 Aug 2013
11Илья (Vi11ian)0
01717382302 Aug 2013
12Ivanov (IvanovIvam)0
01717382402 Aug 2013
13>Яковлев Ю.В. (Яковлев Юрий)103516016190402 Aug 2013
14>Федоров Н.Н. (Matofey)112713215194702 Aug 2013
15>Плужник (c0unt)131315015392702 Aug 2013
16Грибанова В.С. (coolvictory)0
01414407401 Aug 2013
17Назаренко О. (Oksa)1311213257002 Aug 2013
18Tiwari N. (Niks_25)0
01313421902 Aug 2013
19F (Belane)0
01313422002 Aug 2013
20Билеева Е. (Ekate)0
01313422102 Aug 2013
21Petrov Y. (YuriPetrov)41041101117901 Aug 2013
22Фогель А. (Hockmoon)74511011114430 Jul 2013
23>Борисенко И.Н. (Igor.N.B.)91011011433502 Aug 2013

Изучаем SQL

CROSS APPLY / OUTER APPLY

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

Оператор CROSS APPLY появился в SQL Server 2005. Он позволяет выполнить соединение двух табличных выражений. При этом каждая строка из левой таблицы сочетается с каждой строкой из правой.

Давайте попробуем разобраться в том, какие преимущества дает нам использование этого нестандартного оператора.

Первый пример.

    SELECT * FROM
    Product
    CROSS apply
    Laptop;

Мы получили просто декартово произведение таблиц Product и Laptop. Аналогичный результат мы можем получить с помощью следующих стандартных запросов:

    SELECT * FROM
    Product
    CROSS JOIN
    Laptop;

или

    SELECT * FROM
    Product, Laptop;

Поставим теперь более осмысленную задачу.

Для каждого ноутбука дополнительно вывести имя производителя.

Эту задачу мы можем решить с помощью обычного соединения:

    SELECT P.maker, L.*  FROM
    Product P JOIN Laptop L ON P.model= L.model;

С помощью CROSS APPLY решение этой же задачи можно написать так:

    SELECT P.maker, L.*  FROM
    Product P
    CROSS APPLY
    (SELECT * FROM Laptop L WHERE P.model= L.model) L;

"И что тут нового"? - спросите вы. Запрос стал даже более громоздким. Пока да, можно согласиться. Но уже здесь можно заметить весьма важную вещь, которая отличает CROSS APPLY от других видов соединений. А именно, мы используем коррелирующий подзапрос в предложении FROM, передавая в него значения из левого табличного выражения. В данном примере это значения из столбца P.model. Т.е. для каждой строки из левой таблицы правая таблица будет своя.

Поняв это, мы можем воспользоваться данными преимуществами. Рассмотрим следующую задачу.

Для каждого ноутбука дополнительно вывести максимальную цену среди ноутбуков того же производителя.

Эту задачу мы можем решить с помощью коррелирующего подзапроса в предложении SELECT:

    SELECT *, (SELECT MAX(price) FROM Laptop L2
    JOIN  Product P1 ON L2.model=P1.model
    WHERE maker = (SELECT maker FROM Product P2 WHERE P2.model= L1.model)) max_price
     FROM laptop L1;

Пока решение, использующее CROSS APPLY, будет мало чем отличаться от вышеприведенного:

    SELECT *
     FROM laptop L1
     CROSS apply
     (SELECT MAX(price) max_price FROM Laptop L2
    JOIN  Product P1 ON L2.model=P1.model
    WHERE maker = (SELECT maker FROM Product P2 WHERE P2.model= L1.model)) X;

Читать далее...

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

§ В настоящее время для решения упражнений на сайте используются следующие СУБД: SQL Server 2012 Express, Oracle 11g Express Edition, MySQL 5, PostgreSQL 9.

§ Группа SQL Exercises на LinkedIn.com. Присоединяйтесь!

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

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

§ Книги и статьи по SQL.

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

Контакты

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

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

В избранное