Mysql之增强查询

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

增强查询主要是对之前一些指令的补充

查询增强

主要针对单表查询的增强操作也是上面一些细节的补充
在这里插入图片描述
在这里插入图片描述

-- 使用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
03就是从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筛选条件

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql