JOIN
SELECT ...
FROM table_1
JOIN table_2
ON [condition]
...
Если имя поля, по которому происходит объединение, совпадает в обеих таблицах (как в примерах выше), то можно использовать сокращенную запись c оператором USING:
SELECT a.column_1, b.column_2
FROM table_1 a
JOIN table_2 b
USING (id)
...
При объединении таблиц можно также использовать подзапросы. Их можно объединять с другими таблицами или друг с другом:
SELECT ...
FROM table_1
JOIN (
SELECT ...
FROM table_2
) AS subquery
ON table_1.id = subquery.id
...
SELECT ...
FROM (
SELECT ...
FROM table_1
) AS subquery_1
JOIN (
SELECT ...
FROM table_2
) AS subquery_2
ON subquery_1.id = subquery_2.id
...
Процесс объединения:
- Сначала каждая строка первой таблицы сопоставляется с каждой строкой второй таблицы. т.е. происходит декартово произведение двух множеств, результатом которого является новое множество, состоящее из всевозможных пар исходных строк.
- Затем для каждой объединённой строки, состоящей из строк двух исходных таблиц, проверяется условие соединения, указанное после оператора
ON. - После этого в соответствии с выбранным типом объединения формируется результирующая таблица.
При соединении не двух, а нескольких таблиц, операция соединения выполняется последовательно несколько раз, т.е. описанный выше алгоритм запускается столько раз, сколько указано соединений. При этом в этой последовательности при каждом объединении может использоваться любой тип соединения (INNER, LEFT и т.д.).
Для двух соединений запрос может выглядеть примерно следующим образом:
SELECT a.column_1, b.column_2
FROM table_1 a
LEFT JOIN table_2 b
ON a.user_id = b.user_id
JOIN table_3 c
ON b.order_id = c.order_id
...