Предложение SQL Joins используется для объединения записей из двух или более таблиц в базе данных. JOIN — это средство для объединения полей из двух таблиц с использованием значений, общих для каждой.
Рассмотрим следующие две таблицы:
Таблица 1 — Таблица клиентов
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
Таблица 2 — Таблица заказов
+-----+---------------------+-------------+--------+ |OID | DATE | CUSTOMER_ID | AMOUNT | +-----+---------------------+-------------+--------+ | 102 | 2009-10-08 00:00:00 | 3 | 3000 | | 100 | 2009-10-08 00:00:00 | 3 | 1500 | | 101 | 2009-11-20 00:00:00 | 2 | 1560 | | 103 | 2008-05-20 00:00:00 | 4 | 2060 | +-----+---------------------+-------------+--------+
Теперь давайте объединим эти две таблицы в нашем операторе SELECT, как показано ниже.
SQL> SELECT ID, NAME, AGE, AMOUNT FROM CUSTOMERS, ORDERS WHERE CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
Это дало бы следующий результат.
+----+----------+-----+--------+ | ID | NAME | AGE | AMOUNT | +----+----------+-----+--------+ | 3 | kaushik | 23 | 3000 | | 3 | kaushik | 23 | 1500 | | 2 | Khilan | 25 | 1560 | | 4 | Chaitali | 25 | 2060 | +----+----------+-----+--------+
Здесь заметно, что соединение выполняется в предложении WHERE. Для объединения таблиц можно использовать несколько операторов, например =, <,>, <>, <=,> =,! =, BETWEEN, LIKE и NOT; все они могут быть использованы для объединения таблиц. Тем не менее, наиболее распространенный оператор равен символу.
В SQL доступны разные типы соединений:
-
INNER JOIN — возвращает строки при совпадении в обеих таблицах.
-
LEFT JOIN — возвращает все строки из левой таблицы, даже если в правой таблице нет совпадений.
-
RIGHT JOIN — возвращает все строки из правой таблицы, даже если в левой таблице нет совпадений.
-
FULL JOIN — возвращает строки при совпадении в одной из таблиц.
-
SELF JOIN — используется для соединения таблицы с самим собой, как если бы эта таблица была двумя таблицами, временно переименовывая хотя бы одну таблицу в операторе SQL.
-
CARTESIAN JOIN — возвращает декартово произведение наборов записей из двух или более объединенных таблиц.
INNER JOIN — возвращает строки при совпадении в обеих таблицах.
LEFT JOIN — возвращает все строки из левой таблицы, даже если в правой таблице нет совпадений.
RIGHT JOIN — возвращает все строки из правой таблицы, даже если в левой таблице нет совпадений.
FULL JOIN — возвращает строки при совпадении в одной из таблиц.
SELF JOIN — используется для соединения таблицы с самим собой, как если бы эта таблица была двумя таблицами, временно переименовывая хотя бы одну таблицу в операторе SQL.
CARTESIAN JOIN — возвращает декартово произведение наборов записей из двух или более объединенных таблиц.
Давайте теперь обсудим каждое из этих объединений подробно.