Памятка по JOIN-ам в SQL

Памятка по JOIN-ам в SQLПамятка по JOIN-ам в SQL

 

Нередко web-разработчикам приходится сталкиваться с необходимостью выбора данных из нескольких таблиц одновременно. Думаю, никого из читателей не
тревожит вопрос о том стоит ли вообще использовать такие запросы. Ответ очевиден. Такие запросы уменьшают число обращений к базе данных, тем самым
уменьшая время выполнения скрипта и нагрузку на сервер. Давайте разберёмся как пользоваться многотабличными запросами.
Допустим, у нас есть две таблицы:

Таблица tbl1:

id name
1 А
2 Б
3 В

Таблица tbl2:

id letter
2 Г
3 Д
4 Е

Произведём простейший запрос к двум таблицам.

1 SELECT * FROM tbl1,tbl2 WHERE tbl1.id=tbl2.id

В результате этого запроса получится следующая таблица:

id name id letter
2 Б 2 Г
3 В 3 Д

То есть, данный запрос строго выбирает из двух таблиц только те строки, столбцы id которых совпадают.
Аналогичного результата можно добиться с помощью следующего запроса:

1 SELECT * FROM tbl1 JOIN tbl2 WHERE tbl1.id=tbl2.id

Для формирования условия в запросах, использующих объединение JOIN, вместо ключевого слова WHERE предпочтительно использовать ключевое слово ON,
как это продемонстрировано в следующем листинге:

1 SELECT * FROM tbl1 JOIN tbl2 ON tbl1.id=tbl2.id

Выше было продемонстрировано перекрестное объединение таблиц tbl1 и tbl2. При это результирующая таблица содержит комбинации строк обеих таблиц, удовлетворяющих
условию tbl1.id = tbl2.id. Левое объединение (LEFT JOIN) позволяет включить в результирующую таблицу строки «левой» таблицы tbl1, которой не нашлось соответствие
в «правой» таблице tbl2. Смотрите следующий пример:

 

1 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.

1 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.

Добавить комментарий

Ваш e-mail не будет опубликован.