На правах рекламы: http://your-bag.ru/ стильный рюкзак майкл корс рюкзак.

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


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


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

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

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

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

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

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


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

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

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

Спонсор статьи: http://antkniga.ru/ книга старая.

Все о MySQL. Самообъединения


28-12-2009

Кроме полных, внутренних и внешних объединений, MySQL поддерживает еще и четвертый тип объединения, а именно - самообъединение. Этот тип объединения предполагает объединение таблицы с самой собой и предназначен для выборки данных из таблицы, записи которой содержат внутренние связи между собой. Рассмотрим следующую таблицу.
Самообъединения
Различные ударения
Определить принадлежность пользователей к определенным группам можно с помощью объединения. Для можно этого следует воспользоваться функцией GROUP_CONCAT(), появившейся в MySQL 4.1. Рассмотрим следующий пример:
mysql> SELECT g.name, GROUP_CONCAT(u.name SEPARATOR ',') FROM users AS u groups AS g, users_groups AS ug WHERE ug.gid = g.gid AND ug.uid = u.uid GROUP BY ug.gid;
Самообъединения
Это простая структура меню, каждая запись которого идентифицирует уникальный узел в дереве. Каждая запись имеет уникальный идентификатор, а также содержит идентификатор порождающего его элемента меню. Эти два идентификатора используются для определения взаимосвязи "предок-потомок" в дереве меню. Иерархия предыдущих данных представлена на рис. 10.1. А теперь предположим, что необходимо отобразить список всех узлов дерева с именами их предков, т.е. результирующий набор наподобие представленного в следующем листинге.
Самообъединения
Правда, получить подобный результирующий набор не так уж и просто. Т.к. все данные находятся в одной таблице, простой запрос SELECT может и не сработать. Не поможет и сложное внешнее объединение. Наиболее приемлемым вариантом является только самообъединение, которое позволяет создать вторую, виртуальную, копию таблицы, после чего для получения необходимого результата следует использовать обычное внутреннее объединение между двумя копиями одной таблицы.
Самообъединения
Этот прием связан с использованием псевдонимов. В этом примере создано две копии таблицы menu, которым присвоены псевдонимы a и b соответственно. В результате получим следующие две виртуальные таблицы.
Самообъединения
Самообъединения
Создав эти таблицы, очень нелегко получить их объединение. Для этого используем идентификатор узла в качестве общего столбца - и получим порожденные и порождающие элементы меню в нужном формате.

Объединения типа union

Начиная с версии 4.0, MySQL поддерживает работу оператора UNION, предназначенного для формирования последовательности запросов SELECT в один результирующий набор. Чаще всего этот оператор используется для сложения результирующих наборов, созданных запросами к различным таблицам, и создания единой результирующей таблицы.
Проиллюстрируйте это на примере списка фондовых индексов на фондовых биржах A и B:
Самообъединения
Самообъединения
Синтаксис SQL позволяет объединять столько операторов SELECT, сколько требуется, однако при этом необходимо помнить о двух основных условиях. Во-первых, количество полей, возвращаемых операторами SELECT, должно совпадать. Во-вторых, должны совпадать типы данных возвращаемых полей.
Оператор UNION автоматически убирает повторные строки в составном результирующем наборе (это аналогично поведению обычного оператора SELECT с ключевым словом DISTINCT) и четко видно в предыдущем примере. Результирующий набор содержит только по одной записи с биржевыми индексами HTYF и TGDB, которые встречаются на обеих биржах. При необходимости увидеть в операторе UNION все записи, для отключения автоматической фильтрации повторяющихся записей, в оператор UNION добавляется ключевое слово ALL.
Самообъединения
Здравый смысл
Добавление предложения ORDER BY в оператор SELECT, входящий в состав оператора UNION, не имеет особого смысла, т.к. результирующий набор, сгенерированный каждым оператором в отдельности, для пользователя невидим, он видит только общий окончательный результирующий набор.

Наконец, можно отсортировать результирующий набор, возвращенный оператором UNION, путем добавления предложения ORDER BY в конец запроса. Но каждый отдельный запрос SELECT необходимо заключить при этом в скобки, чтобы MySQL "знал", что предложение ORDER BY относится ко всему окончательному результирующему набору, а не к последнему оператору SELECT оператора UNION. Следующий пример демонстрирует сортировку биржевых индексов в порядке, обратном алфавитному.
Самообъединения
Резюме
Эта глава посвящается одному из самых мощных инструментов обработки данных - объединениям - и сопровождается примерами их использования для создания мощных и сложных запросов.
Объединение позволяет объединять две и более таблицы с использованием общих полей между ними, а затем выполнить запросы SELECT по полученному результату. MySQL поддерживает множество различных типов объединений:
■ полные объединения, которые подразумевают умножение количества записей таблиц для создания общей таблицы, содержащей все возможные комбинации;
■ внутренние объединения, - объединяются только соответствующие записи таблиц, занятых в объединении;
■ внешние объединения, - объединяются все записи одной из занятых в объединении таблиц, заполняя несоответствующие записи другой значениями NULL;
■ самообъединения, - таблицы объединяются с ними самими с помощью псевдонимов, после чего объединяются полученные копии с применением механизма внешнего объединения;
■ объединение UNION предусматривает сложение записей различных таблиц для создания одного результирующего набора.

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



<< Предыдущая статьяСледующая статья >>
Все о MySQL. Левое внешнее объединение Все о MySQL. Подзапросы