我创建了三个表“学生”、“课程”和“讲师”,并向其中插入了数据。现在我想通过select来检索一些数据。

当我想展示的时候: Kumar拍摄的主题
SELECT STUDENT.NAME, COURSE.SUBJECT1, COURSE.SUBJECT2, COURSE.SUBJECT3
FROM STUDENT,COURSE
WHERE STUDENT.COURSE = COURSE.COURSE = 'MLVK'它会将数据重复多次。
我希望有谁能帮助我
万事如意
发布于 2019-03-10 03:37:04
学习使用正确、明确、符合标准的 JOIN语法。
和,表别名:
SELECT s.NAME, c.SUBJECT1, c.SUBJECT2, c.SUBJECT3
FROM STUDENT s JOIN
COURSE c
ON s.COURSE = c.COURSE
WHERE c.COURSE = 'MLVK'发布于 2019-03-10 03:39:12
如果我要使用这些表格来选择Kumar拍摄的主题,我会这样写:
SELECT
s.name, c.course, c.subject1, c.subject2, c.subject3
FROM
student as s
LEFT JOIN course as c on c.course = s.course
WHERE
s.no_matrik = '23456'
GROUP BY
s.name, c.course, c.subject1, c.subject2, c.subject3我认为这个版本比之前的答案(为course =‘MLVK’的任何学生选择主题)稍微更清楚一些(为特定学生选择主题,Kumar)。此答案还将返回Kumar的信息,即使他在“学生”表中没有课程值(注册前?)。
发布于 2019-03-10 03:51:47
首先,我建议在BCNF表单中对数据进行适当的建模,在BCNF表单中,您应该对另一个表进行建模,以持久化主题并映射选择该主题的讲师。
例如:(主题表)
SubjectId LECT_ID
---------- ------------
TT234 L123
TT235 L003而且,你的课程表当然会更多地映射到主题,比如:
CourseName SubjectId
------------- --------------
DTM TT235
DTM TT695
...然后使用query:
Select sub.SubjectId, l.NAME
From
Student s JOIN
Course c
on c.CourseName = s.COURSE
JOIN Subject sub
on sub.SubjectId = c.SubjectId
JOIN Lecturer l
on l.LECT_ID = sub.Lecturer
Where s.NAME = 'Aminah'上面的查询将产生如下结果:
SubjectId NAME
--------- ----------
PP563 Ahmad
SS003 Ahmad
PP999 John 因为艾哈迈德恰好在DPG课程中教授两门课程。但是,如果您希望为Aminah报告不同的讲师,您可以将查询更改为:
SELECT NAME FROM Lecturer where LECT_ID
in (
Select l.LET_ID
From
Student s JOIN
Course c
on c.CourseName = s.COURSE
JOIN Subject sub
on sub.SubjectId = c.SubjectId
JOIN Lecturer l
on l.LECT_ID = sub.LECT_ID
Where s.NAME = 'Aminah'
) ahttps://stackoverflow.com/questions/55081142
复制相似问题