ТОП-10 популярных


НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...


Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...

Internet2, или cтарые песни о новом
Когда-то на заре Интернета, тогдаеще военно-научной сетиAPRAnet, были заложены основныепринципы функционирования«Сети сетей». В их числе — использованиепротокола, называемого сейчасIPv4. В...

Все о MySQL. Подзапросы и предложение from


28-12-2009

Результаты работы подзапроса вполне можно использовать и в предложении FROM внешнего оператора SELECT. Это можно проиллюстрировать на примере определения среднего количества услуг, которыми воспользовался каждый филиал. Поэтому сначала необходимо сгруппировать филиалы и вычислить среднее число услуг, которыми поль­зуются филиалы.
Подзапросы и предложение from
Таким образом, полученный подзапросом результат используется в предложении FROM внешнего запроса. Такая таблица на SQL-жаргоне называется производной таблицей.
Заметим, что при использовании результатов запросов, результирующая таблица, созданная внутренним запросом, должна иметь псевдоним, т.к. в противном случае MySQL не будет "знать", как ссылаться на ее столбцы. Если перезапустить предыдущий запрос без присвоения таблице псевдонима, получится следующее:
Листинг 11.31.
mysql> SELECT AVG(stotal) FROM (SELECT bid, COUNT (bid) AS stotal FROM branches_services GROUP BY bid);
ERROR 1246: Every derived table must have its own alias
А теперь пойдем дальше. Что делать, если вам необходимо перечислить филиалы, пользующиеся услугами, количество которых больше среднего?
Подзапросы и предложение from
Для того чтобы значительно ускорить работу этого запроса, целесообразно объеди­нить предыдущие запросы в один сложный запрос.
Подзапросы и предложение from
Для определения наименований заказчиков, соответствующих этим филиалам, доба­вим еще один запрос (и объединение).
Подзапросы и предложение from
Подзапросы и объединения
Как было показано в примерах этой главы, подзапросы могут отлично "сосущест­вовать", но зачем ограничивать себя только внутренними объединениями? С подзапро­сами также хорошо работают любые типы объединений, и, применив творческий подход, можно добиться отличного взаимодействия между двумя типами запросов.
Так, например, с помощью левого объединения можно получить список заказчиков, у которых в таблице branches нет соответствующих записей.
Подзапросы и предложение from
В этом случае запрос сохранит все записи с левой стороны объединения (перечень за­казчиков) и вставит значения NULL для всех записей справа (филиалы), которые не удовлетворяют условиям объединения. И что мы получим в результате? Все не имеющие филиалов заказчики будут иметь значение NULL (которое можно отбросить с помощью проверки IS NULL).
Это же можно сделать с помощью правого объединения с подзапросом.
Подзапросы и предложение from
В этом случае все записи на правой стороне объединения (клиенты) также будут при­сутствовать в результирующем наборе, а отсутствующие записи о филиалах будут обо­значены как NULL. Подзапрос выведет соответствующий идентификатор клиента, по ко­торому из таблицы customers можно будет получить наименование заказчика.
Интересен тот факт, что многие подзапросы могут быть представлены в виде объеди­нений и наоборот. Рассмотрим следующий пример, в котором с помощью подзапроса выдается перечень офисов, пользующихся услугой "Recruitment".
Подзапросы и предложение from
Подзапрос можно представить самообъединением, а самообъединение подзапросом. Рассмотрим следующий пример, в котором с помощью подзапроса будет получен пере­чень всех филиалов, размещенных в том же штате, где находится штаб-квартира корпо­рации "JV Real Estate".
Подзапросы и предложение from

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
Все о MySQL. Подзапросы и оператор exists Все о MySQL. Подзапросы и другие операторы ЯМД