Изучаем sql



Pdf көрінісі
бет92/261
Дата28.07.2022
өлшемі1,6 Mb.
#147825
1   ...   88   89   90   91   92   93   94   95   ...   261
Байланысты:
Изучаем SQL ( PDFDrive )


Глава 5. Запрос к нескольким таблицам
account
или с таблицей 
employee
. Таким образом, имеем пример запроса,
в котором использование псевдонимов таблиц является 
обязательным
.
Рекурсивные соединения
Можно не только несколько раз включать одну и ту же таблицу в один
запрос, фактически можно соединить таблицу с самой собой. Поначалу
это может показаться странным, но для этого есть веские основания.
В таблице 
employee
, например, есть 
рекурсивный внешний ключ
(
self
referencing foreign key
). Это означает, что она включает столбец (
supe
rior_emp_id
), указывающий на первичный ключ в рамках той же табли
цы. Этот столбец указывает на начальника сотрудника (если только
это не сам босс – тогда столбец имеет значение 
null
). С помощью 
рекур
сивного соединения 
(
selfjoin
) можно создать запрос, в результате вы
полнения которого выводится список всех сотрудников с указанием
имен их начальников:
mysql> 
SELECT e.fname, e.lname,
> e_mgr.fname mgr_fname, e_mgr.lname mgr_lname
> FROM employee e INNER JOIN employee e_mgr
> ON e.superior_emp_id = e_mgr.emp_id;
+++++
| fname | lname | mgr_fname | mgr_lname |
+++++
| Susan | Barker | Michael | Smith |
| Robert | Tyler | Michael | Smith |
| Susan | Hawthorne | Robert | Tyler |
| John | Gooding | Susan | Hawthorne |
| Helen | Fleming | Susan | Hawthorne |
| Chris | Tucker | Helen | Fleming |
| Sarah | Parker | Helen | Fleming |
| Jane | Grossman | Helen | Fleming |
| Paula | Roberts | Susan | Hawthorne |
| Thomas | Ziegler | Paula | Roberts |
| Samantha | Jameson | Paula | Roberts |
| John | Blake | Susan | Hawthorne |
| Cindy | Mason | John | Blake |
| Frank | Portman | John | Blake |
| Theresa | Markham | Susan | Hawthorne |
| Beth | Fowler | Theresa | Markham |
| Rick | Tulman | Theresa | Markham |
+++++
17 rows in set (0.01 sec)
Этот запрос включает два экземпляра таблицы 
employee
: из одного (под
псевдонимом 
e
) извлекаются имена сотрудников, а из другого (под псев
донимом 
e_mgr
) – имена начальников. Подблок 
on
использует эти псев
донимы для соединения таблицы 
employee
с самой собой посредством
внешнего ключа 
superior_emp_id
. Это еще один пример запроса, для ко


Сравнение эквисоединений с неэквисоединениями
103
торого псевдонимы таблиц являются обязательными. В противном
случае сервер не сможет определить, на кого делается ссылка – на со
трудника или его начальника.
Хотя в таблице 
employee
18 строк, по запросу было возвращено только 17.
У президента банка, Майкла Смита (Michael Smith), нет начальника
(его столбец 
superior_emp_id
имеет значение 
null
), поэтому для данной
строки соединение не сработало. Чтобы включить Майкла Смита в ре
зультирующий набор, необходимо использовать внешнее соединение,
которое будет рассмотрено в главе 10.


Достарыңызбен бөлісу:
1   ...   88   89   90   91   92   93   94   95   ...   261




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет