MySQL查询操作(2)

5 统计查询

5.1 单字段分组统计

eg1: 查询每个部门的人数

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_字段

eg2: 查询每个部门的部门名称,部门人数,平均工资

如下若使用左连接,我们可以看到结果中少了一个部门,因此正确的做法是使用右连接。

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_MYSQL统计 各部门人数 树形_02

通过右连接解决eg2的问题,并将无人的部门平均工资null设为0输出:

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_MySQL查询操作_03

5.2 多字段分组统计

eg: 查询每个部门的部门编号,部门名称,部门人数、平均工资

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_MYSQL统计 各部门人数 树形_04

注:上述语法在MySQL中正确,但在Oracle中语法不正确,在Oracle中必须最后再加一个d.deptNo。由此可见,GROUP BY和ORDER BY后面是可以加多个字段的。

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_字段_05

5.3 HAVING

HAVING一般和GROUP BY一起使用,用于完成分组之后的二次筛选工作。

eg1: 查询所有工资大于2000元的职位名称,平均工资,员工人数

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_字段_06


eg2: 求出部门人数大于5人的部门,要求显示部门名称,部门编号,部门人数

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_MYSQL统计 各部门人数 树形_07

6 子查询

子查询是在指一个完整的查询语句中,嵌套若干个不同功能的小查询,从而完成一个复杂的查询。

6.1 子查询返回单行单列数据

eg: 查询基本工资比Allen低的员工信息

想要完成这个查询,首先需要查询出Allen的工资,然后将它当做一个条件再去查询。

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_数据_08

6.2 子查询返回单行多列数据

eg: 查询与员工7566从事同一工作且领导相同的全部员工信息

想要完成这个查询,首先需要查询出员工7566从事的工作以及他的领导,然后将它当做一个条件再去查询。

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_MYSQL统计 各部门人数 树形_09

6.3 子查询返回多行多列数据

eg: 查询与员工7566,7369从事同一工作且领导相同的全部员工信息

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_数据_10

6.4 在FROM语句中使用子查询

如果子查询返回的数据都是多行多列,则可以将其当做一张数据表,并且这种子查询一般出现在FROM语句中。

eg: 查询每个部门的部门编号,部门名称,部门人数,平均工资

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_子查询_11

6.5 在WHERE语句中使用子查询

如果返回的数据是单行单列,也可以在WHERE语句中使用子查询。

eg: 查询部门名称为accounting的所有员工信息

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_字段_12

6.6 在SELECT语句中使用子查询

注:此方式的效率极低。

eg: 查询每个员工的部门名称

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_字段_13

7 分页

在使用查询语句时,通常要返回前几条或中间某几行数据,这时可以利用LIMIT来完成。LIMIT语句可以被用于强制SELECT语句返回指定的记录数。
LIMIT接受一个或两个数字参数,参数必须是整数常量。如果给定两个参数,第一个参数是指定第一个返回记录行的偏移量(从0开始),第二个参数是指定返回记录行的最大数目。

语法如下:

SELECT 字段 FROM 表 LIMIT 偏移量,数量

SELECT 字段 FROM 表 LIMIT 偏移量,数量

eg1: 查询emp表的前3条数据

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_子查询_14

eg2: 在emp表中从第3行开始查询5条数据

MYSQL统计 各部门人数 树形 mysql查询每个部门的人数_字段_15

8 练习题

针对MySQL查询操作有相应的60道经典练习题。