My SQL数据库实用技术(04)
时间:2007-12-23 来源:不详 作者:迈克DB
当然,假如您知道这些信息是来自测验的还是测试的,则它们就会更有意义。但是,为了产生那样的信息,还需要参考event 表;我们将在下一节“从多个表中检索信息”讨论这个查询。汇总信息是很有意思的,因为它们是那么有用,但不太好控制,轻易走样。请看下列查询:
此查询选择已经去世的总统,按出生地对他们进行分组,并计算出他们逝世时的年龄,计算出平均年龄(每个州的),然后按平均年龄进行排序。换句话说,此查询按所出生地确定已故总统的平均寿命。但这说明了什么呢?它仅仅说明您可写该查询,当然并不说明此查询是否值得写。并不是用一个数据库可以做的所有事情都同样有意义;但是,人们有时在发现可以利用自己的数据库进行查询时感到很开心。这可能说明关于转播运动会的不断增加的深奥的(空洞的)统计数据在过去几年里正在不断增多的原因。运动统计者可以使用他们的数据库来计算出某个队的历史纪录,而这些数字你可能感爱好,也可能毫无兴致。
9. 从多个表中检索信息
到目前为止,我们所编写的查询都是从单个表中得到数据的。现在,我们将进行一件更为有趣的工作。以前笔者曾经提到过,关系DBMS 的强大功能在于它能够将一样东西与另一样东西相关联,因为这样使得能够结合多个表中的信息来解答单个表不能解答的问题。本节介绍怎样编写这种查询。在从多个表中选择信息时,需要执行一种称为连接( j o i n)的操作。这是因为需要将一个表中的信息与其他表中的信息相连接来得出查询结果。即通过协调各表中的值来完成这项工作。
本文来自织梦
我们来研究一个例子。在前面的“学分保存方案”小节中,给出了一个检索特定日期的测验或测试学分的查询,但没有解释。现在可以进行解释了。这个查询实际涉及到三种连接方法,因此我们分两步进行研究。第一步,我们构造一个对特定日期的学分进行选择的查询,如下所示:
此查询找出具有给定日期的记录,然后利用该记录中的事件ID 查找具有相同事件ID 的学分。对于每个匹配的事件记录和学分记录组合,显示学生I D、学分、日期和事件类型。此查询在两个重要方面不同于我们曾经编写过的其他查询。它们是:
■ FROM 子句给出了不止一个表名,因为我们要检索的数据来自不止一个表:
FROM event,score
■ WHERE 子句说明event 和score 表是由每个表中的event_id 值的匹配连接起来的:
where event.event_id=score.event_id
请注重,我们是怎样利用tbl_name.col_name 语法引用列,以便MySQL 知道引用的是哪些表的列。(event_id 出现在两个表中,假如不用表名来限定它的话将会出现混淆。)此查询中的其他列( d a t e、s c o r e、t y p e)可单独使用而不用表名限定符,因为它们在表中只出现一次,从而不会出现含混。但是,一般在连接中我们对每个列都进行限定以便清楚地表示出每个列是属于哪个表。在完全限定的形式下,查询如下: 织梦内容管理系统
从现在起,我们将使用完全限定的形式。第二步,我们利用student 表完成查询以便显示学生名。(第一步中查询的输出给出了student_id 字段,但是名字更有意义。)名字显示是利用score 表和student 表两者都具有student_id 列,使它们中的记录可被连接这个事实来完成的。最终的查询如下:
上一篇:My SQL数据库实用技术(02) 下一篇:My SQL数据库实用技术(03)
文章评论
共有位Admini5网友发表了评论 查看完整内容