基础查询:
// 查询整张表
SELECT * FROM emp;
// 列与列做运算
SELECT (sal+job) AS 总数 FROM emp; // 当可以转换为数字类型的数据与不能转换为数字的数据做运算的时候,job列的数据当0来计算;
SELECT sal+job AS 总数 FROM emp; // 任何数据与null运算,最终都得到null
SELECT sal+100 AS 总数 FROM emp;
SELECT sal*IFNULL(job,0) AS 总数 FROM emp;// 当job中有数据为null时,将null变为0再运算
SELECT IFNULL(job,总经理) AS 职位 FROM emp; // 当job
// 去除重复行
SELECT DISTINCT job FROM emp; // 使用distinct关键字去除重复的数据
// 数据之间连接
SELECT CONCAT('我的名字是:',ename,' 我的工作是:',job) AS 介绍 FROM emp;
// 我的名字是:甘宁 我的工作是:文员 -->列名为: 介绍
// AS给列起别名 ,AS可以省略
条件查询:WERER
// 查询工资大于20000的员工
SELECT * FROM emp WHERE sal>20000;
// 查询员工不为NULL的员工
SELECT * FROM emp WHERE sal is not null;
// 查询员工为NULL的员工
SELECT ename,comm FROM emp WHERE comm IS NULL;
// 查询所有20部门的员工
SELECT * FROM emp WHERE deptno=20;
// 查询所有员工工资在20000到30000之间的员工
SELECT ename,sal FROM emp WHERE sal BETWEEN 20000 AND 30000;
SELECT ename,sal FROM emp WHERE sal>=20000 AND sal<=30000;
// 查询所有的经理和分析师
SELECT ename,job FROM emp WHERE job IN('经理','分析师');
模糊查询:LIKE 下划线 _ :表示匹配一个字符 百分号%:表示匹配任意0到n个字符
// 查询所有姓张的员工
SELECT * FROM emp WHERE ename LIKE '张_'; // 这里表示只有2个字符,意思就是说不能匹配 例如:张无忌因为它是3个字
// 查询所有员工中有3个字的员工
SELECT * FROM emp WHERE ename LIKE '___';
// 查询所有员工中以 笑 字结尾的员工
SELECT * FROM emp WHERE ename LIKE '%笑';
// 查询所有员工中有 张 字的员工
SELECT * FROM emp WHERE ename LIKE '%张%';
排序:ORDER BY ... DESC / ORDER BY ... ASC
// 以员工的工资升序排序 (默认为升序)
SELECT * FROM emp ORDER BY sal ASC;
SELECT * FROM emp ORDER BY sal;
// 以员工工资的降序排序
SELECT * FROM emp ORDER BY sal DESC;
// 查询工资在20000到30000之间员工, 且工资按升序排序
SELECT * FROM emp WHERE sal BETWEEN 20000 AND 30000 ORDER BY sal ASC;
// 查询员工按升序排序,当员工的工资相同的时候,按奖金的降序排序
SELECT * FROM emp ORDER BY sal ASC,comm DESC; // 这里的ASC是可以省略的:最好写全
聚合函数:COUNT(*) / MAX(sal) / MIN(sal) / SUM(sal) / AVG(sal)
// 查询公司一共有多少人
SELECT COUNT(*) AS 总人数 FROM emp; // 查询所有列不为NULL的行数
注意:
SELECT COUNT(1) FROM emp;// 这里面写任意数字都和*没有区别,容易被面试问到
// 查询公司最高工资是多少
SELECT MAX(sal) AS 最高工资 FROM emp;
// 查询公司最低工资是多少
SELECT MIN(sal) AS 最低工资 FROM emp;
// 查询公司的工资和
SELECT SUM(sal) AS 工资和 FROM emp;// SUM会自动把不能转换为数字 和 null的数据转换为0
// 查询员工的平均工资
SELECT AVG(sal) AS 平均工资 FROM emp;
// 查询公司的员工人数 、最高工资、最低工资、平均工资、工资和
SELECT COUNT(-1) 员工人数,MAX(sal) 最高工资,MIN(sal) 最低工资,AVG(sal) 平均工资 FROM emp;
分组查询:GROUP BY
// 按照员工的职位分组
SELECT * FROM emp GROUP BY job;
// 查询每一种职位有多少个员工
SELECT job,count(-1) FROM emp GROUP BY job;
// 查询每一种职位的平均工资
SELECT job,AVG(sal) FROM emp GROUP BY job;
// 查询每一种职位中最大的工资
SELECT job,MAX(sal) FROM emp GROUP BY job;
// 查询每一种职位有多少员工,该职位的最高工资是多少 ?
(是谁,如果有多个人是相同的最高工资,会选择第一个:但是最好不要这么用,除非保证工资唯一)
SELECT job,COUNT(1) 总人数,MAX(sal) 最大工资 FROM emp GROUP BY job;
--> 分组查询, 除了第一个是要查询的列,后面其他的都应该是聚合函数,不然不严谨
// 查询所有工资高于15000的,每个部门的人数
SELECT deptno,COUNT(1) FROM emp WHERE sal>15000 GROUP BY deptno;
组条件查询:HAVING
// 查询每个部门工资大于15000的人数,其中大于2个人的部门
SELECT deptno,COUNT(1) FROM emp WHERE sal>15000 GROUP BY deptno HAVING COUNT(1)>=2;
--> 查询每个部门工资大于15000的人是分组查询前, 大于2个人的部门是分组查询后的条件
// 上面的条件再按照人数的多少升序, 再按部门编号升序排序
SELECT deptno,COUNT(1) FROM emp WHERE sal>15000 GROUP BY deptno HAVING COUNT(1)>=2 ORDER BY COUNT(1) ASC,deptno ASC;
查询顺序:
SELECT * FROM
WHERE
LIKE
GROUP BY
HAVING
ORDER BY
MYSQL的limit方言:
分页查询
// 从第1行开始查,每页显示5行数据
SELECT * FROM emp LIMIT 0,5;
// 从第9行开始查数据 每页显示6行数据
SELECT * FROM emp LIMIT 8,6;
select * from emp limit 从多少行-1,每页显示多少条数据
如果最后一行没有6条记录,那么有多少条数据,就显示多少条数据
分页公式:
select * from emp limit (当前页-1)*每页记录数,每页记录数