MySQL Cookbook读书笔记第三章
1,查询指定列/从指定列中查询
若需要指定每一列在查询结果中出现的先后顺序,可以在select语句中指定(dstuser在dsthost之后):
查询显示用户所关注的列:
2,指定查询行
使用where关键字可以查询符合条件限制的数据例如:查找srchost为venus或者srchost以s开头的行记录:
使用操作符like进行模式匹配,其中%表示通配符,代表一个差多为任意值的字符串。
where使用操作符and可以查询多个条件:
条件并集:
3,格式化显示查询结果
当查询语句中没有重命名列名,MySQL将直接使用数据库表中定义的列名作为结果中的列名。
使用运算表达式来格式化查询结果:
上例中在查询结果中定义一个新列,十分冗长。我们可以使用DATE_FORMAT得到一样的查询结果。
同样,列名很长;为给一个输出列赋予一个自己选择的名称,可以使用as name子句来指定列名(别名在where表达式中不能使用):
别名在where表达式中无法使用:
4,合并多列来构建复合值
使用concat()函数如:(将host和user组合为邮件地址)
5,调试比较表达式
有时候使用where语句,但是不确定查询结构是否符合查询条件,例如:
我们可以使用一下语句来进行对比:
6,是查询结果唯一化
使用关键字distinct来过滤冗余
用于多列查询结果:
统计查询结果中互不相同的结果的数量,可以使用count(distinct):
7,结果集排序
使用order by语句
以不同的列作为查询结果的排序依据,先以srchost排序然后以srcuser排序:
在order by 子句的最后,加上关键字desc表示按逆序排序:
8,使用视图来简化查询
当查询频繁出现需要使用运算表达式才能得到期望的结果是,一般选择使用视角create view:
创建一个视图,然后在视图中进行操作可以简化操作流程,当频繁出现使用运算表达式才能得到的期望结果时,会比较简单。
9,多表查询
多表查询通常使用联合(join)操作或者使用子查询
通过profile_contact.sql来导入数据表:
mysql –u burness –p cookbook < profile_contact.sql
当我们需要查询profile表中记录的每一个联系人的名字,所使用的服务以及相应的帐号,可以使用联合操作来实现这样的查询:
from子句指定了所要查询的表(这里是profile和profile_contact),on子句指定了两个表的行的绑定规则,他们按照id=profile_id的规则绑定到一行。
列出profile_contact表中关于Mort的所有信息,首先要知道对应的在profile的Mort的id信息,可以通过子查询name列直接查询需要的结果,而不需要用户自己查询对应的profile表中的id值。(括号中的select语句就是一个子查询)
10,从查询结果集头或尾取出部分行
只显示查询结果的部分行,通常使用limit子句并且经常要跟order by子句配合使用
找到最早出生的三个人:(使用order by 和limit)
找出日历年内最早或最迟的出生日:将birth值的月份和日期进行排序,则可将查询结果先根据生日的月和日进行排序
使用limit子句的优势在于数据库服务器只向用户返回查询结果的第一行,不会返回其他行。
11,在结果集中间选取部分行
同样可以通过limit子句来指定从查询结果的第几行开始,一共返回多少行:
limit子句使用方法: