【sql语句基础】——查(select)(单表查询)
查(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 --查询前三行