假设 我们 有 三 个 表 student 表 、 course 表 和 teacher 表 , 如下 所 示
" 学生 " 表
| 标准 标识|标准 名称|课程 标识|教师 标识|
| - -| - -| - -| - -|
| 一 个|拉梅什|一 个|一 个|
| 2 个|加内什|一 个|三 个|
| 三 个|阿德 什|三 个|三 个|
| 四 个|尼 莱什|三 个|一 个|
| 五 个|索南|三 个|四 个|
| 六 个|阿 比|2 个|四 个|
| 七 个|阿尼尔|2 个|四 个|
" 课程 " 表
| 课程 标识|课程 名称|标准 标识|教师 标识|
| - -| - -| - -| - -|
| 一 个|JAVA 语言|一 个|一 个|
| 2 个|Java 脚本|一 个|2 个|
| 三 个| VB.NET |一 个|一 个|
| 四 个|C # . NET 语言|五 个|2 个|
| 五 个|Python|五 个|四 个|
| 六 个|SAP 系统|六 个|四 个|
| 七 个|C + + 语言|六 个|一 个|
" 教师 " 表
| 教师 标识|教师 姓名|课程 标识|标准 标识|
| - -| - -| - -| - -|
| 一 个|罗伊|一 个|一 个|
| 2 个|阿米特|2 个|一 个|
| 三 个|若 翰|一 个|五 个|
| 四 个|约格 什|三 个|五 个|
| 五 个|洛基|三 个|一 个|
所以 我 已经 给 了 三 张 表 , 现在 我 想 给 学生 和 老师 看 一下 。
因此 , 您 可以 在 " student " 表 中 看到 std _ id 和 course _ id , 在 " course " 表 中 看到 course _ id 和 std _ id
因此 , 您 可以 在 student 表 中 看到 std _ id 和 course _ id , 在 course 表 中 看到 course _ id 和 std _ id
那么 这里 应该 使用 哪 一 列 来 连接 student 表 和 course 表 呢 ?
因为 这 两 个 表 都 有 std _ id 和 course _ id , 如果 我 想 显示 有 课程 的 学生 , 那么 在 这里 应该 使用 哪 一 列 来 连接 student 表 和 course 表 ?
我 还 想 在 这里 显示 教师 , 在 教师 表 中 , 我们 有 teacher _ id 、 course _ id 和 std _ id , 应该 使用 哪个 表 列 与 教师 表 连接 , 因为 student 表 也 有 teacher _ id , course 表 也 有 teacher _ id , 所以 应该 使用 哪个 表 teacher _ id 与 教师 表 连接 ?
请 让 我 知道 , 伙计 们 , 我 怎么 才能 知道 应该 用 哪 一 列 在 这里 加入 ?
2条答案
按热度按时间zyfwsgd61#
从左到右思考重要性。
如果您的主要目的是显示学生以及他们所修的课程,则[学生]数据表会在左边。如果您的主要目的是显示课程以及他们所修的学生,则[课程]数据表会在左边。如果您的主要目的是显示[教师]以及他们所教授的课程,则[教师]数据表会在左边。
在此基础上,根据需要使用尽可能多的左联接。因此,同样,如果您的主要目的是显示学生以及他们所修的课程,请将“学生”表左外联接到“学生.课程_ID =课程.课程_ID”上的“课程”表。然后,您可以将“课程”表左外联接到“课程.教师_ID =教师.教师_ID”上的“教师”表。
老实说,我认为您可以从Students表中删除Teacher_ID,因为教师与课程而不是学生相关联。同样,您可以从Course和Teacher表中删除Student_ID,因为这最终会创建多个记录。良好的表结构的目标实际上是尽可能减少一对多连接的可能性。
esyap4oy2#
这里有一个SQL小技巧,告诉你如何连接所有的数据。这是一种方法,要想得到确切的答案,你必须提出一个更精确的问题。正如我在评论中所说的,原始的数据结构需要修正。没有必要让每个表都引用其他的表。最好是按目的分离数据。例如,教师表不应该引用学生表,除非它们之间存在某种直接关系,在这种情况下,教师将与他们教授的课程有逻辑关系...但没有理由链接到学生。学生被分配到一门课程。按照数据结构化的方式,student和course之间只能是一对一的关系(除非不必要地复制了大量数据)。我修改了数据结构,然后以逻辑方式创建了
JOIN
。我列出了所有的课程,添加了谁教这门课程,然后提供了注册这门课程的学生列表。SQL小提琴
MS SQL Server 2017架构设置:
查询1:
结果: