MySQL数据库select语句6大子句(from、where、group by、having、order by 、limit )#经典员工、部门表案例语句练手!

   MySQL中的select语句,有说5大子句,有说6大子句的,两者都没有问题,只不过把from接表名算上一个子句,where是条件查询,group by是分组查询,having是筛选,order by是排序,limit是分页,下面对这五个子句进行了详细的总结,结合一些栗子,方便快速上手。

   这6个子句在我们进行查询操作时不一定同时出现,如果同时应用到了这6大子句,就一定要注意它们的先后顺序,不能随意调换,即编写顺序from->where ->group by->having ->order by ->limit。

简要介绍
字句说明
from表示查询数据从哪些表进行筛选
where表示从表中筛选出满足
group by表示按照什么条件进行分组统计
having对group by分组统计后的结果,再次筛选出满足条件的行
order by对最后的结果进行排序(desc降序、asc升序-默认的)
limit对排序后的最后结果,查询一部分(即进行分页处理操作)

测试表1: t_employee(员工表)

mysql> select * from t_employee;
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | 2011-07-28 | 7 | 浙江 | 1 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | 2015-07-03 | 7 | 河北 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | 2014-07-01 | 7 | 陕西 | 1 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | 2015-08-08 | 22 | 黑龙江 | 3 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | 2015-01-01 | 7 | 吉林 | 1 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | 2015-02-02 | 7 | 内蒙古 | 1 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | 2015-03-03 | 7 | 新疆 | 1 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | 2015-01-06 | 7 | 西藏 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | 2015-04-01 | 7 | 天津 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | 2014-09-03 | 7 | 江苏 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | 2014-04-04 | 7 | 安徽 | 1 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | 2014-02-08 | 7 | 贵州 | 1 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | 2015-06-07 | 7 | 四川 | 1 |
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | 2015-09-05 | 14 | 成都 | 2 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | 2015-08-04 | 14 | 云南 | 2 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | 2015-03-06 | 14 | 宁夏 | 2 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | 2013-06-09 | 14 | 河南 | 2 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | 2014-04-07 | 18 | 广西 | 4 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | 2015-08-04 | 20 | 广东 | 5 |
| 21 | 白百客 | 女 | 9787 | 1989-09-04 | 2014-06-05 | 20 | 海南 | 5 |
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | 2016-08-09 | 22 | 北京 | 3 |
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | 2016-05-09 | 2 | 上海 | 1 |
| 24 | 迪丽热 | 女 | 10289 | 1990-04-01 | 2017-02-06 | 18 | 北京 | 5 |
| 25 | 姚杰杰 | 女 | 9087 | 1989-08-01 | 2017-09-01 | 18 | 北京 | 5 |
-----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
25 rows in set (0.00 sec)

测试表2: t_department(部门表)

mysql> select * from t_department;
±----±-------±-----------------+
| did | dname | description |
±----±-------±-----------------+
| 1 | 开发部 | 负责后台开发工作 |
| 2 | 前端部 | 负责前端开发工作 |
| 3 | 运维部 | 负责服务运营工作 |
| 4 | 客户部 | 负责需求服务工作 |
| 5 | 测试部 | 负责测试工作 |
±----±-------±-----------------+
5 rows in set (0.00 sec)

1.group by分组查询

语法格式:

group by 字段名

group by 字段列表

(1)查询每一个部门的人数

mysql> SELECT did AS "did",COUNT(*) AS "count(*)"
    -> FROM t_employee GROUP BY did;
+------+----------+
| did  | count(*) |
+------+----------+
|    1 |       13 |
|    2 |        4 |
|    3 |        2 |
|    4 |        2 |
|    5 |        4 |
+------+----------+
5 rows in set (0.00 sec)

(2)查询每一个部门的男女人数

mysql> SELECT did,gender,COUNT(*)
    ->  FROM t_employee GROUP BY did,gender;
+------+--------+----------+
| did  | gender | COUNT(*) |
+------+--------+----------+
|    1 ||        2 |
|    1 ||       11 |
|    2 ||        4 |
|    3 ||        2 |
|    4 ||        2 |
|    5 ||        4 |
+------+--------+----------+
6 rows in set (0.00 sec)

(3)统计每个部门,薪资高于13000的男员工的人数

mysql> SELECT did,COUNT(*) FROM t_employee
    -> WHERE salary >13000 AND gender ='男' GROUP BY did;
+------+----------+
| did  | COUNT(*) |
+------+----------+
|    1 |        3 |
|    3 |        1 |
+------+----------+
2 rows in set (0.00 sec)

(4)统计每个部门,薪资高于13000的男员工的人数,并且显示部门名称

mysql> SELECT t_employee.did,dname,COUNT(*)
    -> FROM t_employee INNER JOIN t_department
    -> ON t_employee.did = t_department.`did`
    -> WHERE salary >13000 AND gender ='男'
    -> GROUP BY did;
+------+--------+----------+
| did  | dname  | COUNT(*) |
+------+--------+----------+
|    1 | 开发部       |        3 |
|    3 | 运维部      |        1 |
+------+--------+----------+
2 rows in set (0.00 sec)
2.having筛选

having与where的区别;

①where后面不能跟分组函数(count()、avg()、sum()、min()、max()),但可以有单行函数,where的条件表示对数据库表的记录中进行筛选

②having后面可以跟分组函数,having的条件是在统计的结果中再次筛选

(1)查询每一个部门的人数,并且只显示部门人数大于3个

-- 报错:错误的使用分组函数
mysql> select did,count(*) from t_employee
    -> where count(*)>3
    -> group by did;
ERROR 1111 (HY000): Invalid use of group function
mysql> select did,count(*) from T_employee
    -> group by did
    -> having count(*)>3;
+------+----------+
| did  | count(*) |
+------+----------+
|    1 |       13 |
|    2 |        4 |
|    5 |        4 |
+------+----------+
3 rows in set (0.00 sec)

(2)查询每个部门的女员工的人数,并且只显示女员工人数大于3个

mysql> select did,count(*) from t_employee
    -> where gender = '女'
    -> group by did
    -> having count(*)>3;
+------+----------+
| did  | count(*) |
+------+----------+
|    2 |        4 |
|    5 |        4 |
+------+----------+
2 rows in set (0.00 sec)

(3)查询每个部门的女员工的人数,并且只显示女员工人数大于3个,并且显示部门名称

mysql> select t_employee.did,dname,count(*)
    ->  from t_employee inner join t_department
    ->  on t_employee.did = t_department.did
    ->  where gender = '女'
    ->  group by did
    ->  having count(*)>3;
+------+--------+----------+
| did  | dname  | count(*) |
+------+--------+----------+
|    2 | 前端部     |        4 |
|    5 | 测试部      |        4 |
+------+--------+----------+
2 rows in set (0.00 sec)

(4)查询每个部门的男女员工的工资,并且只显示平均工资低于15000

mysql> select did,gender,avg(salary)
    -> from t_employee
    -> group by did,gender
    -> having avg(salary)<15000;
+------+--------+-------------+
| did  | gender | avg(salary) |
+------+--------+-------------+
|    1 ||     13834.5 |
|    2 ||     11708.5 |
|    4 ||       12332 |
|    5 ||     11065.5 |
+------+--------+-------------+
4 rows in set (0.00 sec)

(5)查询男女员工的最高工资,并且显示最高工资高于15000

mysql> select gender,max(salary)
    -> from t_employee
    -> group by gender
    -> having max(salary)>15000;
+--------+-------------+
| gender | max(salary) |
+--------+-------------+
||       18978 |
||      130990 |
+--------+-------------+
2 rows in set (0.00 sec)

(6)查询年龄大于35岁的男女员工的最低工资,并显示最低工资低于15000

mysql>   select gender,min(salary)
    ->  from t_employee
    ->  where YEAR(CURRENT_DATE())-YEAR(birthday) >35
    ->  having min(salary)<15000;
+--------+-------------+
| gender | min(salary) |
+--------+-------------+
||     8000.46 |
+--------+-------------+
1 row in set (0.00 sec)
3.order by排序

order by 语法结构:

order by 字段名/表达式

无非就是两种:

   ①升序->从低到高(asc)【默认的排序方式】–可以写也可以不写

   ②降序->从高到低(desc)

(1)查询员工信息,按照薪水从高到低

mysql> select * from t_employee
    -> order by salary desc;

mysql> select * from t_employee
-> order by salary desc;
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | 2016-05-09 | 2 | 上海 | 1 |
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | 2016-08-09 | 22 | 北京 | 3 |
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | 2015-09-05 | 14 | 成都 | 2 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | 2015-06-07 | 7 | 四川 | 1 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | 2015-03-03 | 7 | 新疆 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | 2014-04-04 | 7 | 安徽 | 1 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | 2015-08-04 | 20 | 广东 | 5 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | 2015-02-02 | 7 | 内蒙古 | 1 |
| 24 | 迪丽热 | 女 | 10289 | 1990-04-01 | 2017-02-06 | 18 | 北京 | 5 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | 2015-03-06 | 14 | 宁夏 | 2 |
| 21 | 白百客 | 女 | 9787 | 1989-09-04 | 2014-06-05 | 20 | 海南 | 5 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | 2015-08-08 | 22 | 黑龙江 | 3 |
| 25 | 姚杰杰 | 女 | 9087 | 1989-08-01 | 2017-09-01 | 18 | 北京 | 5 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | 2013-06-09 | 14 | 河南 | 2 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | 2015-01-06 | 7 | 西藏 | 1 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | 2015-08-04 | 14 | 云南 | 2 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | 2014-02-08 | 7 | 贵州 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | 2014-09-03 | 7 | 江苏 | 1 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | 2015-01-01 | 7 | 吉林 | 1 |
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | 2011-07-28 | 7 | 浙江 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | 2014-07-01 | 7 | 陕西 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | 2015-04-01 | 7 | 天津 | 1 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | 2014-04-07 | 18 | 广西 | 4 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | 2015-07-03 | 7 | 河北 | 1 |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
25 rows in set (0.00 sec)

(2)查询员工信息,按照薪水从高到低,如果薪水相同,按照编号从低到高

mysql> select * from t_employee order by salary desc,eid asc;

±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | 2016-08-09 | 22 | 北京 | 3 |
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | 2016-05-09 | 2 | 上海 | 1 |
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | 2015-09-05 | 14 | 成都 | 2 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | 2015-06-07 | 7 | 四川 | 1 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | 2015-03-03 | 7 | 新疆 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | 2014-04-04 | 7 | 安徽 | 1 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | 2015-08-04 | 20 | 广东 | 5 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | 2015-02-02 | 7 | 内蒙古 | 1 |
| 24 | 迪丽热 | 女 | 10289 | 1990-04-01 | 2017-02-06 | 18 | 北京 | 5 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | 2015-03-06 | 14 | 宁夏 | 2 |
| 21 | 白百客 | 女 | 9787 | 1989-09-04 | 2014-06-05 | 20 | 海南 | 5 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | 2015-08-08 | 22 | 黑龙江 | 3 |
| 25 | 姚杰杰 | 女 | 9087 | 1989-08-01 | 2017-09-01 | 18 | 北京 | 5 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | 2015-01-06 | 7 | 西藏 | 1 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | 2013-06-09 | 14 | 河南 | 2 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | 2015-08-04 | 14 | 云南 | 2 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | 2014-02-08 | 7 | 贵州 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | 2014-09-03 | 7 | 江苏 | 1 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | 2015-01-01 | 7 | 吉林 | 1 |
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | 2011-07-28 | 7 | 浙江 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | 2014-07-01 | 7 | 陕西 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | 2015-04-01 | 7 | 天津 | 1 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | 2014-04-07 | 18 | 广西 | 4 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | 2015-07-03 | 7 | 河北 | 1 |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
25 rows in set (0.00 sec)

(3)查询员工信息,按照性别从低到高,如果性别相同,按照薪水从高到低

mysql> select * from t_employee order by gender asc,salary desc;

±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | 2015-09-05 | 14 | 成都 | 2 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | 2015-06-07 | 7 | 四川 | 1 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | 2015-08-04 | 20 | 广东 | 5 |
| 24 | 迪丽热 | 女 | 10289 | 1990-04-01 | 2017-02-06 | 18 | 北京 | 5 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | 2015-03-06 | 14 | 宁夏 | 2 |
| 21 | 白百客 | 女 | 9787 | 1989-09-04 | 2014-06-05 | 20 | 海南 | 5 |
| 25 | 姚杰杰 | 女 | 9087 | 1989-08-01 | 2017-09-01 | 18 | 北京 | 5 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | 2013-06-09 | 14 | 河南 | 2 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | 2015-08-04 | 14 | 云南 | 2 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | 2014-02-08 | 7 | 贵州 | 1 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | 2014-04-07 | 18 | 广西 | 4 |
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | 2016-08-09 | 22 | 北京 | 3 |
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | 2016-05-09 | 2 | 上海 | 1 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | 2015-03-03 | 7 | 新疆 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | 2014-04-04 | 7 | 安徽 | 1 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | 2015-02-02 | 7 | 内蒙古 | 1 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | 2015-08-08 | 22 | 黑龙江 | 3 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | 2015-01-06 | 7 | 西藏 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | 2014-09-03 | 7 | 江苏 | 1 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | 2015-01-01 | 7 | 吉林 | 1 |
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | 2011-07-28 | 7 | 浙江 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | 2014-07-01 | 7 | 陕西 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | 2015-04-01 | 7 | 天津 | 1 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | 2015-07-03 | 7 | 河北 | 1 |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
25 rows in set (0.00 sec)

(4)查询年龄大于30岁,按照年龄从高到低排序

mysql>  select * from t_employee
    ->  where YEAR(CURRENT_DATE())-YEAR(birthday) >30
    ->  order by  YEAR(CURRENT_DATE())-YEAR(birthday) desc;

±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | 2015-01-01 | 7 | 吉林 | 1 |
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | 2011-07-28 | 7 | 浙江 | 1 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | 2015-03-03 | 7 | 新疆 | 1 |
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | 2014-04-04 | 7 | 安徽 | 1 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | 2015-01-06 | 7 | 西藏 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | 2015-04-01 | 7 | 天津 | 1 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | 2015-07-03 | 7 | 河北 | 1 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | 2015-02-02 | 7 | 内蒙古 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | 2014-07-01 | 7 | 陕西 | 1 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | 2015-08-08 | 22 | 黑龙江 | 3 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | 2014-02-08 | 7 | 贵州 | 1 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | 2015-06-07 | 7 | 四川 | 1 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | 2015-08-04 | 14 | 云南 | 2 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | 2015-03-06 | 14 | 宁夏 | 2 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | 2014-04-07 | 18 | 广西 | 4 |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
16 rows in set (0.00 sec)

(5)查询员工编号,姓名,年龄,并且显示年龄大于30岁,按照年龄从高到低排序

mysql>  SELECT eid,ename,YEAR(CURRENT_DATE()) - YEAR(birthday) >30 AS "年龄"
    ->  FROM t_employee
    ->  WHERE YEAR(CURRENT_DATE()) - YEAR(birthday) > 30
    ->  ORDER BY 年龄 DESC;

±----±---------±-----+
| eid | ename | 年龄 |
±----±---------±-----+
| 1 | 林大侠 | 1 |
| 18 | 凯记卡 | 1 |
| 16 | 汤唯俄 | 1 |
| 15 | 董号 | 1 |
| 13 | 李冰 | 1 |
| 12 | 范冰 | 1 |
| 11 | 黄大大 | 1 |
| 9 | 李峰 | 1 |
| 8 | 周大龙 | 1 |
| 7 | 乐乐 | 1 |
| 6 | 斯瓦辛格 | 1 |
| 5 | 周泡泡 | 1 |
| 4 | 李大象 | 1 |
| 3 | 猪猪侠 | 1 |
| 2 | 刘猪猪 | 1 |
| 19 | 周积极 | 1 |
±----±---------±-----+
16 rows in set (0.00 sec)

(6)查询部门编号,部门的平均工资,按照部门的平均工资升序排列

mysql> SELECT did,AVG(salary)
    -> FROM t_employee
    -> GROUP BY did
    -> ORDER BY AVG(salary) DESC;

±-----±-------------------+
| did | AVG(salary) |
±-----±-------------------+
| 3 | 70223 |
| 1 | 19945.471538461537 |
| 4 | 12332 |
| 2 | 11708.5 |
| 5 | 11065.5 |
±-----±-------------------+
5 rows in set (0.00 sec)

▲工资小数点TRUNCATE()截取到两位,参考银行家算法,四舍五入round()并不符合需求!

SELECT did,TRUNCATE(AVG(salary),2)
FROM t_employee
GROUP BY did
ORDER BY AVG(salary) DESC;

±-----±------------------------+
| did | TRUNCATE(AVG(salary),2) |
±-----±------------------------+
| 3 | 70223.00 |
| 1 | 19945.47 |
| 4 | 12332.00 |
| 2 | 11708.50 |
| 5 | 11065.50 |
±-----±------------------------+
5 rows in set (0.00 sec)

(7)查询部门编号,部门的男女人数,按照部门编号升序

SELECT did,gender,COUNT(*)
FROM t_employee
GROUP BY did,gender
ORDER BY did;

±-----±-------±---------+
| did | gender | COUNT(*) |
±-----±-------±---------+
| 1 | 女 | 2 |
| 1 | 男 | 11 |
| 2 | 女 | 4 |
| 3 | 男 | 2 |
| 4 | 女 | 2 |
| 5 | 女 | 4 |
±-----±-------±---------+
6 rows in set (0.00 sec)

(8)查询部门的编号,部门的男女人数,按照人数升序

SELECT did,gender,COUNT(*)
FROM t_employee
GROUP BY did,gender
ORDER BY COUNT(*)

±-----±-------±---------+
| did | gender | COUNT(*) |
±-----±-------±---------+
| 3 | 男 | 2 |
| 1 | 女 | 2 |
| 4 | 女 | 2 |
| 2 | 女 | 4 |
| 5 | 女 | 4 |
| 1 | 男 | 11 |
±-----±-------±---------+
6 rows in set (0.00 sec)

(9)查询部门的编号,部门名称,部门的男女人数,按照人数排序

SELECT t_employee.did,dname,gender,COUNT(*)
FROM t_employee INNER JOIN t_department
ON t_employee.did = t_department.`did`
GROUP BY did,gender
ORDER BY COUNT(*);

±-----±-------±-------±---------+
| did | dname | gender | COUNT(*) |
±-----±-------±-------±---------+
| 3 | 运维部 | 男 | 2 |
| 4 | 客户部 | 女 | 2 |
| 1 | 开发部 | 女 | 2 |
| 5 | 测试部 | 女 | 4 |
| 2 | 前端部 | 女 | 4 |
| 1 | 开发部 | 男 | 11 |
±-----±-------±-------±---------+
6 rows in set (0.00 sec)

(10)查询部门得编号,部门名称,部门的薪水高于15000的男女人数,按照人数排序

SELECT t_employee.did,dname,gender,COUNT(*)
FROM t_employee INNER JOIN t_department
ON t_employee.did = t_department.`did`
WHERE salary >15000
GROUP BY did,gender
ORDER BY COUNT(*);

±-----±-------±-------±---------+
| did | dname | gender | COUNT(*) |
±-----±-------±-------±---------+
| 3 | 运维部 | 男 | 1 |
| 4 | 客户部 | 女 | 1 |
| 1 | 开发部 | 女 | 1 |
| 5 | 测试部 | 女 | 1 |
| 2 | 前端部 | 女 | 1 |
| 1 | 开发部 | 男 | 3 |
±-----±-------±-------±---------+
6 rows in set (0.00 sec)

(11)查询每一个部门的编号,部门名称,部门的薪水高于15000的男女人数,按照人数升序,只显示人数高于1个人

SELECT t_employee.did,dname,gender,COUNT(*)
FROM t_employee INNER JOIN t_department
ON t_employee.did = t_department.`did`
WHERE salary >15000
GROUP BY did,gender
HAVING COUNT(*)>1
ORDER BY COUNT(*);

±-----±-------±-------±---------+
| did | dname | gender | COUNT(*) |
±-----±-------±-------±---------+
| 1 | 开发部 | 男 | 3 |
±-----±-------±-------±---------+
1 row in set (0.00 sec)

4…limit分页

limit m,n

①m:表示从第几行开始显示,*计算公式:m=(第几页-1)m

②n:表示每页表示的数据条数,最多n条(一页最多n条记录,不满n条的也在一页中显示)

(1)查询员工的信息,要求查询前10条的记录

SELECT * FROM t_employee LIMIT 0,10;

±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
| 1 | 林大侠 | 男 | 8000.46 | 1980-10-08 | 2011-07-28 | 7 | 浙江 | 1 |
| 2 | 刘猪猪 | 男 | 7000.67 | 1984-08-03 | 2015-07-03 | 7 | 河北 | 1 |
| 3 | 猪猪侠 | 男 | 8000 | 1985-04-09 | 2014-07-01 | 7 | 陕西 | 1 |
| 4 | 李大象 | 男 | 9456 | 1986-09-07 | 2015-08-08 | 22 | 黑龙江 | 3 |
| 5 | 周泡泡 | 男 | 8567 | 1978-08-02 | 2015-01-01 | 7 | 吉林 | 1 |
| 6 | 斯瓦辛格 | 男 | 12000 | 1985-04-03 | 2015-02-02 | 7 | 内蒙古 | 1 |
| 7 | 乐乐 | 男 | 15700 | 1982-08-02 | 2015-03-03 | 7 | 新疆 | 1 |
| 8 | 周大龙 | 男 | 9000 | 1983-03-02 | 2015-01-06 | 7 | 西藏 | 1 |
| 9 | 李峰 | 男 | 7897 | 1984-09-01 | 2015-04-01 | 7 | 天津 | 1 |
| 10 | 韩噶 | 男 | 8789 | 1989-04-02 | 2014-09-03 | 7 | 江苏 | 1 |
±----±---------±-------±--------±-----------±-----------±-----±-------------±-----+
10 rows in set (0.00 sec)

(2)查询员工的信息,要求查询第二页,每页显示10条

SELECT * FROM t_employee LIMIT 10,10;

±----±-------±-------±-------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±-------±-------±-------±-----------±-----------±-----±-------------±-----+
| 11 | 黄大大 | 男 | 15678 | 1983-05-07 | 2014-04-04 | 7 | 安徽 | 1 |
| 12 | 范冰 | 女 | 8909 | 1986-04-02 | 2014-02-08 | 7 | 贵州 | 1 |
| 13 | 李冰 | 女 | 18760 | 1987-04-09 | 2015-06-07 | 7 | 四川 | 1 |
| 14 | 邻娜 | 女 | 18978 | 1990-01-01 | 2015-09-05 | 14 | 成都 | 2 |
| 15 | 董号 | 女 | 8978 | 1987-05-05 | 2015-08-04 | 14 | 云南 | 2 |
| 16 | 汤唯俄 | 女 | 9878 | 1988-03-06 | 2015-03-06 | 14 | 宁夏 | 2 |
| 17 | 李诗圣 | 女 | 9000 | 1990-08-09 | 2013-06-09 | 14 | 河南 | 2 |
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 19 | 周积极 | 女 | 7876 | 1988-06-13 | 2014-04-07 | 18 | 广西 | 4 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | 2015-08-04 | 20 | 广东 | 5 |
±----±-------±-------±-------±-----------±-----------±-----±-------------±-----+
10 rows in set (0.00 sec)

(3)查询员工的信息,薪水高于15000的,显示第2页,每页显示4条

SELECT * FROM t_employee WHERE salary >15000 LIMIT 4,4;

±----±-------±-------±-------±-----------±-----------±-----±-------------±-----+
| eid | ename | gender | salary | birthday | hiredate | mid | native_place | did |
±----±-------±-------±-------±-----------±-----------±-----±-------------±-----+
| 18 | 凯记卡 | 女 | 16788 | 1978-09-04 | 2013-04-05 | 18 | 福建 | 4 |
| 20 | 张章子 | 女 | 15099 | 1989-12-11 | 2015-08-04 | 20 | 广东 | 5 |
| 22 | 刘化环 | 男 | 130990 | 1990-11-09 | 2016-08-09 | 22 | 北京 | 3 |
| 23 | 陈龙 | 男 | 130990 | 1990-02-04 | 2016-05-09 | 2 | 上海 | 1 |
±----±-------±-------±-------±-----------±-----------±-----±-------------±-----+
4 rows in set (0.00 sec)

(4)查询每一个部门的人数信息,显示第1页,每页显示2条

SELECT did,COUNT(*) FROM t_employee GROUP BY did LIMIT 0,2;

±-----±---------+
| did | COUNT(*) |
±-----±---------+
| 1 | 13 |
| 2 | 4 |
±-----±---------+
2 rows in set (0.00 sec)

(5)查询每个部门的女员工的人数信息,显示第1页,每页显示2条

SELECT did,COUNT(*) FROM t_employee WHERE gender='女' GROUP BY did LIMIT 0,2;

±-----±---------+
| did | COUNT(*) |
±-----±---------+
| 1 | 2 |
| 2 | 4 |
±-----±---------+
2 rows in set (0.00 sec)

#轻松一刻:

在这里插入图片描述


☝上述分享来源个人总结,如果分享对您有帮忙,希望您积极转载;如果您有不同的见解,希望您积极留言,让我们一起探讨,您的鼓励将是我前进道路上一份助力,非常感谢!我会不定时更新相关技术动态,同时我也会不断完善自己,提升技术,希望与君同成长同进步!

☞本人博客:https://coding0110lin.blog.csdn.net/  欢迎转载,一起技术交流吧!

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值