Читайте также:
|
|
Запросы к одной таблице, конечно, не редкость, но большинство за_ просов обращены к двум, трем или даже более таблицам. Для иллюст_ рации давайте рассмотрим описания таблиц employee и department и затем определим запрос, извлекающий данные из обеих:
mysql> DESC employee; +____________________+______________________+______+_____+____________+ | Field | Type | Null | Key | Default | +____________________+______________________+______+_____+____________+
| emp_id | | | smallint(5) unsigned | | | | PRI | | NULL | | | |
| fname | | | varchar(20) | | | | | | | | | |
| lname | | | varchar(20) | | | | | | | | | |
| start_date | | | date | | | | | | | 0000_00_00 | | |
| end_date | | | date | | YES | | | | | NULL | | |
| superior_emp_id | | | smallint(5) unsigned | | YES | | MUL | | NULL | | | |
| dept_id | | | smallint(5) unsigned | | YES | | MUL | | NULL | | | |
| title | | | varchar(20) | | YES | | | | | NULL | | |
| assigned_branch_id | | smallint(5) unsigned | | YES | | MUL | | NULL | | |
+____________________+______________________+______+_____+____________+ 9 rows in set (0.11 sec)
mysql> DESC department; +_________+______________________+______+_____+_________+
Что такое соединение? | ||||||
| Field | | Type | | Null | Key | Default | | ||||
+_________+______________________+______+_____+_________+ | ||||||
| dept_id | | | smallint(5) unsigned | | | | PRI | NULL | | | |
| name | | | varchar(20) | | | | | | | | |
+_________+______________________+______+_____+_________+ 2 rows in set (0.03 sec)
Скажем, требуется выбрать имя и фамилию каждого сотрудника, а так_ же название отдела, в котором он работает. Поэтому запрос должен бу_ дет извлекать столбцы employee.fname, employee.lname и department.name. Но как можно получить данные двух таблиц одним запросом? Ответ кроется в столбце employee.dept_id, в котором хранится ID отдела каж_ дого сотрудника (более формально, столбец employee.dept_id является внешним ключом, ссылающимся на таблицуdepartment). Запрос, кото_рый вскоре будет представлен, указывает серверу использовать стол_ бец employee.dept_id как мост между таблицами employee и department, обеспечивая таким образом возможность включения столбцов обеих таблиц в результирующий набор запроса. Такой тип операции называ_ ется соединением.
Дата добавления: 2015-08-17; просмотров: 43 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Упражнения | | | Декартово произведение |