基于 MySQL 的数据库实践(自然连接)(2)

它的问题在于 course 关系和 instructor 关系中都包含了 dept_name 属性,因此它们自然连接的结果要在这个属性上相同,这样的查询会遗漏以下模式的元组对,教师所讲授的课程不是他所在系的课程,前一个查询能够正确输出这样的元组对。
 为了应付这个问题,即在保留自然连接的简洁性的同时规避过多的属性匹配,SQL 提供了一种自然连接的构造形式,允许用户来指定需要哪些列相等。

mysql> select name, title
    -> from (instructor natural join teaches) join course using (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 | Robotics                  |
| 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)

join ... using 运算中需要给定一个属性名列表,其两个输入中都必须具有指定名称的属性,考虑运算 r1 join r2 using (A1, A2),它与 r1 和 r2 的自然连接类似,只不过在 t1.A1 = t2.A1 且 t1.A2 = t2.A2 的情况下就能匹配 r1 的元组 t1 和 r2 的元组 t2,即使它们都有属性 A3,也不考虑这个属性的事。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/90f9a2fad6b5945f53611a5a8a22c7e6.html