В чем разница между INNER JOIN, LEFT JOIN и RIGHT JOIN? MySQL

Разницу между SQL-запросами INNER JOIN, LEFT JOIN и RIGHT JOIN, описываются базовые случаи, для каждой конкретной платформы MySQL и могут быть свои нюансы.

В чем разница между INNER JOIN, LEFT JOIN и RIGHT JOIN?

» » Сообщение:

INNER JOIN

Возвращаются все записи из таблиц table_01 и table_02, связанные посредством primary/foreign ключей, и соответствующие условию WHERE для таблицы table_01. Если в какой-либо из таблиц отсутствует запись, соответствующая соседней, то в выдачу такая пара включена не будет. Иными словами, выдадутся только те записи, которые есть и в первой, и во второй таблице. То есть выборка идет фактически по связи (ключу), выдадутся только те записи, которые связаны между собой. «Одинокие» записи, для которых нет пары в связи, выданы не будут.

Код: Выделить всё Развернуть
SELECT * FROM table_01
INNER JOIN table_02
ON table_01.primary_key = table_02.foreign_key
WHERE table_01.column_01 = ‘value’

LEFT JOIN

Возвращаются все данные из «левой» таблицы, даже если не найдено соответствий в «правой» таблице («левая» таблица в SQL-запросе стоит левее знака равно, «правая» - правее, то есть обычная логика правой и левой руки). Иными словами, если мы присоединяем к «левой» таблице «правую», то выберутся все записи в соответствии с условиями WHERE для левой таблицы. Если в «правой» таблице не было соответствий по ключам, они будут возвращены как NULL. Таким образом, здесь главной выступает «левая» таблица, и относительно нее идет выдача. В условии ON «левая» таблица прописывается первой по порядку (table_01), а «правая» - второй (table_02):

Код: Выделить всё Развернуть
SELECT * FROM table_01
LEFT JOIN table_02
ON table_01.primary_key = table_02.foreign_key
WHERE table_01.column_01 = ‘value’

RIGHT JOIN

Возвращаются все данные из «правой» таблицы, даже если не найдено соответствий в «левой» таблице. То есть примерно также, как и в LEFT JOIN, только NULL вернется для полей «левой» таблицы. Грубо говоря, эта выборка ставит во главу угла правую «таблицу», относительно нее идет выдача. Обратите внимание на WHERE в следующем примере, условие выборки затрагивает «правую» таблицу:

Код: Выделить всё Развернуть
SELECT * FROM table_01
RIGHT JOIN table_02
ON table_01.primary_key = table_02.foreign_key
WHERE table_02.column_01 = ‘value’

Таким образом, мы разложили по полочкам, в чем отличие INNER, LEFT и RIGHT JOIN. Разумеется, представленная выше информация не нова, но она может быть полезна начинающим программистам, которые часто путаются в типах запросов.

© blog.sergey-lysenko.ru

table, where, таблицы, таблице, foreign, primary, «левой», идет, «левая», inner, соответствий, «правой», ‘value’, right, select, column, найдено, данные, «правая», второй



Похожие темыКомментарии ПросмотрыПоследнее сообщение
01050<div class="clear">...
Сообщение от: Admin
0432mySQL - Синтаксис JOIN на примерах
Сообщение от: Admin
0303Объяснение SQL объединений JOIN: LE...
Сообщение от: Admin