day05多表查询01

多表查询前面讲过的基本查询都是对一张表进行查询,但在实际的开发中远远不够 。
下面使用表emp,dept , salgrade进行多表查询
emp:

day05多表查询01

文章插图
dept:
day05多表查询01

文章插图
salgrade:
day05多表查询01

文章插图
1.前置-mysql表查询-加强1.1查询增强
  • 使用where子句
    如何查找1992.1.1后入职的员工
在mysql中,日期类型可以直接比较,需要注意格式
  • 如何使用like操作符
    %表示0到多个任意字符_表示单个任意字符
    如何显示首字符为S的员工姓名和工资
    如何显示第三个字符为大写O的所有员工的姓名和工资
  • 如何显示没有上级的雇员的情况
  • 查询表结构
  • 使用order by子句
    如何按照工资的从低到高的顺序,显示雇员的信息
    按照部门号升序而雇员的工资降序排列,显示雇员的信息
练习
SELECT * FROM emp;SELECT * FROM dept;SELECT * FROM salgrade;-- - 使用where子句-- 在mysql中,日期类型可以直接比较--如何查找1992.1.1后入职的员工 SELECT * FROM emp WHERE hiredate > '1992-01-01';
day05多表查询01

文章插图
-- - 如何使用like操作符--%表示0到多个字符_表示单个字符--如何显示首字符为S的员工姓名和工资 SELECT ename,sal FROM emp WHERE ename LIKE 'S%';--如何显示第三个字符为大写O的所有员工的姓名和工资 SELECT ename,sal FROM emp WHERE ename LIKE '__O%';
day05多表查询01

文章插图

day05多表查询01

文章插图
-- - 如何显示没有上级的雇员的情况 SELECT * FROM emp WHERE mgr IS NULL;-- - 查询表结构DESC emp;
day05多表查询01

文章插图
day05多表查询01

文章插图
-- 使用order by子句-- 如何按照工资的从低到高的顺序,显示雇员的信息 SELECT * FROM emp ORDER BY sal ASC;-- 按照部门号升序而雇员的工资降序排列 , 显示雇员的信息 SELECT * FROM emp ORDER BY deptno ASC,sal DESC;
day05多表查询01

文章插图
day05多表查询01

文章插图
1.2分页查询
  1. 按照雇员的id号升序取出,每页显示3条记录,请分别显示第一页,第二页,第三页
  2. 基本语法
    select ... limit start,rows表示从start+1行开始取 , 取出rows行 , start从0开始计算
练习
-- 按照雇员的id号升序取出 , 每页显示3条记录 , 请分别显示第一页,第二页,第三页SELECT * FROM emp ORDER BY empno LIMIT 0,3SELECT * FROM emp ORDER BY empno LIMIT 3,3SELECT * FROM emp ORDER BY empno LIMIT 6,3公式:
SELECT * FROM emp ORDER BY empno LIMIT 每页显示记录数*(第几页-1),每页显示记录数1.3分组函数和分组子句加强
  • 使用分组函数和分组子句group by
  1. 显示每种岗位的雇员总数,平均工资
  2. 显示雇员总数以及获得补助的雇员数
  3. 显示管理者的总人数
  4. 显示雇员工资的最大差额
# 使用分组函数和分组子句groupby-- 1. 显示每种岗位的雇员总数,平均工资SELECT COUNT(*),AVG(sal),job FROM emp GROUP BY job;-- 2. 显示雇员总数以及获得补助的雇员数-- 思路:COUNT(列)如果该列的值为空,是不会统计进去的SELECT COUNT(*),COUNT(comm) FROM emp -- 扩展:统计没有获得补助的雇员数SELECT COUNT(*),COUNT(IF(comm IS NULL,1,NULL)) FROM emp-- 或者SELECT COUNT(*),COUNT(*)-COUNT(comm) FROM emp-- 3. 显示管理者的总人数SELECT COUNT(DISTINCT mgr) FROM emp;-- 4. 显示雇员工资的最大差额SELECT MAX(sal)-MIN(sal) FROM emp;
  • 数据分组的总结
如果select语句同时包含有group by,having,limit,order by子句,
那么他们的顺序应该为 group by,having , order by,limit
应用案例
请统计每个部门的平均工资,并且是大于1000的,并且按照平均工资从高到低排序,取出前两行记录

推荐阅读