WEB开发网
开发学院数据库MySQL Mysql入门系列:MYSQL解决方案随笔 阅读

Mysql入门系列:MYSQL解决方案随笔

 2006-12-31 10:46:19 来源:WEB开发网   
核心提示: 我们想要的这种组合是所有学生/事件的组合,它们由student 表与event 表的叉积产生:FROM student, event然后我们取出此连接的结果,Mysql入门系列:MYSQL解决方案随笔(3),与score 表执行一个LEFT JOIN 语句找出匹配者:FROM studen

我们想要的这种组合是所有学生/事件的组合,它们由student 表与event 表的叉积产生:

FROM student, event

然后我们取出此连接的结果,与score 表执行一个LEFT JOIN 语句找出匹配者:

FROM student, event

LEFT JOIN score ON student.student_id = score.student.id

AND event.event_id = score.event_id

请注意,ON 子句使得score 表中的行根据不同表中的匹配者进行连接。这是解决本问题的关键。LEFT JOIN 强制为由student 和event 表的叉连接生成的每行产生一个行,即使没有相应的score 表记录也是这样。这些缺少的学分记录的结果行可通过一个事实来识别,就是来自score 表的列将全是NULL 的。我们可在WHERE 子句中选出这些记录。来自score 表的任何列都是这样,但因为我们查找的是缺少的学分,测试score 列从概念上可能最为清晰:

WHERE score.score IS NULL

可利用ORDER BY 子句对结果进行排序。两种最合理的排序分别是按学生和按事件进行,我们选择第一种:

ORDER BY student.student_id, event.event_id

现在需要做的就是命名我们希望在输出结果中看到的列。最终的查询如下:

SELECT

student.name, student.student_id,

event.date, event,event_id, event.type

FROM

student,event

LEFT JOIN score ON student.student_id = score.student_id

AND event.event_id = score.event_id

WHERE

score.score IS NULL

ORDER BY

student.student_id, event.event_id

运行此查询得出如下结果:

上一页  1 2 3 4 5 6  下一页

Tags:Mysql 入门 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接