Студопедия
Случайная страница | ТОМ-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. Внешние военные опасности.

 

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

 

mysql> SELECT a.account_id, a.product_cd,
_> CONCAT(i.fname, ' ', i.lname) person_name,
_> b.name business_name
_> FROM account a LEFT OUTER JOIN individual i
_> ON a.cust_id = i.cust_id
_> LEFT OUTER JOIN business b
_> ON a.cust_id = b.cust_id;

 

+____________+____________+_________________+________________________+ | account_id | product_cd | person_name | business_name | +____________+____________+_________________+________________________+

 

|   | CHK | James Hadley | NULL |
|   | SAV | James Hadley | NULL |
|   | CD | James Hadley | NULL |
|   | CHK | Susan Tingley | NULL |
|   | SAV | Susan Tingley | NULL |
|   | CHK | Frank Tucker | NULL |
|   | MM | Frank Tucker | NULL |
|   | CHK | John Hayward | NULL |
|   | SAV | John Hayward | NULL |
|   | MM | John Hayward | NULL |
|   | CHK | Charles Frasier | NULL |
|   | CHK | John Spencer | NULL |
|   | CD | John Spencer | NULL |
|   | CD | Margaret Young | NULL |
|   | CHK | Louis Blake | NULL |
|   | SAV | Louis Blake | NULL |
|   | CHK | Richard Farley | NULL |
|   | MM | Richard Farley | NULL |
|   | CD | Richard Farley | NULL |
|   | CHK | NULL | Chilton Engineering |
|   | BUS | NULL | Chilton Engineering |
|   | BUS | NULL | Northeast Cooling Inc. |
|   | CHK | NULL | Superior Auto Body |
|   | SBL | NULL | AAA Insurance Inc. |

 

+____________+____________+_________________+________________________+ 24 rows in set (0.00 sec)


 

202 Глава 10. И снова соединения

Результаты включают все 24 строки таблицы account, а также имена клиентов или названия фирм, поступающие из двух других таблиц в результате внешнего соединения.

 

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

 

mysql> SELECT account_ind.account_id, account_ind.product_cd,
_> account_ind.person_name,
_> b.name business_name
_> FROM
_> (SELECT a.account_id, a.product_cd, a.cust_id,
_> CONCAT(i.fname, ' ', i.lname) person_name
_> FROM account a LEFT OUTER JOIN individual i
_> ON a.cust_id = i.cust_id) account_ind
_> LEFT OUTER JOIN business b
_> ON account_ind.cust_id = b.cust_id;

 

+____________+____________+_________________+________________________+ | account_id | product_cd | person_name | business_name | +____________+____________+_________________+________________________+

 

|   | CHK | James Hadley | NULL |
|   | SAV | James Hadley | NULL |
|   | CD | James Hadley | NULL |
|   | CHK | Susan Tingley | NULL |
|   | SAV | Susan Tingley | NULL |
|   | CHK | Frank Tucker | NULL |
|   | MM | Frank Tucker | NULL |
|   | CHK | John Hayward | NULL |
|   | SAV | John Hayward | NULL |
|   | MM | John Hayward | NULL |
|   | CHK | Charles Frasier | NULL |
|   | CHK | John Spencer | NULL |
|   | CD | John Spencer | NULL |
|   | CD | Margaret Young | NULL |
|   | CHK | Louis Blake | NULL |
|   | SAV | Louis Blake | NULL |
|   | CHK | Richard Farley | NULL |
|   | MM | Richard Farley | NULL |
|   | CD | Richard Farley | NULL |
|   | CHK | NULL | Chilton Engineering |
|   | BUS | NULL | Chilton Engineering |
|   | BUS | NULL | Northeast Cooling Inc. |
|   | CHK | NULL | Superior Auto Body |
|   | SBL | NULL | AAA Insurance Inc. |

 

+____________+____________+_________________+________________________+ 24 rows in set (0.00 sec)


 

В этом варианте запроса внешнее соединение таблицы individual с таб_ лицей account осуществляется в подзапросе account_ind, результаты ко_ торого затем путем внешнего соединения соединяются с таблицей bu_


 

Внешние соединения  
   

 

siness. Таким образом, каждый запрос (подзапрос и основной запрос) использует только одно внешнее соединение. При работе с другой БД (не с MySQL) эта стратегия может пригодиться для осуществления внешнего соединения с более чем одной таблицей.

 


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


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

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