MySQL Cookbook读书笔记第三章

1,查询指定列/从指定列中查询

image

若需要指定每一列在查询结果中出现的先后顺序,可以在select语句中指定(dstuser在dsthost之后):

image

查询显示用户所关注的列:

image

2,指定查询行

使用where关键字可以查询符合条件限制的数据例如:查找srchost为venus或者srchost以s开头的行记录:

imageimage

使用操作符like进行模式匹配,其中%表示通配符,代表一个差多为任意值的字符串。

where使用操作符and可以查询多个条件:

image

条件并集:

image

3,格式化显示查询结果

当查询语句中没有重命名列名,MySQL将直接使用数据库表中定义的列名作为结果中的列名。

image

使用运算表达式来格式化查询结果:

image

上例中在查询结果中定义一个新列,十分冗长。我们可以使用DATE_FORMAT得到一样的查询结果。

image

同样,列名很长;为给一个输出列赋予一个自己选择的名称,可以使用as name子句来指定列名(别名在where表达式中不能使用):

image

别名在where表达式中无法使用:

image

image

 

4,合并多列来构建复合值

使用concat()函数如:(将host和user组合为邮件地址)

image

5,调试比较表达式

有时候使用where语句,但是不确定查询结构是否符合查询条件,例如:

image

我们可以使用一下语句来进行对比:

image

6,是查询结果唯一化

使用关键字distinct来过滤冗余

imageimage

用于多列查询结果:

image

统计查询结果中互不相同的结果的数量,可以使用count(distinct):

image

7,结果集排序

使用order by语句

image

以不同的列作为查询结果的排序依据,先以srchost排序然后以srcuser排序:

image

在order by 子句的最后,加上关键字desc表示按逆序排序:

image

8,使用视图来简化查询

当查询频繁出现需要使用运算表达式才能得到期望的结果是,一般选择使用视角create view:

image

创建一个视图,然后在视图中进行操作可以简化操作流程,当频繁出现使用运算表达式才能得到的期望结果时,会比较简单。

image

9,多表查询

多表查询通常使用联合(join)操作或者使用子查询

通过profile_contact.sql来导入数据表:

mysql –u burness –p cookbook < profile_contact.sql

image

当我们需要查询profile表中记录的每一个联系人的名字,所使用的服务以及相应的帐号,可以使用联合操作来实现这样的查询:

image

from子句指定了所要查询的表(这里是profile和profile_contact),on子句指定了两个表的行的绑定规则,他们按照id=profile_id的规则绑定到一行。

列出profile_contact表中关于Mort的所有信息,首先要知道对应的在profile的Mort的id信息,可以通过子查询name列直接查询需要的结果,而不需要用户自己查询对应的profile表中的id值。(括号中的select语句就是一个子查询)

image

10,从查询结果集头或尾取出部分行

只显示查询结果的部分行,通常使用limit子句并且经常要跟order by子句配合使用

image

找到最早出生的三个人:(使用order by 和limit)

image

找出日历年内最早或最迟的出生日:将birth值的月份和日期进行排序,则可将查询结果先根据生日的月和日进行排序

image

使用limit子句的优势在于数据库服务器只向用户返回查询结果的第一行,不会返回其他行。

11,在结果集中间选取部分行

同样可以通过limit子句来指定从查询结果的第几行开始,一共返回多少行:

image

image

limit子句使用方法:

image

posted @ 2014-05-01 22:38  小石头@shu  阅读(232)  评论(0编辑  收藏  举报