Читайте также:
|
|
Все запросы к нескольким таблицам, показанные до сих пор, исполь_ зовали эквисоединения (equi_joins). Это означает, что для обеспечения успешности соединения значения двух таблиц должны совпадать. Эк_ висоединение всегда использует знак равенства, например:
ON e.assigned_branch_id = b.branch_id
Подавляющее большинство запросов использует эквисоединения, но можно также соединять таблицы посредством диапазонов значений, называемых неэквисоединениями (non_equi_joins). Вот пример запроса, осуществляющего соединение по диапазону значений:
SELECT e.emp_id, e.fname, e.lname, e.start_date
FROM employee e INNER JOIN product p
ON e.start_date >= p.date_offered
AND e.start_date <= p.date_retired
WHERE p.name = 'no_fee checking';
Этот запрос соединяет две таблицы, между которыми нет взаимосвя_ зей по внешним ключам. Задача – найти всех сотрудников, принятых в банк в то время, когда предлагалась услуга беспроцентного текущего вклада. Таким образом, дата начала работы сотрудника должна нахо_ диться между датами начала и конца этой акции.
Также может понадобиться рекурсивное неэквисоединение (self_non_ equi_join), которое означает, что таблица соединяется сама с собой с ис_пользованием неэквисоединения. Например, управляющий операция_ ми решил провести шахматный турнир между всеми операциониста_ ми банка. Требуется создать список всех пар игроков. Можно попробо_ вать получить список всех операционистов (title = 'Teller'), соединив таблицу employee с самой собой, и выбрать из него все строки с разными значениями emp_id (поскольку игрок не может составить пару с самим собой):
mysql> SELECT e1.fname, e1.lname, 'VS' vs, e2.fname, e2.lname
Дата добавления: 2015-08-17; просмотров: 133 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Рекурсивные соединения | | | Gt; FROM employee e1 INNER JOIN employee e2 |