0

我是 sql 新手,我有 2 个表,第一个带有标记,第二个带有学生。标记的主键是 markid,学生的主键是学生 ID。我想知道两个表之间的关系应该是什么,这样每个学生都可以有单独的标记。以及获取数据的 sql 查询是什么。

我已经尝试了与此选择查询 s="select s.Student Name,z.Hourly1Marks from Student s,marks z" 的一对一关系,但它显示了条目的笛卡尔积。

4

2 回答 2

0

学习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 关系案例。

于 2012-05-12T11:57:28.807 回答
0

假设您有两个表:

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
于 2012-05-12T12:02:23.357 回答