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

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

Формирование таблиц | Подзапросы, ориентированные на задачи | Gt; SUM(avail_balance) tot_deposits _> FROM account | Подзапросы в условиях фильтрации | Подзапросы как генераторы выражений | Gt; SUM(a.avail_balance) tot_deposits _> FROM account a | Краткий обзор подзапросов | Упражнения | Внешние соединения | Сравнение левосторонних и правосторонних внешних соединений |


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

 

В главе 5 была представлена концепция рекурсивного соединения, при котором таблица соединяется сама с собой. Вот пример рекурсивного соединения из главы 5, в котором таблица employee соединяется сама с собой для формирования списка сотрудников и их руководителей:

 

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.02 sec)

 

Этот запрос функционирует нормально за исключением одной малень_ кой неувязки: в результирующий набор не включаются сотрудники, у которых нет начальника. Однако после замены внутреннего соедине_ ния на внешнее в результирующий набор попадают все сотрудники, даже те, у которых нет руководителя:

 

mysql> SELECT e.fname, e.lname,  
_> e_mgr.fname mgr_fname, e_mgr.lname mgr_lname
_> FROM employee e LEFT OUTER JOIN employee e_mgr
_> ON e.superior_emp_id = e_mgr.emp_id;
+__________+___________+___________+___________+
| fname | lname | mgr_fname | mgr_lname |
       

 

        Глава 10. И снова соединения
 
+__________+___________+___________+___________+
| Michael | Smith | NULL | NULL |
| 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 |

 

+__________+___________+___________+___________+ 18 rows in set (0.00 sec)

 

Результирующий набор теперь включает Майкла Смита (Michael Smith), который является президентом банка, следовательно, начальника у не_ го нет. Для формирования списка всех сотрудников и их начальников, если таковые имеются, запрос использует левостороннее внешнее со_ единение. Если сделать внешнее соединение правосторонним, будут получены следующие результаты:

 

mysql> SELECT e.fname, e.lname,    
_> e_mgr.fname mgr_fname, e_mgr.lname mgr_lname
_> FROM employee e RIGHT OUTER 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 |
| NULL | NULL | Susan | Barker |
| Susan | Hawthorne | Robert | Tyler |
| John | Gooding | Susan | Hawthorne |
| Helen | Fleming | Susan | Hawthorne |
| Paula | Roberts | Susan | Hawthorne |
| John | Blake | Susan | Hawthorne |
| Theresa | Markham | Susan | Hawthorne |
| NULL | NULL | John | Gooding |
| Chris | Tucker | Helen | Fleming |
| Sarah | Parker | Helen | Fleming |
| Jane | Grossman | Helen | Fleming |
| NULL | NULL | Chris | Tucker |
| NULL | NULL | Sarah | Parker |
           

 

Перекрестные соединения      
         
| NULL | NULL | Jane | Grossman |
| Thomas | Ziegler | Paula | Roberts |
| Samantha | Jameson | Paula | Roberts |
| NULL | NULL | Thomas | Ziegler |
| NULL | NULL | Samantha | Jameson |
| Cindy | Mason | John | Blake |
| Frank | Portman | John | Blake |
| NULL | NULL | Cindy | Mason |
| NULL | NULL | Frank | Portman |
| Beth | Fowler | Theresa | Markham |
| Rick | Tulman | Theresa | Markham |
| NULL | NULL | Beth | Fowler |
| NULL | NULL | Rick | Tulman |

 

+__________+___________+___________+___________+ 28 rows in set (0.00 sec)

 

По этому запросу выбираются все руководители (по_прежнему третий и четвертый столбцы) вместе со всеми их подчиненными. Поэтому Майкл Смит появляется дважды – как начальник Сьюзен Баркер (Su_ san Barker) и Роберта Тайлера (Robert Tyler). Сьюзен Баркер появляет_ ся один раз, она никем не руководит (значения null в первом и втором столбцах). Все 18 сотрудников появляются в третьем и четвертом столб_ цах, по крайней мере, один раз. Некоторые появляются несколько раз, если у них в подчинении несколько сотрудников. Таким образом, в ре_ зультирующем наборе 28 строк. Этот результат очень отличается от результата предыдущего запроса, а обеспечен он изменением всего од_ ного ключевого слова (left на right). Следовательно, при использова_ нии внешнего соединения необходимо тщательно продумывать, каким оно должно быть – левосторонним или правосторонним.

 


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


<== предыдущая страница | следующая страница ==>
Трехсторонние внешние соединения| Перекрестные соединения

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