我是 sql 新手,我有 2 个表,第一个带有标记,第二个带有学生。标记的主键是 markid,学生的主键是学生 ID。我想知道两个表之间的关系应该是什么,这样每个学生都可以有单独的标记。以及获取数据的 sql 查询是什么。
我已经尝试了与此选择查询 s="select s.Student Name,z.Hourly1Marks from Student s,marks z" 的一对一关系,但它显示了条目的笛卡尔积。
我是 sql 新手,我有 2 个表,第一个带有标记,第二个带有学生。标记的主键是 markid,学生的主键是学生 ID。我想知道两个表之间的关系应该是什么,这样每个学生都可以有单独的标记。以及获取数据的 sql 查询是什么。
我已经尝试了与此选择查询 s="select s.Student Name,z.Hourly1Marks from Student s,marks z" 的一对一关系,但它显示了条目的笛卡尔积。
学习INNER JOIN(如果每个学生有一个分数,即1:1关系)和LEFT JOIN(如果每个学生可以有多个分数,即1:n关系)的概念。
您使用了没有限制的内部联接。你需要的是类似
SELECT S.name, Z.marks
FROM students S
JOIN marks Z ON S.student_id = Z.student_id
或等效地
SELECT S.name, Z.marks
FROM students S, marks Z
WHERE S.student_id = Z.student_id
对于 1:1 关系案例,或
SELECT S.name, Z.marks
FROM students S
LEFT JOIN marks Z ON S.student_id = Z.student_id
对于 1:N 关系案例。
假设您有两个表:
Students
--------------
IDStudent
Name
....
Marks
--------------
IDMarks
Hourly1Marks
并且Studend和Marks之间的关系是“一个学生可能有0个或更多Marks”,那么您需要在Marks表中添加一列 - 调用它studentID
,该列用作学生表的外键。
那么你可以编写这个查询
select s.Name, z.Hourly1Marks
from Student s left join marks z
on z.studentID = s.IDStudent
这将使您返回所有学生及其分数(也包括没有任何分数的学生),或者,如果您只想要至少一个分数的学生
select s.Name, z.Hourly1Marks
from Student s inner join marks z
on z.studentID = s.IDStudent