Соединения с явными условиями
В синтаксисе явного соединения есть предложение ON
, с условием соединения, в котором может быть указано любое логическое выражение, но, как правило, оно содержит условие сравнения между двумя участвующими источниками.
Довольно часто, это условие — проверка на равенство (или ряд проверок на равенство объединённых оператором AND
) использующая оператор "=". Такие соединения называются эквисоединениями.(Примеры в главе Внутренние (INNER) и внешние (OUTER) соединения были эквисоединениями).
Примеры соединений с явными условиями:
/*
* Выборка всех заказчиков из города Детройт, которые
* сделали покупку.
*/
SELECT *
FROM customers c
JOIN sales s ON s.cust_id = c.id
WHERE c.city = 'Detroit'
/*
* Тоже самое, но включает в выборку заказчиков, которые
* не совершали покупки.
*/
SELECT *
FROM customers c
LEFT JOIN sales s ON s.cust_id = c.id
WHERE c.city = 'Detroit'
/*
* Для каждого мужчины выбрать женщин, которые выше него.
* Мужчины, для которых такой женщины не существуют,
* не будут выключены в выборку.
*/
SELECT
m.fullname AS man,
f.fullname AS woman
FROM males m
JOIN females f ON f.height > m.height
/*
* Выборка всех учеников, их класса и наставника.
* Ученики без наставника буду включены в выборку.
* Ученики без класса не будут включены в выборку.
*/
SELECT
p.firstname,
p.middlename,
p.lastname,
c.name,
m.name
FROM pupils p
JOIN classes c ON c.id = p.class
LEFT JOIN mentors m ON m.id = p.mentor