Нередко web-разработчикам приходится сталкиваться с необходимостью выбора данных из нескольких таблиц одновременно. Думаю, никого из читателей не
тревожит вопрос о том стоит ли вообще использовать такие запросы. Ответ очевиден. Такие запросы уменьшают число обращений к базе данных, тем самым
уменьшая время выполнения скрипта и нагрузку на сервер. Давайте разберёмся как пользоваться многотабличными запросами.
Допустим, у нас есть две таблицы:
Таблица tbl1:
Таблица tbl2:
Произведём простейший запрос к двум таблицам.
SELECT * FROM tbl1,tbl2 WHERE tbl1.id=tbl2.id
В результате этого запроса получится следующая таблица:
| id |
name |
id |
letter |
| 2 |
Б |
2 |
Г |
| 3 |
В |
3 |
Д |
То есть, данный запрос строго выбирает из двух таблиц только те строки, столбцы id которых совпадают.
Аналогичного результата можно добиться с помощью следующего запроса:
SELECT * FROM tbl1 JOIN tbl2 WHERE tbl1.id=tbl2.id
Для формирования условия в запросах, использующих объединение JOIN, вместо ключевого слова WHERE предпочтительно использовать ключевое слово ON,
как это продемонстрировано в следующем листинге:
SELECT * FROM tbl1 JOIN tbl2 ON tbl1.id=tbl2.id
Выше было продемонстрировано перекрестное объединение таблиц tbl1 и tbl2. При это результирующая таблица содержит комбинации строк обеих таблиц, удовлетворяющих
условию tbl1.id = tbl2.id. Левое объединение (LEFT JOIN) позволяет включить в результирующую таблицу строки "левой" таблицы tbl1, которой не нашлось соответствие
в "правой" таблице tbl2. Смотрите следующий пример:
SELECT * FROM tbl1 LEFT JOIN tbl2 ON tbl1.id=tbl2.id
Результатом будет следующая таблица
| id |
name |
id |
letter |
| 1 |
А |
NULL |
NULL |
| 2 |
Б |
2 |
Г |
| 3 |
В |
3 |
Д |
Как видно из этого примера, записи в таблице tbl1 со значением id = 1 не нашлось соответствия в таблице tbl2, т.к. поле id в ней принимает значения 2,3,4. Тем не менее
в результирующую таблицу запись включена, при этом значения полей из таблицы tbl2 принимают значение NULL. Следует заметить, что для задания условия вместо ключевого слова
WHERE при левом и правом объединениях используется ключевое слово ON.
В следующем примере демонстрируется "правое" объединение при помощи конструкции RIGHT JOIN.
SELECT * FROM tbl1 RIGHT JOIN tbl2 ON tbl1.id=tbl2.id
Результирующая таблица:
| id |
name |
id |
letter |
| 2 |
Б |
2 |
Г |
| 3 |
В |
3 |
Д |
| NULL |
NULL |
4 |
Е |
Как видим, при правом объединении возвращаются строки, удовлетворяющие условию tbl1.id = tbl2.id, и строки "правой" таблицы tbl2, которым не нашлось соответствия в левой таблице tbl1.
Все вопросы предлагаю обсудить на форуме.