如何写好sql

由于工作原因,需要写大量sql,将平时写sql 的方法和一些特殊功能整理一下,希望能帮助到大家。

  • 1、注意层次和注释
    层次快捷键:tab
    注释快捷键:ctrl+/
  • 2、从最里层开始写
    嵌套sql 从最里层开始写,即语句的中间部分,然后一步一步向外。
  • 3、语句执行顺序、每一步生成什么了然于心
    from>join>on>where>group by>聚合函数>having>select>distinct>order by
select distinct(cust_no)  --(6)
	   ,sum(deal_amt) deal_amt_sum
from table_a a         --(1)from table table_a
	left join (select cust_num   --(2)  join 子select 语句的表 b
		 ,deal_amt
		 from table_b 
		 where deal_amt>0)b on a.cust_no=b.cust_num  --(3)连接上
where a.cust_no>'20200112'  --(4)筛选连接后的记录
group by 1  --(5)按照cust_no  分组
order by 1  
;
  • 4、常用函数要掌握:聚合、日期
    不同数据库使用方法不一样
    to_date()
    to_char()
    datediff()
    to_days()
  • 5、where 和 on
    这个问题需要在join实践中遇到才能真正理解。
    on:连接条件,符合条件的均被连接上
    where:连接后的筛选条件,符合条件的被select 出来显示
    以下两个语句可以体会一下
select * from a left join b on a.id=b.id and a.value=1
select * from a left join b on a.id=b.id where a.value=1
  • 6、select group by
    -select 后的字段均是group by后的,因此除group by 的字段以外,select 的字段均要指定分组的聚合函数。

  • 7、制表转换:max (cese when end)

  • 8、explain : type(all、null、ref)
    完整的sql 前加 explain ,可以解释sql如何运行的,type显示表的扫描方式,
    all:全表扫描
    ref:树扫描(log2)
    null:不用扫描,直接返回,最快

  • 9、join 时的优化


版权声明:本文为qq_39967296原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。