sql查询语句,要点总结

2022-10-11  本文已影响0人  M_lear

sql中最重要的恐怕就是查询语句了。

要点1,必要结构

查询语句的语法结构:

SELECT [DISTINCT] select_list
[ INTO new_table]
FROM table_name
[ WHERE search_condition]
[ GROUP BY group_by_expression]
[ HAVING search_condition]
[ ORDER BY order_expression [ ASC|DESC ] ]

所以,必要结构为SELECT select_list FROM table_name;
查询语句必须有:1. 选择的列。2. 数据来源(可以是联结生成的虚拟表)

要点2,执行顺序

FROM > WHERE > GROUP BY > HAVING > SELECT > DISTINCT > ORDER BY > LIMIT
  1. from,确定数据源(基本表或虚拟表)
  2. where,筛选行
  3. group by,行分组
  4. having,筛选组
  5. select,筛选列,组聚集成行
  6. distinct,行去重
  7. order by,行排序
  8. limit,限制结果集行数

要点3,了解必要函数

三类重要的函数:

  1. 处理null的函数,例如:coalesce
  2. 处理时间日期的函数
  3. 处理字符串的函数

扩展阅读1

把多行变成一行,根据具体需求,有两种情况:

  1. group by聚集
  2. 联结

举个多行变一行,使用联结的例子:
电表上传的功率、电能数据都放在ts_kv表,功率和电能对应不同的key,如果值带小数放dbl_v,long_v为null,如果值为整数放long_v,dbl_v为null。

需求:查询一个时间区间[1665280800000, 1665290100000]内,电表(ec94f0f0-3fc3-11ed-b94a-23d6e309bb5e)上传的功率、电能数据:

select 时间戳, 功率, 电能 from
((select ts as 时间戳, COALESCE(dbl_v, long_v) as 功率 from ts_kv where entity_id = 'ec94f0f0-3fc3-11ed-b94a-23d6e309bb5e' and key = 57 and ts between 1665280800000 and 1665290100000) as t1
left join
(select ts, COALESCE(dbl_v, long_v) as 电能 from ts_kv where entity_id = 'ec94f0f0-3fc3-11ed-b94a-23d6e309bb5e' and key = 58 and ts between 1665280800000 and 1665290100000) as t2
on 时间戳 = t2.ts)
order by 时间戳;

扩展阅读2

什么场景下需要窗口函数?
窗口函数和group by语句都是分组计算,不同之处在于,group by配合聚集函数,会把每个分组聚集成一行结果。而窗口函数,组内每行都会有一个结果。常用于组内排名等场景。

上一篇 下一篇

猜你喜欢

热点阅读