Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2377686
  • 博文数量: 609
  • 博客积分: 10061
  • 博客等级: 上将
  • 技术积分: 5920
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-25 08:30
文章分类

全部博文(609)

文章存档

2010年(13)

2009年(39)

2008年(558)

我的朋友

分类: Mysql/postgreSQL

2008-09-01 10:20:04

Mysql入门系列:MySQL教程(9)



  自MySQL3.22 以来,可使用DATE_ADD( ) 或DATE_SUB( ) 从一个日期计算另一个日期。这些函数取一个日期及时间间隔并产生一个新日期。例如:

  本节中前面给出的一个查询选择70 年代逝世的总统,它对选择范围的端点使用直接的日期值。该查询可以利用一个字符串日期和一个由开始日期和时间间隔计算出的结束日期来重写:

  会员更新查询可根据DATE_ADD( ) 写出如下:


  本章前面给出了一个查询如下,确定不久要来检查但还没来诊所的牙科病人:


  现在回过头来看,读者会更清楚这个查询的含义了。

  7. 模式匹配

  MySQL允许查找与某个模式相配的值。 这样,可以选择记录而不用提供精确的值。为了进行模式匹配运算,可使用特殊的运算符( LIKE 和NOT LIKE),并且指定一个包含通配符的串。字符“_”匹配任意单个字符,而“%”匹配任意字符序列(包括空序列)。使用L I K E或NOT LIKE 的模式匹配都是不区分大小写的。下列模式匹配以“W”或“w”开始的姓:


  此查询给出了一个常见的错误,它对一个算术比较运算符使用了模式。这种比较成功的惟一可能是相应的列确实包含串“ W %”或“w %”。下列模式匹配任意位置包含“W”或“w”的姓:


  

  MySQL还提供基于扩展正规表达式的模式匹配。正规表达式在附录C 的REGEXP 运算符的介绍中描述。

  8. 生成汇总

 MySQL所能做的最有用的事情是浓缩大量的原始数据行并对其进行汇总。当学会了利用MySQL来生成汇总时,它就变成了用户强有力的好帮手了,因为手工进行汇总是一项冗长的、费时的、易出错的工作。汇总的一种简单的形式是确定在一组值中哪些值是唯一值。利用DISTINCT 关键字来删除结果中的重复行。例如,总统出生的各个州可按如下找出:


  其他的汇总形式涉及计数,可利用COUNT( ) 函数。如果使用COUNT (*),它将给出查询所选择的行数。如果一个查询无WHERE 子句,COUNT(*) 将给出表中的行数。下列查询给出共有多少人当过美国总统:

  如果查询有WHERE 子句,COUNT(*) 将给出此子句选择多少行。下面的查询给出目前为止对班级进行了多少次测试:


               

  COUNT(*) 对选中的行进行计数。而COUNT(col_name) 只对非NULL 值进行计数。下面的查询说明了这些差异:


  这表示,总共有41位总统,他们中只有一个具有名字后缀,并且大多数总统都已去世。自MySQL3.23.2 以来,可以将COUNT( ) 与DISTINCT 组合对选择结果集中不同的值进行计数。例如,为了对总统出生的不同州进行计数,可执行下列查询:


  

  可以根据汇总列中单独的值对计数值进行分解。例如,您可能根据下列的查询结果知道班级中所有学生的人数:


  但是,有多少是男孩?有多少是女孩?分别得出男孩、女孩的一种方法是分别对每种性别进行计数:


  虽然这个方法可行,但是它很繁锁而且并不真正适合于可能有许多不同的值的列。考虑一下怎样以这种方式确定每个州出生的总统人数。您不得不找出有哪些 州,从而不能省略(SELECT DISTINCT state FROM president),然后对每个州执行一个SELECT COUNT(*) 查询。很显然,有些事是可以简化的。所幸MySQL可以利用单个查询对一个列中不同的值进行计数。因此,针对学生表可以按如下得出男孩和女孩的人数:


阅读(977) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~