增强查询主要是对之前一些指令的补充
查询增强
主要针对单表查询的增强操作,也是上面一些细节的补充
-- 使用where语句
-- 查找1991.1.1后入职的员工
-- 主要是介绍在mysql中日期类型可以直接比较,需要注意格式
SELECT * FROM emp
WHERE hiredate > '1991-01-01'
-- 如何使用like操作符
-- %:表示0-多个任意字符,李%就是 只要开头是李就算
-- _:表示单个字符,李_就是姓李的两个字的名字
-- 显示首字母为S的员工和工资
SELECT ename,sal FROM emp
WHERE ename LIKE 'S%'
-- 显示第三个字符为大写O的所有员工的姓名和工资
SELECT ename,sal FROM emp
WHERE ename LIKE '__O%'
-- 查询表结构
DESC emp
-- orderby
-- 按照工资从低到高顺序,显示雇员
SELECT * FROM emp
ORDER BY sal
-- 先按照部门号升序,部门号同,按照工资降序
SELECT * FROM emp
ORDER BY deptno, sal DESC;
-- 这样写的话就是先按部门号升序,然后部门内部按照薪水降序
1.日期可以直接比较2.LIKE 两个标记位 第一个%代表一个或多个任意字符,第二个_只能代表一个任意字符
ORDER BY 第一关键字 升序/降序,第二关键字 升序/降序
就能先第一关键字升序/降序完后,在相同组内进行第二该关键字的升序/降序
分页查询
比如说一个表有10w行记录肯定不能一下显出来,只能一行行显喽这就用到分页查询了
就是 LIMIT 数字1,数字2
数字1代表开始位置,真正的开始位置是数字1+1
0,3就是从1位置开始取三行
数字2就是取几行
可以认为是前开后闭(数字1,数字1+数字2)
-- 分页查询
-- 按empno升序取,每页三条记录,请分别显示第一页,第二页,第三页
-- 第一页
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
# 公式的话上面有 LIMIT 每页显示记录数*(第几页-1),每页显示记录数
分组加强
group by
直接上代码演示
# 演示增强分组
-- 显示每种岗位的雇员总数,平均工资
SELECT COUNT(*),FORMAT(AVG(sal),3),job -- 保留三位小数用format
FROM emp
GROUP BY job
-- 显示雇员总数,以及获得补助的(comn为非null)雇员数
SELECT COUNT(*),COUNT(comn) -- 注意:count不会统计为null的
FROM emp
-- 统计没有获得补助的
SELECT COUNT(IF (comn IS NULL,1,NULL)) FROM emp
-- 显示管理人员总数,管理人员编号可能相同,相同不算,mgr是编号
SELECT COUNT(DISTINCT mgr) -- distinct 约束条件查找的mgr不能相同,相同不计数
FROM emp
-- 显示雇员工资最大差额
SELECT MAX(sal)-MIN(sal)
FROM emp
下面有个HAVING 可以对分组的结果进行过滤
相当于代替了WHERE
看下面演示小结的代码
小结
顺序不能颠倒,要不然会报错
注意的是
avg_sal可能是带小数点你想格式化
不能用format了,因为format函数返回类型是字符串,而having子句需要与1000整型比较大小,冲突了
所以可以使用字符串的STRCMP(AVG(sal),1000)>0作为having筛选条件