常用sql语句及子句(Group By & Having、In&Exists、Order By、Distinct、Limit、Offset)

group by & having
group by:根据字段进行分组,必须配合聚合函数使用。
having:与group by联合使用,用来过滤group by 返回的结果集,弥补了 where 关键字不能与聚合函数联合使用的不足。

IN & EXISTS
IN:确定给定的值是否与子查询或列表中的值相匹配。IN在查询的时候,首先会查询子查询的表,然后将内表与外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,IN的速度较快。
EXISTS:指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中。

IN适用于外表大而内表小的情况;
EXISTS适用于外表小而内表大的情况;

其他子句
常用sql语句及子句(Group By & Having、In&Exists、Order By、Distinct、Limit、Offset)
LIMIT是MySQL内置函数,其作用是用于限制查询结果的条数。

1)其语法格式如下:

LIMIT[位置偏移量],行数

其中,中括号里面的参数是可选参数,位置偏移量是指MySQL查询分析器要从哪一行开始显示,索引值从0开始,即第一条记录位置偏移量是0,第二条记录的位置偏移量是1,依此类推…,第二个参数为“行数”即指示返回的记录条数。

位置偏移量可以理解为跳过前xx条记录(元组).

2)基本用法

  1. 当没有指定位置偏移量时,只取4条时,可以这样写
    SELECT * FROM Table LIMIT 4;
  2. 当指定了位置偏移量时,从第3条起取5条时,可以这样写
    因为索引是从0开始计数的,所以第3条对应的索引就是2
    SELECT * FROM Table LIMIT 2,5;

3)应用场合:分页
// 后台计算出页码、页数(页大小)
int curPage = 2;
int pageSize = 10;
int startRow = (curPage - 1) * pageSize;

SELECT * FROM Table LIMIT startRow,pageSize;

limit 3,5 与 limit 5 offset 3

SELECT * FROM Table LIMIT 3,5
等同于:SELECT * FROM Table LIMIT 5 offset 3
等同于:查询第4行,往后5行数据