ТОП-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. Объединения


28-12-2009

В большинстве примеров, приведенных в предыдущих главах этой книги, обрабатывались данные только из одной таблицы. Но в реальном мире такие ситуации случаются нечасто. Ограничения по эффективности обычно диктуют необходимость разбиения данных на множество таблиц и создания связей между ними, что позволяет сделать выборку данных более эффективной.
Поддержка создания связей играет значительную роль в обеспечении эффективности работы реляционной СУБД MySQL, позволяя не только эффективнее хранить информацию (устраняя избыточность и повторения), но и определять неизвестные взаимосвязи между различными сегментами данных.
Согласно концепциям ЯМД, в данной главе показано, каким образом можно использовать язык SQL для создания одновременных запросов к нескольким таблицам, для того чтобы комбинировать из них данные различными способами. Эти запросы к нескольким таблицам называются объединениями, т.к. они объединяют в себе две и более таблицы, приобретая при этом "репутацию" сложных и непонятных. Эта глава позволит вам убедиться в необоснованности такого мнения - объединение уже стало простым и довольно мощным инструментом. Эта глава научит вас всему тому, что нужно знать при их использовании в работе с СУБД MySQL.

Что такое объединение?
Объединение является одним из наиболее традиционных способов организации связи записей из различных таблиц. Устоявшееся общее мнение, что вследствие простоты MySQL и/или своих открытых корней приложение "плохо" работает с объединениями, является ошибочным. Это не так. MySQL поддерживает работу с объединениями с момента своего появления, а сейчас он поддерживает синтаксис SQL, соответствующий стандарту SQL2, что позволяет производить объединение записей самых различных таблиц.
Рассмотрим следующие две таблицы: таблицу categories, содержащую наименования рубрик,
Объединения
Как видно, между этими двумя таблицами существует связь - это поле cid, которое может использоваться для создания связи между темами новостей, и соответствующими им рубриками.
Теперь вы уже знаете, каким образом производить выборку всех записей в любой из этих таблиц. Для этого можно воспользоваться традиционным запросом SELECT *.
Объединения
Объединения
Добавив предложение WHERE, можно отфильтровать ненужные заголовки статей, оставив, например, только те, которые были опубликованы в 2003 году.
Объединения
Но что делать, если требуется получить более сложные данные: например, перечень только заголовков из рубрики "Current Affairs" или перечень спортивных заголовков за 2003 год? Адресованный только к одной таблице запрос не совсем подходит, т.к. данные по рубрикам и заголовкам статей хранятся в различных таблицах.
Однако, как было ранее замечено, между двумя таблицами есть связь - столбец cid, который имеется в обеих таблицах. Приравняв поле cid из таблицы categories и поле cid из таблицы topics в предложении WHERE запроса SELECT, можно создать объединение этих двух таблиц.
Объединения
Ну, вот и первое созданное вами объединение!
В этом случае предложение WHERE использовалось для создания связи между полями cid из обеих таблиц. Хотя это по-прежнему не совсем то, что вам требуется. Вам нужно отфильтровать только те заголовки, которые относятся к рубрике "Current Affairs". К счастью, тут нам опять может помочь предложение WHERE.
Объединения
Жизнь полна разочарований
При объединении нескольких таблиц, необходимо обеспечить однозначность ссылок на поля (возможно появление одноименных полей). Поэтому, когда в объединение попадают поля, которые есть в нескольких используемых запросом таблицах, имя поля необходимо предварять префиксом с именем таблицы (как это делается во многих примерах, приведенных в этой главе), поэтому MySQL должен точно "знать", о поле какой таблицы идет речь:
SELECT name FROM employees, departments WHERE employees.id = de-partments.eid; # плохо
SELECT employees.name FROM employees, departments WHERE employees, id = departments.eid; # хорошо
Предложение WHERE в предыдущем операторе SQL действовало на совместный ре­зультирующий набор двух таблиц, отфильтровывая только те записи, которые соответствуют указанному критерию.
А теперь перейдем ко второму вопросу. Как обстоят дела со списком всех заголовков
за 2003 год?
Объединения
Таким образом, использование явной связи между предыдущими таблицами позволяет SQL объединить их для создания сложного результирующего набора с последующей обработкой данных для получения только необходимой информации.

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



<< Предыдущая статьяСледующая статья >>
Все о MySQL. Экспорт записей Все о MySQL. Типы объединений