430 聚合 分页 排序 分组查询 筛选

聚合查询:函数sum()求和 、avg() 平均数、max()最大值、min()最小值、count()记录数

格式select  聚合函数 (字段) from 表名; 注:聚合不能与其他字段一起用

SELECT COUNT(*) FROM score;  COUNT(*) 取每一列的取最大值

NULL 不包括在内 所有显示5条

注:用count 统计 不包含 null数据,要使用不包含null的字段 不然不准

查询列起别名

select count(*) AS 起的名 from 表名;

分页查询

公式:select * from 表名 limit (当前页-1)*每页显示的条数

查询排序(order by)

语法:select * from 表名 order by 字段 asc/desc;

asc:正序  数值:递增 0~9 字母:自然a~z (默认)

desc:倒序 9~0 z~a  数值 字母 反之

:按jsp>60 倒序

select * from 表名 字段  order by 字段 desc;

:按jsp正序,HTML倒序

select * from 表名 order by jsp asc,html desc ;

注意:

1排序以第一个为主 2 只有第一个字段排序有相同时, html倒序才会有作用 

 分组查询 (group by) 分组查询一般搭配聚合函数使用

公式:select 字段 from 表名 group by 字段

例:查询男女的人数  男3  女2

男女生jsp总成绩

select ssex,sum(jsp) from score group by ssex;  当条件里含有  每个时 先分组

分组查询后筛选

例:查询总人数大于2的性别

1.查询男女人数 2.筛选人数大于2的记录(having)注:分组前有where 分组后用having

条件多 一步一步来查询

课堂随笔
--
查询所有列 SELECT * FROM student; /*创建表*/ CREATE TABLE student( sid INT, sname VARCHAR(10), ssex CHAR(2) ); /*插入数据*/ INSERT INTO student VALUES(1,'袁一鸣',''); /*给定字段插入数据*/ INSERT INTO student(sid,sname) VALUES(2,'小明'); /*查询表中所有数据*/ SELECT * FROM student; /*修改数据(一定要带条件)*/ UPDATE student SET sname='小红'WHERE sid=2; /*删除全表数据*/ DELETE FROM student; TRUNCATE student; /*删除某条数据*/ DELETE FROM student WHERE sid=2; /*创建名为emp的员工表*/ CREATE TABLE emp( sid INT, sname VARCHAR(20), gender VARCHAR(2), birthday DATETIME, email VARCHAR(10), remark VARBINARY(50) ); /*修改练习*/ /*add是添加*/ ALTER TABLE emp ADD age VARCHAR(30) /*MODIFY COLUMN是修改字段类型*/ ALTER TABLE emp MODIFY COLUMN email VARCHAR(50) /*DROP COLUMN是删除列的*/ ALTER TABLE emp DROP COLUMN remark; /*修改字段名称*/ ALTER TABLE emp CHANGE COLUMN sname usemame VARCHAR(20); -- 新建score表 CREATE TABLE score( sid INT, sname VARCHAR(10), jsp INT, html INT, js INT ); -- 给score表添加数据 INSERT INTO score VALUES(1,'钢铁侠',12,66,100); INSERT INTO score VALUES(2,'浩克',66,88,11); INSERT INTO score VALUES(3,'美国队长',0,70,80); INSERT INTO score VALUES(4,'小辣椒',100,50,60); INSERT INTO score VALUES(5,'灭吧',66,70,93); -- 聚合函数sum()求和 avg()平均数 max()最大值 min()最小值 count()记录数 SELECT * FROM score /*求全班jsp的总成绩 SUM()求和*/ SELECT SUM(jsp) FROM score;/*聚合函数不能跟其他字段一起用*/ /*求全班的html这么课的平均成绩*/ SELECT AVG(html) FROM score; /*求全班同学js这门课的最高分*/ SELECT MAX(js) FROM score; /*求html这么课的最低分*/ SELECT MIN(html) FROM score; /*求本班一共有多少位同学*/ SELECT COUNT(*) FROM score; -- 用count时 不能包含null的字段 不然不准 -- 查询字段起名 字段名 AS 起的名 FROM 表名 SELECT COUNT(*) AS 统计数据 FROM score; -- 添加数据 INSERT INTO student VALUES(2,'雄大',''); INSERT INTO student VALUES(3,'雄二',''); INSERT INTO student VALUES(4,'光头强',''); INSERT INTO student VALUES(5,'黑寡妇',''); INSERT INTO student VALUES(6,'黑灭霸',''); INSERT INTO student VALUES(7,'',NULL); /*分页查询 limit起始索引,每页显示多少条*/ SELECT * FROM student LIMIT 0,2;/*第一页*/ SELECT * FROM student LIMIT 2,2;/*第二页*/ SELECT * FROM student LIMIT 4,2;/*第三页*/ SELECT * FROM student LIMIT 6,2;/*第四页*/ -- 分页公式 SELECT * FROM student LIMIT (当前页-1)*每页的显示的条数; SELECT * FROM score; /*查询排序 按照jsp>60 的倒序*/ SELECT * FROM score WHERE jsp>60 ORDER BY jsp DESC; /*按照jsp的正序,html倒序*/ SELECT * FROM score ORDER BY jsp ASC,html DESC; /*分组查询(一般与聚合函数搭配)*/ SELECT ssex,COUNT(*) FROM student GROUP BY ssex; /*男女生的jsp总成绩*/ SELECT ssex,SUM(jsp) FROM score GROUP BY ssex; /*查询总人数大于2的性别*/ SELECT ssex FROM student GROUP BY ssex HAVING COUNT(*)>2;
MySQL小测验
 
二、练习
1. 查询出部门编号为30的所有员工
select * from 表名 where deptno=30;
2. 所有销售员的姓名、编号和部门编号。
select ename,empno,deptno from 表名 where job=’销售员;’
3. 找出奖金高于工资的员工。
select ename from 表名 where comm>sal;
4. 找出奖金高于工资的60%的员工。
select ename from 表名 where comm>sal*0.6;
5. 找出部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料。
select * from 表名 where (deptno=10 and job=’经理’)
6. 找出部门编号为10中所有经理,部门编号为20中所有销售员,还有即不是经理又不是销售员但其工资大或等于20000的所有员工详细资料。
select * from 表名 where (deptno=10 and job=’经理’)
or (deptno=20 and job=’销售员’)or(job<>’经理’ and job<>’销售员 and sal>=20000’;)
7. 无奖金或奖金低于1000的员工。
select ename from 表名 where comm is null or comm=’’ orcomm<1000;
8. 查询名字由三个字组成的员工。
select ename from 表名 where    ename like ‘___’;
9.查询2000年入职的员工。
select ename from 表名 where year(hiredate)=2000;
select ename from 表名 where hiredate like2000%’;
10. 查询所有员工详细信息,用编号升序排序
select * from 表名 order by empno asc;
11. 查询所有员工详细信息,用工资降序排序,如果工资相同使用入职日期升序排序
select * from 表名 order by sal desc ,hiredate asc;
12.    查询姓周的两个名字的员工。
select ename from 表名 where ename like ‘周_’;
13.    查询所有姓张的员工。
select ename from 表名 where ename like ‘张%’;
14.    查询该公司有多少个岗位,每个岗位有多少人。
select job,count(*) from 表名 group by job;
15.查询哪个岗位中人数大于3。
select  job,count(*) from 表名 group by job having count(*)>3;
原文地址:https://www.cnblogs.com/zs0322/p/10794458.html