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/  欢迎转载,一起技术交流吧!

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

  1. select的5中子句where,group by, havaing, order by, limit的使用顺序及实例

    -- 语法: SELECT select_list FROM table_name [ WHERE search_condition ] [ GROUP BY group_by_expression ...

  2. mysql数据库select语句用法_mysql学习笔记之完整的select语句用法实例详解

    本文实例讲述了mysql学习笔记之完整的select语句用法.分享给大家供大家参考,具体如下: 本文内容: 完整语法 去重选项 字段别名 数据源 where group by having order ...

  3. mysql数据库中查询第几条到第几条数据_在 mysql 数据库中,从查询结果的第四条记录开始选取5条记录,下面 sql 语句正确的是( )...

    [单选题]同一种货物,在同一线路上或平行线路上作相对方向的运送,而与对方运程的全部或一部分发生重迭交错的运输被称为( ). [多选题]水闸一般由()三部分组成 [单选题]在一个常规的统计表内,非必需包 ...

  4. mysql数据库 SELECT COUNT(1) FROM new_comps WHERE deleted = 0 统计数据太慢了二十多秒

    @TOC使用mybatis-puls分页查询数据量大很慢,怎么处理 mysql数据库 SELECT COUNT(1) FROM new_comps WHERE deleted = 0 统计数据太慢了二 ...

  5. MySQL数据库select查询命令大全

    MySQL数据库select查询命令大全 --数据库操作前的准备 -- 创建数据库 -- create database python_test_1 charset=utf8; -- 使用数据库 -- ...

  6. Mysql 设计超市经营管理系统,包括员工信息表(employee)和 员工部门表(department)

    互联网技术学院周测机试题(二) 一.需求分析 为进一步完善连锁超市经营管理,提高管理效率,减少管理成本,决定开发一套商品管理系统,用于日常的管理.本系统分为商品管理.员工管理.店铺管理,库存管理等功能 ...

  7. MySQL数据库select语句的使用方法

    select语句可 以用回车分隔 $sql="select * from article where id=1"和 $sql="select * from article ...

  8. mysql数据库select语句用法_mysql数据库select查询语句简单用法

    mysql select简单用法 1.select语句可以用回车分隔$sql="select * from article where id=1"和$sql="selec ...

  9. MySQL数据库性能优化史诗级大总结

    点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据真好玩 点击右侧关注,大数据真好 ...

最新文章

  1. UltraEdit 21激活
  2. rocketmq 重复消费_RocketMQ的十二个特性,你都知道吗「下」
  3. ffmpeg文件拼接
  4. mysql 视图 字符集_MySQL创建子视图并查看的时候,字符集报错问题
  5. 解决查询时报的cannot be cast to com.credithc.enjoy.manager.OrderResp错误
  6. jpa 测试_使用外星人进行测试:如何使用Arquillian测试JPA类型转换器
  7. 使用PostgREST的RestAPI操作之 类型转JSON对象 | 嵌入视图
  8. 自动改变文字大小和颜色的javascript效果
  9. 编译器后端,寄存器分配算法
  10. a new weekday
  11. bzoj 2431: [HAOI2009]逆序对数列
  12. 【小松教你手游开发】【游戏渲染】单色shader,纹理shader
  13. 数据包接收系列 — 上半部实现(网卡驱动)
  14. chage 修改用户密码的有效期限
  15. HFSS19 官方中文教程系列 L04
  16. ssm教师教学评价系统(ssm教学评价系统教师ssm学生评教系统)JSP网上评教系统jsp评教系统
  17. Guri团队的侧信道攻击研究
  18. Weblogic安装时闪退问题
  19. PackageManager的参数及使用
  20. 谈业务流程全生命周期管理支撑业务流程再造(2)

热门文章

  1. php捉迷藏,查看“蘑菇捉迷藏!”的源代码
  2. Win7 64b的VS2015 如何使用nmake成功编译detour express 3.0-error2202 警告被视为错误 - 没有生成“object”文件
  3. mac 重置mysql root密码_MAC 重置MySQL root 密码
  4. 2021年美容师(初级)考试总结及美容师(初级)模拟试题
  5. Rust更适合经验较少的程序员?
  6. Hash一致性算法(分片机制)
  7. 我辞职了准备系统学习新知识和技提升自己
  8. kasp技术原理_SNP检测Massarray法怎么样?中高通量大样本适用吗?
  9. 蚁群算法求最值c语言实现,蚁群算法代码(求函数最值)
  10. MyBatis入门级(增删改查)