После авторизации Вы получите доступ к файлам, скрытым материалам сайта, исходным кодам
возможность комментировать и т.д.

Вы можете авторизоваться на сайте всего одним кликом:

2016-07-11
Основы Баз Данных → Выборка из нескольких таблиц
Как правильно извлекать данные из нескольких таблиц

Как одним запросом извлечь информацию из нескольких таблиц сразу?

Выборка из нескольких таблиц

Для базы данных с такой структурой такой метод на первый взгляд не подхо­ дит. Информация об авторах больше не хранится в таблице material, поэтому ее для соответствующей шутки придется извлекать отдельно. В этом случае для каждой выводимой записи потребуется вызывать метод query из объекта PDO. Получится неаккуратно и медленно, а по мере увеличения объема базы данных подобные за­просы существенно снизят производительность сайта.

С учетом вышесказанного может сложиться впечатление, что старый подход, несмотря на определенные недостатки, гораздо лучше. К счастью, реляционные базы данных, в том числе и MySQL, облегчают работу с информацией, хранящейся в нескольких таблицах. Новый оператор JOIN (объединение) команды SELECT разрешает воспользоваться преимуществами обоих подходов. Он позволяет обращаться с данными из разных таблиц так, будто они хранятся в одной таблице. Вот как выглядит синтаксис этого оператора в простейшем случае:

SELECT столбцы
FROM таблица1 INNER JOIN таблица2
   ON условие(я) связанности данных

Предположим, что в нашем случае интерес представляют столбцы id и materialtext из таблицы text , а также name и email из таблицы author. Условие связанности записей в двух таблицах (ON) заключается в том, что значение поля authorid (из material) обязано совпадать с содержимым Столбца id (из author).

Первые два запроса приведены только для примера, они выводят данные из двух таблиц — здесь в объединении нет необходимости.

#Получаем список материалов
SELECT id, LEFT(materialtext, 20), authorid FROM material

#Получаем список авторов
SELECT * FROM author

В третьем запросе происходит самое интересное — используется оператор JOIN:

#Выводим текст материала и данные об авторе вместе
SELECT material.id, LEFT(materialtext, 20), name, email
FROM material INNER JOIN author
   ON authorid = author.id

Объединяющий запрос группирует значения из двух таблиц в единый резуль­тирующий набор, сопоставляя связанные между собой данные. Даже несмотря на то что необходимая вам информация хранится в двух разных местах, вы все равно способны получить ее с помощью всего одного запроса к базе данных. Обратите вни­мание: поскольку свой столбец id есть и у материалов, и у авторов, то при упоминании такого столбца в запросе следует указывать имя таблицы, из которой вы хотите его извлечь. Идентификаторы таблиц material и author записываются соответственно как material.id и author.id. Если этого не сделать, MySQL не поймет, какой именно столбец id вы имеете в виду, и выдаст ошибку

#Запрос, который приведет к ошибке
SELECT id, LEFT(materialtext, 20), name, email
FROM material INNER JOIN author
   ON authorid = id

Получение данных из нескольких таблиц по условию

Чем дольше вы работаете с базой данных, тем отчетливей вы должны осознавать возможности, которые открывает перед вами объединение информации из разных таблиц в единый результирующий набор. Рассмотрим еще один пример, где по за­просу выводится список материалов конкретного автора.

SELECT materialtext
FROM material INNER JOIN author
   ON authorid = author.id
WHERE name = "Имя Автора"

Несмотря на то что результаты запроса взяты только из таблицы material, в коде использовался оператор JOIN. С его помощью выполнялся поиск материалов на основе значения, хранящегося в таблице author. Далее вам встретится еще немало таких остроумных примеров, но уже сейчас можно отметить, что об­ ласть практического применения оператора JOIN широка и разнообразна. К тому же он почти всегда позволяет избежать лишней работы.

999
0
Пожалуйста, авторизируйтесь, чтобы скачать архив с файлами урока