Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Рекурсивные соединения

Оператор not in | Символы маски | Регулярные выражения | Упражнения | Что такое соединение? | Декартово произведение | Внутренние соединения | ANSI_синтаксис соединения | Соединение трех и более таблиц | Применение подзапросов в качестве таблиц |


Читайте также:
  1. ANSI_синтаксис соединения
  2. А) определение группы соединения обмоток;
  3. Бор и его соединения. Нахождение в породах, в вулканических и поствулканических процессах. Источники бора в осадочных породах.
  4. В основе процесов получения уретановых эластомеров лежит реакция поликонденсации диизоцианатов с соединениями, имеющими по крайней мере две гидроксильные группы.
  5. Внешние соединения
  6. Внутренние соединения
  7. Геохимия As. Гидротермальный процесс и соединения As.

 

Можно не только несколько раз включать одну и ту же таблицу в один запрос, фактически можно соединить таблицу с самой собой. Поначалу это может показаться странным, но для этого есть веские основания. В таблице employee, например, есть рекурсивный внешний ключ (self_ referencing foreign key). Это означает, что она включает столбец (supe_rior_emp_id), указывающий на первичный ключ в рамках той же табли_ цы. Этот столбец указывает на начальника сотрудника (если только это не сам босс – тогда столбец имеет значение null). С помощью рекур_ сивного соединения (self_join) можно создать запрос, в результате вы_полнения которого выводится список всех сотрудников с указанием имен их начальников:

 

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. Это еще один пример запроса, для ко_


 

Сравнение эквисоединений с неэквисоединениями  
   

 

торого псевдонимы таблиц являются обязательными. В противном случае сервер не сможет определить, на кого делается ссылка – на со_ трудника или его начальника.

 

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

 


Дата добавления: 2015-08-17; просмотров: 55 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Повторное использование таблицы| Сравнение эквисоединений с неэквисоединениями

mybiblioteka.su - 2015-2024 год. (0.007 сек.)