一、MySQL表查询-加强
1、使用 where 子句
2、使用 like 操作符
%:表示0到多个任意字符
_ :表示单个任意字符
3、使用 order by 子句
# 查询加强
-- 使用 where 子句
-- 如何查找 1992.1.1 后入职的员工
-- 说明: 在 mysql 中,日期类型可以直接比较, 需要注意格式
SELECT * FROM emp
WHERE hiredate > '1992-01-01';
-- 如何使用 like 操作符(模糊)
-- %: 表示 0 到多个任意字符
-- _: 表示单个任意字符
-- 如何显示首字符为 S的员工姓名和工资
SELECT ename, sal FROM emp
WHERE ename LIKE 'S%';
-- 如何显示第三个字符为大写 O 的所有员工的姓名和工资
SELECT ename, sal FROM emp
WHERE ename LIKE '__O%';
-- 如何显示没有上级的雇员的情况
SELECT * FROM emp
WHERE mgr IS NULL;
-- 查询表结构
DESC emp;
-- 使用 order by 子句
-- 如何按照工资的从低到高的顺序[升序],显示雇员的信息
SELECT * FROM emp
ORDER BY sal;
-- 按照部门号升序而雇员的工资降序排列 , 显示雇员信息
SELECT * FROM emp
ORDER BY deptno ASC, sal DESC;
分页查询
基本语法:SELECT ..... LIMIT START,ROWS
表示从 start+1 行开始取,取出 rows 行,start 是从0开始计算
推导一个公式
SELECT * FROM 表名
ORDER BY 列名
LIMIT 每页显示记录数 * (第几页 - 1 ),每页显示记录数
# 分页查询
-- 按雇员的 id 号升序取出, 每页显示 3 条记录,请分别显示 第 1 页,第 2 页,第 3 页
-- 第一页
SELECT * FROM emp
ORDER BY empno
LIMIT 0, 3;
-- 第二页
SELECT * FROM emp
ORDER BY empno
LIMIT 3, 3;
-- 第三页
SELECT * FROM emp
ORDER BY empno
LIMIT 6, 3;
-- 推导一个公式
SELECT * FROM emp
ORDER BY empno
LIMIT 每页显示记录数 * (第几页-1) , 每页显示记录数
# 按雇员的 empno 号降序取出,每页显示5条记录,请分别显示第三页,第五页对应的sql语句
-- 第三页
SELECT * FROM emp
ORDER BY empno DESC
LIMIT 10, 5;
-- 第五页
SELECT * FROM emp
ORDER BY empno DESC
LIMIT 20, 5;
使用分组函数和分组子句 group by
# 增强 group by 的使用
-- (1) 显示每种岗位的雇员总数、平均工资。
SELECT COUNT(*), job, AVG(sal) FROM emp
GROUP BY job;
-- (2) 显示雇员总数,以及获得补助的雇员数。
-- 思路: 获得补助的雇员数 就是 comm 列为非 null, 就是 count(列),如果该列的值为 null, 是
-- 不会统计 , SQL 非常灵活,需要我们动脑筋
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) 显示雇员工资的最大差额。
-- 思路: max(sal) - min(sal)
SELECT MAX(sal) - MIN(sal) FROM emp;
数据分组的总结
如果select语句同