mysql查询实践,有图有真相

作为一个知识码农,mysql查询技能是必须的,现罗列一些常用的语句和写法,以供参考。

示例的表说明:
表一 tb_visit_info 表
说明: 描述设备在时间段的访问信息

mysql查询实践,有图有真相

表二 tb_device_error_info 表

说明: 描述设备在时间段的访问错误统计
mysql查询实践,有图有真相

1 查看表数据 tb_visit_info

SELECT * FROM tb_visit_info

mysql查询实践,有图有真相

2 查看表数据 tb_device_error_info

SELECT * FROM tb_device_error_info

mysql查询实践,有图有真相

3 分组汇总

针对日期:2018-09-28,根据device_id做了访问总次数的汇总

SELECT device_id,app_id,date,
SUM(visit_num) AS total from tb_visit_info
where date='2018-09-28'
GROUP BY device_id

mysql查询实践,有图有真相

4 CASE 语句

小技巧:CASE语句:可以动态进行字段二次处理,例如:

SELECT CASE
WHEN total < 20 then "访问量少"
ELSE    "访问量达标"
END AS visit_label,total,device_id,date
FROM (SELECT device_id,app_id,date,
SUM(visit_num) AS total from tb_visit_info
where date='2018-09-28'
GROUP BY device_id) t1

上述语句利用CASE创建了新的字段visit_label,如下图:
mysql查询实践,有图有真相

5 错误数的汇总

下述语句对于设备做了错误数的汇总求和。

SELECT device_id,date,SUM(error_num)
from tb_device_error_info where date=
'2018-09-28' GROUP BY device_id

mysql查询实践,有图有真相

6 错误率的计算

将之前的俩个查询分别作为子表,进行错误率的计算,如下:

SELECT t1.device_id,t1.date,
t1.total_error/t2.total From
(SELECT device_id,date,SUM(error_num)
total_error from tb_device_error_info where
date='2018-09-28' GROUP BY device_id)
AS t1,
(SELECT device_id,app_id,date,SUM(visit_num)
AS total from tb_visit_info where date=
'2018-09-28' GROUP BY device_id)
AS t2
where t1.device_id=
t2.device_id and t1.date=t2.date

mysql查询实践,有图有真相

7 左连接

左连接示例

SELECT * from tb_visit_info t1 LEFT JOIN 
tb_device_error_info t2 ON  t1.device_id=
t2.device_id AND t1.date=t2.date

为了演示方便,从下图可以看出,在满足连接的条件下,设备在满足条件的情况下,对于不同小时段的记录,进行了连接操作,记录条数最后是倍乘的关系。
mysql查询实践,有图有真相
左连接的定义:在满足连接的条件下记录进行合并,而且,如果左面的表有记录,但是右表没有满足条件的记录,自动补NULL,如上图,结果中最下面那行,就有补NULL的情况出现。右连接同理。

8 右连接

SELECT * from tb_visit_info t1 RIGHT JOIN 
tb_device_error_info t2 ON  t1.device_id=
t2.device_id AND t1.date=t2.date

mysql查询实践,有图有真相

9 全连接

mysql无全连接命令,可以通过合并命令进行代替,如下:

SELECT * from tb_visit_info t1 RIGHT JOIN 
tb_device_error_info t2 ON 
t1.device_id=t2.device_id
AND t1.date=t2.date
UNION
SELECT * from tb_visit_info t1 LEFT JOIN 
tb_device_error_info t2 ON 
t1.device_id=t2.device_id
AND t1.date=t2.date

mysql查询实践,有图有真相

对照各图,就可以了解语句的含义,就酱紫啦,谢谢。

mysql查询实践,有图有真相