打印本文 打印本文 关闭窗口 关闭窗口
MySQL教程(5)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2448  更新时间:2009/4/22 20:43:36  文章录入:mintao  责任编辑:mintao
LEFT JOIN 而不涉及WHERE 子句中的学生ID。LEFT JOIN要求MySQL对从连接首先给出的表中选择每行生成一个输出行(即LEFT JOIN 关键字左边给出的表)。由于首先给出student 表,我们得到了每个学生的输出结果,即使是那些在absence 表中未给出的学生也都包括在输出中。此查询如下:

    前面,在“生成汇总”一节中,我们执行了一个查询,它生成score 表中数据的数值特征。该查询的输出列出了事件ID,但不包括学分日期或类型,因为我们不知道怎样将score 表连接到event 表以得到学分的日期和类型。现在可以做到了。下面的查询类似于早先的那个,但是它给出了学分的日期和类型而不只是简单的数字事件ID:

    可利用诸如COUNT( ) 和AVG( ) 这样的函数生成多个列上的汇总,即使这些列来自不同的表也是如此。下面的查询确定学分数,以及事件日期与学生性别的每种组合的平均学分。

    我们可以使用一个类似的查询来完成学分保存方案的一个任务,即在学期末计算每个学生的总学分。相应的查询如下:

    不一定要求连接必须用两个不同的表来完成。这似乎有点奇怪,但是确实可以将一个表连接到其自身。例如,可通过针对每个总统的出生地查看其他各个总统的出生地,确定几个总统是否出生在相同城市。此查询如下:

    此查询有两个技巧性的东西:
    ■ 我们需要使用同一表的两个实例,因此建立了表的别名( p 1、p 2),并利用它们无歧义地引用表列。
    ■ 每个总统的记录与自身相匹配,但是我们不希望在输出中看到同一总统出再现两次。WHERE 子句的第二行保证比较的记录为不同总统的记录,使记录不与自身匹配。可以编写一个查找出生在同一天的总统的类似查询。出生日期不能直接比较,因为那样会错过出生在不同年份的总统。我们用MONTH( ) 和DAYOFMONTH( ) 来比较出生日期的月和日,相应的查询如下:

  利用DAYOFYEAR( ) 而不是MONTH( ) 和DAYOFMONTH( ) 将得出一个更为简单的查询,但是在比较闰年日期与非闰年日期时将会得出不正确的结果。迄今所执行的连接结合了来自那些在某种意义上具有逻辑关系的表中的信息,但是只有您知道该关系无意义。MySQL并不知道(或不关心)所连接的表相互之间是否相关。例如,可将event 表连接到president 表以找出在某个总统生日那天是否进行了测验或测试,此查询如下:

    它产生了您所想要的东西。但说明了什么呢?这说明MySQL将愉快地制造出结果,至于这些结果是否有意义它不管。这是因为您使用的是计算机,所以它不能自动地判断查询的结果有用或无用。无论如何,我们都必须为自己所做的事负责。

上一页  [1] [2] [3] 

打印本文 打印本文 关闭窗口 关闭窗口