JOIN — используется для объединения строк из двух или более таблиц на основе связанного между ними столбца.
(INNER) JOIN: Соединение, при котором находятся пары записей из двух таблиц, удовлетворяющие условию соединения, тем самым образуя новую таблицу, содержащую поля из первой и второй исходных таблиц.
SELECT ProductID, ProductName, CategoryName
FROM Products
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;LEFT (OUTER) JOIN: Возвращает все записи из левой таблицы и соответствующие записи из правой таблицы
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;-- если нам надо при соединении посчитать и null значения
Select first_name,last_name,
count(COALESCE(Schedule.id)) as amount_classes
from teacher
left join Schedule ON Teacher.id = Schedule.teacher
GROUP BY teacher.idRIGHT (OUTER) JOIN: Возвращает все записи из правой таблицы и соответствующие записи из левой таблицы
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;FULL (OUTER) JOIN: Возвращает все записи, если есть совпадение в левой или правой таблице
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;SELF JOIN — это обычное объединение, но таблица объединяется сама с собой
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;| Схема | Запрос с JOIN |
|---|---|
| Получение всех данных из левой таблицы, соединённых с соответствующими данными из правой:MySQLSELECT поля_таблиц FROM левая_таблица LEFT JOIN правая_таблица ON правая_таблица.ключ = левая_таблица.ключ | |
| Получение всех данных из правой таблицы, соединённых с соответствующими данными из левой:MySQLSELECT поля_таблиц FROM левая_таблица RIGHT JOIN правая_таблица ON правая_таблица.ключ = левая_таблица.ключ | |
| Получение данных, относящихся только к левой таблице:MySQLSELECT поля_таблиц FROM левая_таблица LEFT JOIN правая_таблица ON правая_таблица.ключ = левая_таблица.ключ WHERE правая_таблица.ключ IS NULL | |
| Получение данных, относящихся только к правой таблице:MySQLSELECT поля_таблиц FROM левая_таблица RIGHT JOIN правая_таблица ON правая_таблица.ключ = левая_таблица.ключ WHERE левая_таблица.ключ IS NULL | |
| Получение данных, относящихся как к левой, так и к правой таблице:MySQLSELECT поля_таблиц FROM левая_таблица INNER JOIN правая_таблица ON правая_таблица.ключ = левая_таблица.ключ | |
| Получение всех данных, относящихся к левой и правой таблицам, а также их внутреннему соединению:MySQLSELECT поля_таблиц FROM левая_таблица FULL OUTER JOIN правая_таблица ON правая_таблица.ключ = левая_таблица.ключ | |
| Получение данных, не относящихся к левой и правой таблицам одновременно (обратное INNER JOIN):MySQLSELECT поля_таблиц FROM левая_таблица FULL OUTER JOIN правая_таблица ON правая_таблица.ключ = левая_таблица.ключ WHERE левая_таблица.ключ IS NULL OR правая_таблица.ключ IS NULL |