93 Внутренниесоединения Чтобы изменить предыдущий запрос и получить результирующий на
бор, включающий только 18 строк (по одной для каждого сотрудника),
понадобится описать взаимосвязь двух таблиц. Я уже показал, что
связью между двумя таблицами служит столбец
employee.dept_id
, оста
лось только добавить эту информацию в подблок
on
блока
from
:
mysql>
SELECT e.fname, e.lname, d.name > FROM employee e JOIN department d > ON e.dept_id = d.dept_id; ++++
| fname | lname | name |
++++
| Susan | Hawthorne | Operations |
| Helen | Fleming | Operations |
| Chris | Tucker | Operations |
| Sarah | Parker | Operations |
| Jane | Grossman | Operations |
| Paula | Roberts | Operations |
| Thomas | Ziegler | Operations |
| Samantha | Jameson | Operations |
| John | Blake | Operations |
| Cindy | Mason | Operations |
| Frank | Portman | Operations |
| Theresa | Markham | Operations |
| Beth | Fowler | Operations |
| Rick | Tulman | Operations |
| John | Gooding | Loans |
| Michael | Smith | Administration |
| Susan | Barker | Administration |
| Robert | Tyler | Administration |
++++
18 rows in set (0.00 sec)
Теперь благодаря добавлению подблока
on
, предписывающего серверу
соединять таблицы
employee
и
department
, прослеживая связь от одной
таблицы к другой по столбцу
dept_id
, имеем вместо 54 строк ожидае
мые 18. Например, строка Сьюзен Хоторн (Susan Hawthorne) в табли
це
employee
в столбце
dept_id
содержит
1
(в примере не показано). Сер
вер использует это значение для поиска строки в таблице
department
,
столбец
dept_id
которой содержит
1
, и извлекает значение
'Operations'
из столбца
name
этой строки.
Если определенное значение столбца
dept_id
присутствует в одной таб
лице, но его
нет в другой, соединение строк не происходит, и они не
включаются в результирующий набор. Такой тип соединения называ
ют
внутренним соединением (
inner join ); это наиболее широко исполь
зуемый тип соединения. Поясню: если в таблице
department
есть четвер
тая строка для отдела маркетинга, но ни один сотрудник не приписан
к нему, отдел маркетинга не попадет в результирующий набор. Анало