|
|
 |
 |
|
|
 |
|
MySQL数据库技术(04)
|
|
|
|
编辑:华夏媒体 作者:未知 来源:网络 时间:2006-07-29 总浏览量:4168 |
|
文字大小:[ 大 中 小 ]
文字颜色: 双击滚屏/单击停止 |
|
[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [下一页]
|
此查询给出了一个常见的错误,它对一个算术比较运算符使用了模式。这种比较成功的惟一可能是相应的列确实包含串“ W %”或“w %”。下列模式匹配任意位置包含“W”或“w”的姓:

 MySQL 还提供基于扩展正规表达式的模式匹配。正规表达式在附录C 的REGEXP 运算符的介绍中描述。 8. 生成汇总 MySQL 所能做的最有用的事情是浓缩大量的原始数据行并对其进行汇总。当学会了利用MySQL 来生成汇总时,它就变成了用户强有力的好帮手了,因为手工进行汇总是一项冗长的、费时的、易出错的工作。汇总的一种简单的形式是确定在一组值中哪些值是唯一值。利用DISTINCT 关键字来删除结果中的重复行。例如,总统出生的各个州可按如下找出:
 其他的汇总形式涉及计数,可利用COUNT( ) 函数。如果使用COUNT (*),它将给出查询所选择的行数。如果一个查询无WHERE 子句,COUNT(*) 将给出表中的行数。下列查询给出共有多少人当过美国总统:
 如果查询有WHERE 子句,COUNT(*) 将给出此子句选择多少行。下面的查询给出目前为止对班级进行了多少次测试:

 COUNT(*) 对选中的行进行计数。而COUNT(col_name) 只对非NULL 值进行计数。下面的查询说明了这些差异:
 这表示,总共有41 位总统,他们中只有一个具有名字后缀,并且大多数总统都已去世。自MySQL 3.23.2 以来,可以将COUNT( ) 与DISTINCT 组合对选择结果集中不同的值进行计数。例如,为了对总统出生的不同州进行计数,可执行下列查询:
 可以根据汇总列中单独的值对计数值进行分解。例如,您可能根据下列的查询结果知道班级中所有学生的人数:
 但是,有多少是男孩?有多少是女孩?分别得出男孩、女孩的一种方法是分别对每种性别进行计数:
 虽然这个方法可行,但是它很繁锁而且并不真正适合于可能有许多不同的值的列。考虑一下怎样以这种方式确定每个州出生的总统人数。您不得不找出有哪些州,从而不能省略(SELECT DISTINCT state FROM president),然后对每个州执行一个SELECT COUNT(*) 查询。很显然,有些事是可以简化的。所幸MySQL 可以利用单个查询对一个列中不同的值进行计数。因此,针对学生表可以按如下得出男孩和女孩的人数:

 如果以这种方法对值计数, GROUP BY 子句是必须的;它告诉MySQL 在对值计数之前怎样进行聚集。如果将其省去,则要出错。COUNT(*) 与GROUP BY 一起用来对值进行计数比分别对每个不同的列值进行计数有更多的优点,这些优点是: ■ 不必事先知道要汇总的列中有些什么值。 ■ 不用编写多个查询,只需编写单个查询即可。 ■ 用单一查询就可以得出所有结果,因此可以对结果进行排序。 前两个优点对于更方便地表示查询很重要。第三个优点也较为重要,因为它提供了显示 结果的灵活性。在使用GROUP BY 子句时,其结果是在要分组的列上进行排序的,但是可以 使用ORDER BY 来按不同的次序进行排序。例如,如果想得到各州产生的总统人数,并按产 生人数最多的州优先排出,可以如下使用ORDER BY 子句:

 如果希望进行排序的列是从计算得出的,则可以给该列一个别名,并在ORDER BY 子句中引用这个别名。前面的查询说明了这一点; COUNT(*) 列的别名为c o u n t。引用这样的列的另一种方法是引用它在输出结果中的位置。前面的查询可编写如下:
 我不认为按位置引用列易读。如果增加、删除或重新排序输出列,必须注意检查O R D E RBY 子句,并且如果列号改变后还得记住它。别名就不存在这种问题。如果想与计算出来的列一道使用GROUP BY,正如ORDER BY 一样,应该利用别名或列位置来引用它。下面的查询确定在一年的每个月中出生的总统人数:
|
|
[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [下一页]
|
|
|
打印 收藏 关闭 至顶部 |
|
 |
|