mysql之select+五种子句的理解

select 可以包含很复杂,很丰富的逻辑,最能考验一个人的逻辑思维能力和sql语句的掌握程度,我是这么认为,以前的很多次面试几乎都死在它手上,所以才有了今天的这篇日志,下定决心把它学好。

where 表达式

我们要这样理解,表达式放在表中的哪一行成立,哪一行就取出来

=,>,<,>=,<=,!=/<>,and,or,between and,in,not

group by

分组,一般和统计函数配合使用才有意义

max,min,avg,count,sum

having 表达式

数据在表中,表在硬盘或内存以文件形式存在

和where区别:where 是针对表文件发挥作用的。

查询出的结果,也可以看成一张表,其文件一般临时存在于缓冲区

having就是针对查询结果发挥作用的。

所以应该现有where,才有having

order by 排序

可以针对字段进行排序,order by 字段1 [asc] 升序,[desc] 降序

有可能一个字段排序不出结果,可以选用其他字段继续排序,

order by 字段1 [asc/desc],字段2 [asc/desc]

limit [offset,] N

offset:偏移量

N:取出的条目

例如:要取某张表3-5行的记录,

select * from tableName limit 2,3;

注意:where->group by->having-order by->limit,必须按顺序出现。

子查询(重点)

where型的子查询:把内层查询的结果作为外层查询比较的条件

差不多这种形式:

select * from tableName where tid = (select tid from ...);

from型子查询:把内层查询的结果,当做一张临时表,供外层继续查询

形式:select * from (select * from ...)  as temp group by...;

exists型子查询:把外层的查询结果拿到内层,看内层的查询是否成立

形式:select oid from outTable o where exists(select * from inTable i where i.oid=o.oid);

posted on 2012-06-22 22:41  郑志伟  阅读(1804)  评论(0编辑  收藏  举报

导航