sql语法提高

1. 一个select语句的执行顺序
    a:from clause
    b:where clause
    c:group by clause
    d:select clause
    e:having clause
    f:order by clause
 
2.分组查询
    在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数     中。
 
3. whare 和 having的区别    
  • where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
  • having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
 
4. Union VS Union All
    a:Union 会把两个结果集排序,并且除去重复的元素(效率差,轻易不要用)
    b:Union All仅仅是把两个结果集合并,没有排序,也不去除重复元素(效率好)
 
5. 尽量不要使用 is null 与 is not null作为查询条件
  任何包含null值的列都将不会被包含在索引中,如果某列数据中存在空值,那么对该列建立索引的性能提升是值得怀疑的,尤其是将null作为查询条件 的一部分时。建议一方面避免使用is null和is not null, 另一方面不要让数据库字段中存在null, 即使没有内容,也应利用缺省值,或者手动的填入一个值,如:’’ 空字符串。
 
函数作用支持性
sum(列名) 求和
 
max(列名) 最大值
 
min(列名) 最小值
 
avg(列名) 平均值
 
first(列名) 第一条记录 仅Access支持
last(列名) 最后一条记录 仅Access支持
count(列名) 统计记录数 注意和count(*)的区别
MySQL:

GROUP_CONCAT(expr)  

这个方法不错 可以将 分组的字符串 以,连接起来

SELECT x.No1ModelName,GROUP_CONCAT(No1ModelDate) from product x
GROUP BY x.No1ModelName;
原文地址:https://www.cnblogs.com/yigeyanse/p/6003756.html