Я изучаю книгу «Системные понятия базы данных» 6-е изд.который использует пример университетской базы данных.Схема этой базы данных следующая.Жирным шрифтом обозначены основные ключи:
department(<b>dept_name</b>, building, budget)
course(<b>course_id</b>, title, dept_name, credits)
instructor(<b>ID</b>, name, dept_name, salary)
section(<b>course_id</b>, <b>sec_id</b>, <b>semester</b>, <b>year</b>, building, room number, time_slot_id)
teaches(<b>ID</b>, <b>course_id</b>, <b>sec_id</b>, <b>semester</b>, <b>year</b>)
prereq(<b>course_id</b>, <b>prereq_id</b>)
. В книге сформулирован следующий запрос:
«Перечислите имена преподавателей вместе с названиями курсов, которые они преподают».
Ответ, данный книгой, таков:
select name, title
from instructor natural join teaches, course
where teaches.course id = course.course id;
Кроме того, автор пишет:
"В противоположность этому следующий SQL-запрос не вычисляет тот же результат:
select name, title
from instructor natural join teaches natural join course;
Чтобы понять почему, обратите внимание, что естественное объединение инструктора и учителей содержит атрибуты (идентификатор, имя, название отдела, зарплата, идентификатор курса, идентификатор секунды), в то время как отношение курса содержит атрибуты (идентификатор курса, title, dept name, credit). В результате естественное объединение этих двух элементов потребует, чтобы значения атрибута dept name из двух входных данных были одинаковыми, в дополнение к требованию, чтобы значения идентификатора курса были одинаковыми.затем пропустил бы все пары (имя преподавателя, название курса), в которых преподаватель преподает курс в отделе, отличном от собственного отдела преподавателя.с другой стороны, правильно выводит такие пары."
Теперь я попробовал оба запроса, чтобы увидеть разницу.
mysql> select * from instructor;
+-------+------------+------------+----------+
| ID | name | dept_name | salary |
+-------+------------+------------+----------+
| 10101 | Srinivasan | Comp. Sci. | 65000.00 |
| 12121 | Wu | Finance | 90000.00 |
| 15151 | Mozart | Music | 40000.00 |
| 22222 | Einstein | Physics | 95000.00 |
| 32343 | El Said | History | 60000.00 |
| 33456 | Gold | Physics | 87000.00 |
| 45565 | Katz | Comp. Sci. | 75000.00 |
| 58583 | Califieri | History | 62000.00 |
| 76543 | Singh | Finance | 80000.00 |
| 76766 | Crick | Biology | 72000.00 |
| 83821 | Brandt | Comp. Sci. | 92000.00 |
| 98345 | Kim | Elec. Eng. | 80000.00 |
+-------+------------+------------+----------+
12 rows in set (0.00 sec)
mysql> select * from course;
+-----------+----------------------------+------------+---------+
| course_id | title | dept_name | credits |
+-----------+----------------------------+------------+---------+
| BIO-101 | Intro. to Biology | Biology | 4 |
| BIO-301 | Genetics | Biology | 4 |
| BIO-399 | Computational Biology | Biology | 3 |
| CS-101 | Intro. to Computer Science | Comp. Sci. | 4 |
| CS-190 | Game Design | Comp. Sci. | 4 |
| CS-315 | Robotica | Comp. Sci. | 3 |
| CS-319 | Image Processing | Comp. Sci. | 3 |
| CS-347 | Database System Concepts | Comp. Sci. | 3 |
| EE-181 | Intro. to Digital Systems | Elec. Eng. | 3 |
| FIN-201 | Investment Banking | Finance | 3 |
| HIS-351 | World History | History | 3 |
| MU-199 | Music Video Production | Music | 3 |
| PHY-101 | Physical Principles | Physics | 4 |
+-----------+----------------------------+------------+---------+
mysql> select * from teaches;
+-------+-----------+--------+----------+------+
| ID | course_id | sec_id | semester | year |
+-------+-----------+--------+----------+------+
| 76766 | BIO-101 | 1 | Summer | 2009 |
| 76766 | BIO-301 | 1 | Summer | 2010 |
| 10101 | CS-101 | 1 | Fall | 2009 |
| 45565 | CS-101 | 1 | Spring | 2010 |
| 83821 | CS-190 | 1 | Spring | 2009 |
| 83821 | CS-190 | 2 | Spring | 2009 |
| 10101 | CS-315 | 1 | Spring | 2010 |
| 45565 | CS-319 | 1 | Spring | 2010 |
| 83821 | CS-319 | 2 | Spring | 2010 |
| 10101 | CS-347 | 1 | Fall | 2009 |
| 98345 | EE-181 | 1 | Spring | 2009 |
| 12121 | FIN-201 | 1 | Spring | 2010 |
| 32343 | HIS-351 | 1 | Spring | 2010 |
| 15151 | MU-199 | 1 | Spring | 2010 |
| 22222 | PHY-101 | 1 | Fall | 2009 |
+-------+-----------+--------+----------+------+
15 rows in set (0.00 sec)
mysql> select name, title
-> from instructor natural join teaches, course
-> where teaches.course_id = course.course_id;
+------------+----------------------------+
| name | title |
+------------+----------------------------+
| Crick | Intro. to Biology |
| Crick | Genetics |
| Srinivasan | Intro. to Computer Science |
| Katz | Intro. to Computer Science |
| Brandt | Game Design |
| Brandt | Game Design |
| Srinivasan | Robotica |
| Katz | Image Processing |
| Brandt | Image Processing |
| Srinivasan | Database System Concepts |
| Kim | Intro. to Digital Systems |
| Wu | Investment Banking |
| El Said | World History |
| Mozart | Music Video Production |
| Einstein | Physical Principles |
+------------+----------------------------+
15 rows in set (0.00 sec)
mysql> select name, title
-> from instructor natural join teaches natural join course;
+------------+----------------------------+
| name | title |
+------------+----------------------------+
| Crick | Intro. to Biology |
| Crick | Genetics |
| Srinivasan | Intro. to Computer Science |
| Katz | Intro. to Computer Science |
| Brandt | Game Design |
| Brandt | Game Design |
| Srinivasan | Robotica |
| Katz | Image Processing |
| Brandt | Image Processing |
| Srinivasan | Database System Concepts |
| Kim | Intro. to Digital Systems |
| Wu | Investment Banking |
| El Said | World History |
| Mozart | Music Video Production |
| Einstein | Physical Principles |
+------------+----------------------------+
15 rows in set (0.00 sec)
По результатам я не вижу разницы и, более того, я не понимаю, почему должна быть разница. В отличие от того, чтокнига состояния, естественное объединение инструктора и учит содержит атрибуты идентификатор, имя, название отдела, зарплата, идентификатор курса, идентификатор id, семестр, год .