1. 查询:select ··· from ··· where ··· group by ··· having ··· order by ···
- select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中
例如:select a sum(b) c from A group by a ;错误
select a sum(b) from A group by a ;正确
select a sum(b) c from A group by a,c ;正确
- where是在分组前过滤数据;having是在分组后过滤数据
- avg平均;sum总和;count(*)总个数;count(列名)该列个数;max最大数;min最小数
- in('a','b','c')集合;like 'a%'任意字符;like 'a_b'一个字符;
- exists(内查询):exists是对外查询的检查,内查询返回非空,则exists返回true,外查询的这一行才被输出。
内查询不能包含compute和into
2. 优化例子
- 在where、order by涉及的列上加索引
- 尽量不要在for循环里用查询语句,先在外面查完放到list,再执行for循环。
- select避免使用*
3. 时间
datediff(year,birthday,getdate())
例:birthday = '2003-3-8'
getDate()= '2008-7-7'
结果为:5
FLOOR(datediff(DY,birthday,getdate())/365.25)
FLOOR函数:
FLOOR(expr) 返回小于或等于expr的最大整数.FLOOR(1.1)返回1,FLOOR(-1.1)返回-2,FLOOR(1)返回1
4. count
count(1)和count(*) 都表示全部行数
count(字段A) 表示字段A不为空的全部行数
count(字段A and 字段B) 表示字段A和字段B都不为空的行数
count(字段A or 字段B) 表示字段A或者字段B不为空的行数
count(字段A='值1' or null) 表示字段A值为值1的行数
参考题连接:https://www.cnblogs.com/rrxc/p/3994389.html
优化参考:https://www.cnblogs.com/yunfeifei/p/3850440.html