【发布时间】:2016-04-30 12:12:19
【问题描述】:
我正在阅读一本关于 SQL 的书,但我被困在一个与数据库模式相关的示例上,如下图所示。
下面的例子解决了书中所述的查询:
假设我们希望回答“列出教师姓名”的查询 以及他们教授的课程的名称。”查询可以写成 SQL如下:
select name , title
from instructor natural join teaches , course
where teaches.course id = course.course id;
现在这本书说
" 请注意,teacher.course id 在 where 子句中指的是自然连接结果的课程 id 字段,因为该字段又来自于teacher 关系。 "
这本书再次用粗体表示:
“不可能使用包含原始关系名称的属性名称,例如instructor.name 或teach.course id,来引用自然连接结果中的属性;但是,我们可以使用属性名称,例如 名称和课程 ID,没有关系名称。”
(参考上面的查询)如果不可能,那么作者怎么能把查询写成
teaches.course id = course.course id
teacher.course怎么能引用自然连接属性“Course”,作者的论点太含糊了。请解释一下作者的观点。
【问题讨论】:
-
SQL Server 不支持
NATURAL JOIN,所以问题不能与那个数据库有关。 -
这个问题是关于 sql 语言的一般问题,而不是关于 sql server。我刚刚将它用作附加标签。
-
from instructor natural join teaches , course我想说:烧掉这本书!natural join通常被认为是邪恶的,与旧式逗号结合起来就面目全非。