Процесс разработки баз данных для интернет-ресурсов практически ничем не отличается от разработки стандартных баз данных, которые создаются в системе MSSQL SERVER. Для ресурсов такого рода, как правило, используется язык MYSQL, хотя можно применять его и к разработке стандартных программных продуктов, предназначенных для домашнего использования. В данной статье речь будет идти не об этом. При работе с базами данных в любом языке программирования стоит задача выполнить выборку данных для выведения в различные отчеты, графики и так далее. Обычно, при выполнении задач такого рода приходится применять не одну, а сразу несколько таблиц, объединяя их в один запрос и тем самым значительно усложняя его конструкцию. При этом следует учитывать, как должны будут выводиться данные, как таблицы будут «подтягиваться» и какой результат будет приемлем для программиста. Для решения подобных задач необходимо использовать одну стандартную конструкцию языка MySQL – Join.
Join: понятие
Обычно языки разработки баз данных вне зависимости от их типа берут за основу стандартные слова из англоязычных словарей. Если вы хорошо владеете английским языком, вам проще будет работать с таблицами. Для реализации подключения таблиц в выборку было использовано слово Join. Перевести это служебное слово можно точно так же,как и в самом языке – «объединение». Конструкцию MySQL Join можно интерпретировать точно так же. Если расшифровать назначение конструкции и схему ее работы, то мы получим следующее значение: конструкция позволяет собирать нужные поля из различных таблиц и вложенных запросов в одну выборку.
Join: конструкции для объединения
Если программисту требуется собрать выборку из нескольких таблиц и при этом ему известно, какие ключевые поля в них имеются и какие данные необходимы для отчета, то можно использовать одну из основных конструкций объединения для достижения желаемого результата. Существует четыре основных конструкции для объединения таблиц: Right Join, Left Join, Cross Join, Inner Join. Каждая из стандартных конструкций в зависимости от поставленной задачи будет давать различные результаты. Это дает возможность получить в кратчайшие сроки отчеты по различным параметрам.
Join: создание и заполнение таблиц для дальнейшего использования
Прежде чем начать рассматривать механизмы работы с конструкциями объединения данных, необходимо подготовить несколько таблиц, с которыми мы будем в дальнейшем вести работу. Это даст возможность наглядно показать основные принципы работы операторов. Таким образом, новички могут легче усвоить азы программирования таблиц. В первой таблице будет приведено описание некоторых предметов, с которыми человеку приходится постоянно сталкиваться на протяжении всей жизни. Во второй таблице будут описаны некоторые свойства объектов из первой таблицы, чтобы в дальнейшем можно было легко и просто работать с ними. Двух таблиц в целом должно быть достаточно для того, чтобы показать на примере их работу. Теперь можно приступать непосредственно к практическому рассмотрению наших конструкций.
Применение Inner Join
В случае использования конструкции MySQL – Join Inner необходимо учитывать ее некоторые особенности. Эта конструкция позволяет выбрать их обеих таблиц те записи, которые имеются и в первой, и во второй таблице. Как же это работает? У нас есть главный ключ в первой таблице – ID. Он указывает на порядковый номер записей в таблице. Этот же ключ при создании второй таблицы применяется как порядковый номер. Оператор Select при выборе данных в результате определит только те записи, порядковые номера которых совпадают. Это означает, что они есть и в первой, и во второй таблице. В случае использования данной конструкции необходимо четко понимать, какие именно данные нужно получить. Самой распространенной ошибкой начинающих программистов баз данных является неправильное и нерациональное использование конструкции Inner Join. В качестве примера использования MySQL Inner Join можно рассмотреть скрипт, который возвращает из описанных ранее таблиц информацию о предметах и свойствах. Здесь существует несколько способов использования данной конструкции. В этом плане MySQL является очень гибким языком. Рассмотрим примеры использования My SQL Inner Join.
- Объединение таблиц без указания параметров.
- Использование служебного слова Using. Если указать, что нужно учитывать главные ключи записей в таблицах, то результат выборки изменится кардинально. В результате будет получена выборка, которая вернет строки, имеющие одинаковые главные ключи.
- Возможен еще один вариант использования данной конструкции: в запросе через слово on указываются поля, по которым должно осуществляться объединение таблиц.
Особенности использования Left Join
Если рассмотреть еще один способ объединения таблиц с использованием конструкции MySQL-Join, то можно заметить разницу в выводимых данных. Конструкция Left является таким механизмом. Применение конструкции Left Join MySQL имеет ряд особенностей, и требует четкого понимания результата, который требуется получить. Сначала в данном случае будут выбраны все записи из первой таблицы, а к ним в дальнейшем будут присоединены все записи из второй таблицы свойств. В этом случае, если в первой таблице присутствует запись, к примеру «стол», а во второй таблице для нее нет ни одного свойства, то оператор Left напротив этой записи выведет значение null. Это должно сказать программисту о том, что по этому виду предмета нет признаков. Использование данной конструкции позволяет определять, по каким полям не выставлена цена, гарантийный срок и так далее. Рассмотрим пример использования LeftJoin. Чтобы рассмотреть использование оператора конструкции LeftJoin будем использовать описанные ранее таблицы. Предположим, нам нужно выбрать весь список товаров, которые имеются в магазине, и проверить, по каким их них не проставлены свойства или признаки. Выборка в таком случае выведет на экран все товары. По тем товаров, у которых нет свойства, будут выставлены пустые значения.
Применение Where в конструкции Join
В качестве параметра объединение может содержать не только указание полей, по которым требуется выполнить подключение таблиц, но и оператор условия Where. В качестве примера рассмотрим скрипт, который может вернуть нам только те записи, по которым признак не проставлен. В конструкцию Join в этом случае необходимо внести оператор условия и указать, что именно нужно вернуть в качестве результата. При использовании Where в MySQL Join следует четко понимать, что в результате будут отображены только те записи, к которым относится указанное условие. Подобные запросы позволяют делать выборки по конкретным данным, которые относятся к условию, выбранному программистом. Можно указать несколько таких условий, при этом максимально уточняя параметры выбора данных из объединенных таблиц.
Применение Join для изменения информации в таблицах
По сути, конструкция Join является универсальной. Она дает возможность не только делать различные выборки, но и подключать в запросы от одной до нескольких таблиц, вводить в выборку дополнительные условия. Также можно использовать конструкцию и для выполнения других операций с данными. Так, к примеру, можно использовать Join для изменения данных в таблице. Если говорить точнее, Join может использоваться для уточнения условий в таблице или в тех случаях, когда требуется обновить данные по одним и тем же условиям в нескольких таблицах. Рассмотрим для примера следующую задачу. Дано три таблицы, в которых имеются некоторые данные. Необходимо выполнить изменение информации в обеих таблицах, используя для этой цели один запрос. Для решения заданий такого рода можно использовать в команде Update конструкцию Join. Сам по себе тип конструкции Join будет зависеть, как и в случае с выборкой данных, от результата, который программист хочет получить. Давайте рассмотрим самый простой пример. Необходимо обновить одним запросом данные по одним и тем же условиям. Запросы такого рода строятся для оптимизации работы с БД. Зачем же писать для каждой из таблиц различные запросы, если можно выполнить все манипуляции с данными при помощи всего одного запроса?
Построение сложных запросов
Часто при работе с базами данных возникает необходимость построения запросов не только с объединением нескольких таблиц, но и с использование подзапросов. Эти задачи являются довольно сложными для начинающего программиста. Сложность заключается в том, что необходимо продумывать каждый шаг, смотреть, какие данные из какого запроса или какой таблицы необходимо получить и как нужно будет работать с ними в дальнейшем. Для более детального понимания можно попробовать рассмотреть примеры сложных запросов. Если вы только начинаете работать с базами данных, это будет вам полезно.
Пример многотабличного запроса
SELECTSQL_CALC_FOUND_ROWS
dgs.dogovor_id,
dgs.dogovor_name,
dgs. abonent_name,
dgs.abonent_type,
dgs.address_fiz,
dgs.date_conclusion,
dgs.date_annulment,
dgs.threshold,
ubc.usum
FROM
billing_dogovorsdgs
LEFT JOIN
billing_users_balanceubc
ON
ubc.udate=CURDATE ()
AND
dgs.dogovor_id=ubc.dogovor_id
WHERE
dgs.dogovor_name LIKE “%123”
ORDER BY
Dgs.dogovor_name ASC
LIMIT
0, 60
Такой запрос вернет 60 записей о договорах продажи, по которым существует или заполнен баланс денежных средств на заданную дату. В данном случае имеется в виду текущая дата. В выборку также добавлено условие, что в названии договора должны присутствовать символы “123”. Информация, выводимая на экран, будет иметь сортировку – упорядоченность по номеру договора. Следующий пример выведет на экран информацию обо всех платежах, в которых будет указан номер договора.
Применение подзапросов
Как ранее уже было сказано, при работе с базами данных существует возможность объединения не только таблиц, но и таблицы с запросом. Подобная конструкция в основном применяется для ускорения работы запроса, а также для его оптимизации. Например, если необходимо из таблицы, имеющей несколько сот полей выбрать всего два поля, то необходимо использовать запрос, который вернет только нужные поля, и объединить его с основной выборкой данных.
В данном обзоре были приведены только стандартные способы использования конструкций MySQL. Как использовать конструкцию Join и в каком виде, предстоит решать непосредственно самому программисту. Главное – помнить и учитывать, какой результат необходимо получить при выполнении запроса.