数据库命令扩展

上一章节,主要讲数据库常用的基本操作,本章节,也还是常用到的数据库命令,稍微做一个扩展,做测试统计的时候会用到哦~主要内容如下:

1、唯一性查询:DISTINCT;

2、多表查询;

3、常用函数;

4、连表查询(左连接、右连接)

·····

【实战练习】

数据准备:

人员表(users),签到表(sign),获奖表(win),如下所示:

users:     sign:     win:

 

其中,users表中显示所有人员的信息,sign是每日人员的签到信息,人员进行签到后可以进行抽奖,抽到奖的信息会记录在win表中。

【DISTINCT:唯一性查询】

唯一性查询,即大家常说的,去重查询。

为什么要去重,什么时候需要去重呢?

举个例子,签到表中用户每天都可以进行签到,那如何统计签到的总人数(注:非总人次)呢,大家知道,同一个人可以有多次签到的,

这个时候,就需要用关键字:DISTINCT ,它可以返回唯一不同的值。

查询语句如下:

select count(DISTINCT openid) from sign;    -----统计去重后参与签到的总人数

select DISTINCT openid from sign;           -----统计去重后参与签到的人员openid

结果如下:

      

【多表查询】

常用到的多表查询,主要有几种:

1、连表关系查询

SELECT a.`openid`,a.`name`,b.`wintime` FROM users a,win b WHERE a.`openid`=b.`openid`;    -----查询中奖人的openid、姓名、中奖时间


SELECT a.`openid`,a.`name`FROM users a,win b WHERE a.`openid`=b.`openid`;                 -----查询中奖人的openid、姓名

SELECT openid,name FROM users WHERE `openid` IN (SELECT openid FROM win); -----查询中奖人的openid、姓名

结果如下:

 (第1条查询结果)             (第2、3条查询结果一致)

2、多表多记录查询

SELECT * FROM
(SELECT COUNT(openid) AS '总人数' FROM users) A1,
(SELECT COUNT(DISTINCT openid) AS '总签到人数' FROM SIGN)A2,
(SELECT COUNT(openid) AS '总签到人次' FROM SIGN)A3,
(SELECT COUNT(openid) AS '获奖人数' FROM win)A4,
(SELECT openid AS '5号获奖人员openid' FROM win WHERE wintime LIKE '%05')A5;     -----查询users表总人数,sign表总签到人数、总签到人次,win表获奖人数统计信息以及5号当天获奖人的信息

结果如下:

需要注意的是,每一个子查询的结果和命名必须是唯一值,后面定义的编号A1、A2···,也必须唯一,否则会报错。

【常用函数】

平时工作,比较常用的函数,count()、max()、avg()、sum()。

count():返回指定列的统计值(即行数);

SELECT COUNT(openid) AS '总人数' FROM users;    -----统计users表中的总人数

max():返回指定列的值的最高值,对应的,还有min(),返回列的最低值;

SELECT MAX(score) FROM win ;        -----统计win表中最高分

avg():返回指定列的平均值;

SELECT AVG(score) FROM win ;      -----统计win表中平均分

sum():返回指定列的总数,数字类型的值得总和。

SELECT SUM(score) FROM win ;      -----统计win表中,所有人的得分总和

【连表查询(左连接、右连接)】

(未完待续····)

 

如果对你有用,就赶紧收藏吧!拿走不谢!

 

posted @ 2018-03-05 00:11  省略  阅读(285)  评论(0编辑  收藏  举报