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

Соединение трех и более таблиц

Mysql> SELECT account_id, product_cd, cust_id, avail_balance _> FROM account | Условия членства | Подзапросы | Оператор not in | Символы маски | Регулярные выражения | Упражнения | Что такое соединение? | Декартово произведение | Внутренние соединения |


Читайте также:
  1. А какие, например, программы, считались наиболее популярными у большинства?
  2. А. соединение элементов и комплексов между собой
  3. Алгебра логики. Элементарные логические операции. Таблицы истинности.
  4. Аналіз даних за допомогою зведених таблиць та зведених діаграм в Excel
  5. Безразрядные или многоразрядные таблицы
  6. Более всего танков типа Т-72 имеет российская армия - около 7000 машин различных модификаций.
  7. БОЛЕЕ ГЛУБОКОЕ ПОНИМАНИЕ

 

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


 

mysql> SELECT a.account_id, c.fed_id
_> FROM account a INNER JOIN customer c
_> ON a.cust_id = c.cust_id
         

 

98 Глава 5. Запрос к нескольким таблицам

_> WHERE c.cust_type_cd = 'B';

 

+____________+____________+ | account_id | fed_id | +____________+____________+

|   | 04_1111111 |
|   | 04_1111111 |
|   | 04_2222222 |
|   | 04_3333333 |
|   | 04_4444444 |

 

+____________+____________+ 5 rows in set (0.06 sec)

 

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

 

mysql> SELECT a.account_id, c.fed_id, e.fname, e.lname
_> FROM account a INNER JOIN customer c
_> ON a.cust_id = c.cust_id
_> INNER JOIN employee e
_> ON a.open_emp_id = e.emp_id
_> WHERE c.cust_type_cd = 'B';
+____________+____________+_________+_________+
| account_id | fed_id | fname | lname |
+____________+____________+_________+_________+
| 20 | 04_1111111 | Theresa | Markham |
       

| 21 | 04_1111111 | Theresa | Markham |

| 22 | 04_2222222 | Paula | Roberts |

| 23 | 04_3333333 | Theresa | Markham |

 

| 24 | 04_4444444 | John | Blake | +____________+____________+_________+_________+ 5 rows in set (0.03 sec)

 

Теперь имеется три таблицы, два типа соединений и два подблока on, перечисленные в блоке from. Таким образом, все немного усложняется. На первый взгляд из_за порядка перечисления таблиц может пока_ заться, что таблица employee соединяется с таблицей customer, посколь_ ку таблица account указана первой. Однако если изменить порядок рас_ положения таблиц, результаты будут абсолютно аналогичными:

 

mysql> SELECT a.account_id, c.fed_id, e.fname, e.lname
_> FROM customer c INNER JOIN account a
_> ON a.cust_id = c.cust_id
_> INNER JOIN employee e
_> ON a.open_emp_id = e.emp_id
_> WHERE c.cust_type_cd = 'B';

 

+____________+____________+_________+_________+ | account_id | fed_id | fname | lname | +____________+____________+_________+_________+ | 20 | 04_1111111 | Theresa | Markham |


 

Соединение трех и более таблиц  
   

 

| 21 | 04_1111111 | Theresa | Markham |

| 22 | 04_2222222 | Paula | Roberts |

| 23 | 04_3333333 | Theresa | Markham |

 

| 24 | 04_4444444 | John | Blake | +____________+____________+_________+_________+ 5 rows in set (0.00 sec)

 

Теперь таблица customer стоит первой, за ней идут таблицы account и employee. Поскольку подблоки on не изменились, результаты такие же.

 

Запрос, использующий три или более таблиц, можно представить как снежный ком, катящийся с горы. Первые две таблицы запускают этот ком, а каждая последующая таблица вносит в него свою лепту. Снеж_ ный ком можно рассматривать как промежуточный результирующий набор (intermediate result set), который подбирает все больше и большестолбцов по мере соединения с последующими таблицами. Поэтому таблица employee в действительности была соединена не с таблицей ac_ count, а с промежуточным результирующим набором, созданным при соединении таблиц customer и account. (Если интересно, откуда взялся снежный ком: я писал эту главу глубокой новоанглийской зимой – уже выпало 110 дюймов и завтра будет еще. Вот радость_то!)

 


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


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

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