查(select)
单表查询
基本语法
select [distinct] * | {column1,column2,column3...}
from table_name;
表
student表
emp表
empno为员工号、ename为员工名、job为工作、mgr为直属领导编号、hiredate为入职时间、sal为薪水、comm为补贴、deptno为部门号
代码样例
-- 查询所有学生信息
SELECT * FROM student;
-- 查询所有学生姓名和英语成绩
SELECT `name`,`english` FROM student;
-- 统计总分别名score
SELECT `name` ,(chinese+english+math) AS score FROM student;
select注意事项
- select指定查询那些列的数据。
- column指定列名。
- *代表查询所有列。
- from指定查询哪些表。
- distinct可选,指显示结果时,是否去掉重复数据。
where子句
比较运算符
- 大于等于小于不等于
- between...and->显示在某一区间的值
- in(set)->显示在某一区间的值,例如in(100,200)
- 通配符:like
张%(0-多)
`/not like ''【%代表多个字符,_代表单个字符】- is null ->判断是否为空
逻辑运算符
- and->判断条件同时成立
- or—> 多个条件任一成立
- not—> 不成立,例如:where not(salary>100)
SELECT * FROM student
WHERE `name` = '赵云';
-- 查询总分大于200并且数学小于语文,姓韩的同学
SELECT * FROM student
WHERE (chinese+english+math) > 200 AND
math < chinese AND
`name` LIKE '赵%';
-- english 在80-90之间
SELECT * FROM student
WHERE english BETWEEN 80 AND 90;
排序order by子句
升序:asc 降序:desc
-- 数学成绩升序
SELECT * FROM student
ORDER BY math;
-- 总分降序
SELECT `name`,(chinese+math+english) AS score FROM student
ORDER BY score DESC;
-- 李姓成绩排序
SELECT * FROM student
WHERE `name` LIKE '张%'
ORDER BY math;
-- 先部门号排序,后工资降序
SELECT * FROM emp
ORDER BY deptno ,sal DESC;
合计/统计函数-count
细节:count(*)查询满足条件的记录的行数;count(列)统计满足条件的列,但是会排除null。
-- 统计所以总分大于250
SELECT COUNT(*) AS s FROM student
WHERE (math+chinese+english)>250;
求和sum
-- 语文平均分
SELECT SUM(chinese)/COUNT(*) FROM student;
平均值avg
SELECT AVG(math+chinese+english) FROM student;
最大值最小值max和min
select max(math) from student;
分组group by
-- 每种岗位的雇员总数、平均工资
SELECT AVG(sal),COUNT(*),job
FROM emp
GROUP BY job;
-- 显示雇员总数以及获得补助的雇员总数
SELECT COUNT(*),COUNT(comm=300)
FROM emp;
-- 显示管理人数(去重)
SELECT COUNT(DISTINCT mgr)
FROM emp;
过滤having
-- GROUP by用于对查询的结果分组统计
-- 如何显示每个部门的平均工资和最高工资
SELECT AVG(sal), MAX(sal) , deptno
FROM emp GROUP BY deptno;
-- 使用数学方法,对小数点进行处理
SELECT FORMAT(AVG(sal),2), MAX(sal) , deptno
FROM emp GROUP BY deptno;
-- 显示每个部门的每种岗位的平均工资和最低工资
SELECT AVG(sal), MIN(sal) , deptno, job
FROM emp GROUP BY deptno, job;
-- ?显示平均工资低于2000的部门号和它的平均工资 // 别名
SELECT AVG(sal), deptno
FROM emp GROUP BY deptno
HAVING AVG(sal) < 2000;
分页查询limit
基本语法:select ...limit start,rows
此处的start类似于数组的下标记发
,即0代表第一行,1代表第二行......
rows 代表所取的行的数量
,1代表取一行,5代表取五行......
(表示从start+1行开始取取出rows行
,start从0计算)
SELECT *FROM emp
ORDER BY empno
LIMIT 0,3 --查询前三行