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

Внутренние соединения

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


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

 

Чтобы изменить предыдущий запрос и получить результирующий на_ бор, включающий только 18 строк (по одной для каждого сотрудника), понадобится описать взаимосвязь двух таблиц. Я уже показал, что связью между двумя таблицами служит столбец employee.dept_id, оста_ лось только добавить эту информацию в подблок on блока from:

 

mysql> SELECT e.fname, e.lname, d.name

 

_> FROM employee e JOIN department d _> ON e.dept_id = d.dept_id;

 

+__________+___________+________________+ | fname | lname | name | +__________+___________+________________+

 

| Susan | Hawthorne | Operations |
| Helen | Fleming | Operations |
| Chris | Tucker | Operations |
| Sarah | Parker | Operations |
| Jane | Grossman | Operations |
| Paula | Roberts | Operations |
| Thomas | Ziegler | Operations |
| Samantha | Jameson | Operations |
| John | Blake | Operations |
| Cindy | Mason | Operations |
| Frank | Portman | Operations |
| Theresa | Markham | Operations |
| Beth | Fowler | Operations |
| Rick | Tulman | Operations |
| John | Gooding | Loans |
| Michael | Smith | Administration |
| Susan | Barker | Administration |
| Robert | Tyler | Administration |

 

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

 

Теперь благодаря добавлению подблока on, предписывающего серверу соединять таблицы employee и department, прослеживая связь от одной таблицы к другой по столбцу dept_id, имеем вместо 54 строк ожидае_ мые 18. Например, строка Сьюзен Хоторн (Susan Hawthorne) в табли_ це employee в столбце dept_id содержит 1 (в примере не показано). Сер_ вер использует это значение для поиска строки в таблице department, столбец dept_id которой содержит 1, и извлекает значение 'Operations' из столбца name этой строки.

 

Если определенное значение столбца dept_id присутствует в одной таб_ лице, но его нет в другой, соединение строк не происходит, и они не включаются в результирующий набор. Такой тип соединения называ_ ют внутренним соединением (inner join); это наиболее широко исполь_ зуемый тип соединения. Поясню: если в таблице department есть четвер_ тая строка для отдела маркетинга, но ни один сотрудник не приписан к нему, отдел маркетинга не попадет в результирующий набор. Анало_


 

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

гично, если некоторые сотрудники зарегистрированы в отделе с ID 99, которого нет в таблице department, эти сотрудники не попадут в резуль_ тирующий набор. Если требуется включить все строки той или иной таблицы независимо от наличия соответствия, можно воспользоваться внешним соединением (outer join), но мы рассмотрим это в главе 10.

 

В предыдущем примере в блоке from я не указал тип используемого со_ единения. Однако если требуется соединить две таблицы путем внут_ реннего соединения, это следует явно указать в блоке from. Вот тот же пример с добавлением типа соединения (обратите внимание на ключе_ вое слово INNER (внутренний)):

 

mysql> SELECT e.fname, e.lname, d.name  
_> FROM employee e INNER JOIN department d
_> ON e.dept_id = d.dept_id;  
+__________+___________+________________+
| fname | lname | name |
+__________+___________+________________+
| Susan | Hawthorne | Operations |
| Helen | Fleming | Operations |
| Chris | Tucker | Operations |
| Sarah | Parker | Operations |
| Jane | Grossman | Operations |
| Paula | Roberts | Operations |
| Thomas | Ziegler | Operations |
| Samantha | Jameson | Operations |
| John | Blake | Operations |
| Cindy | Mason | Operations |
| Frank | Portman | Operations |
| Theresa | Markham | Operations |
| Beth | Fowler | Operations |
| Rick | Tulman | Operations |
| John | Gooding | Loans |
| Michael | Smith | Administration |
| Susan | Barker | Administration |
| Robert | Tyler | Administration |
         

 

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

 

Если тип соединения не задан, сервер по умолчанию проведет внутрен_ нее соединение. Однако, как выяснится в главе 10, есть несколько ти_ пов соединений, поэтому указание точного типа требуемого соедине_ ния должно войти в привычку.

 

Если имена столбцов, используемых для соединения двух таблиц, сов_ падают (что имеет место в предыдущем запросе), можно вместо под_ блока on применить подблок using:

 

mysql> SELECT e.fname, e.lname, d.name

 

_> FROM employee e INNER JOIN department d _> USING (dept_id);

 

+__________+___________+________________+


 

Что такое соединение?      
         
| fname | lname | name |
+__________+___________+________________+
| Susan | Hawthorne | Operations |
| Helen | Fleming | Operations |
| Chris | Tucker | Operations |
| Sarah | Parker | Operations |
| Jane | Grossman | Operations |
| Paula | Roberts | Operations |
| Thomas | Ziegler | Operations |
| Samantha | Jameson | Operations |
| John | Blake | Operations |
| Cindy | Mason | Operations |
| Frank | Portman | Operations |
| Theresa | Markham | Operations |
| Beth | Fowler | Operations |
| Rick | Tulman | Operations |
| John | Gooding | Loans |
| Michael | Smith | Administration |
| Susan | Barker | Administration |
| Robert | Tyler | Administration |

 

+__________+___________+________________+ 18 rows in set (0.01 sec)

 

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

 


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


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

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