时间:2021-07-01 10:21:17 帮助过:7人阅读
查看所有数据
select * from stu
查看 英语成绩
select english from stu;
查看所有?人的数学成绩 并去除项姓名相同的数据
select distinct name,math from stu;
统计每个人的总分
select name,math+english as 总分 from stu;
为每个为的英语加10分显示
select name,english+10 from stu;
需要 在字段的数据前加上字段名:
name:赵云 english:90 math:30
select concat("name:",name,"english:",english,"math:",math) from stu;
需求 如果 总分?小于150 在名字后?面加上shit ?大于等于 加上nice
mysql> select( -> case -> when english+math>120 then -> concat(name,"nice") -> when english+math<120 then -> concat(name,"shit") -> end), -> english,math from stu;
1.查询英语分数在 80-100之间的同学。
select * from stu where english between 80 and 100;
2.查询数学分数为89,90,91的同学
select * from stu where english in (80,90,91);
3.查询所有姓李的学?生成绩。
select * from stu where name like "李%";
4.查询所有姓名带有李的学?生成绩
select * from stu where name like "%李%";
5.查询数学分>80并且英语分>80的同学
select * from stu where math>80 and english >80;
查询数学分<60并且英语分<60的同学。
select * from stu where math<60 and english <60;
where语句句条件在没有索引的情况下 是挨个遍历判断 效率?非常低
如果有索引 则可以忽略略掉?大多数?无?用数据
把一个整体 分割为多个部分
在数据库中分组为了统计
分组后 组里的详细记录就被隐藏起来了 不能直接查看 dept 一分组 变成三条记录 每个组中却包含多条记录 没办法显示。
一定要显示的话 可以使用group_concat(字段名) 可以将多个值拼接成一个字符串。
1.只有出现在group by 后面的字段 才可以被显示 其他都被影藏了
2.聚合函数不能写在where的后面 where最先执行 它的作用硬盘读取数据并过滤 以为数据还没有读取完 此时不能进行统计。
重复性高的字段
5.7不显示 因为5.7中 sql_mode中自带 ONLY_FULL_GROUP_BY
group by 后面可以有多个分组与依据 会按照顺序执行
create table emp (id int,name char(10),sex char,dept char(10),job char(10),salary double); insert into emp values (1,"刘备","男","市场","总监",5800), (2,"张飞","男","市场","员工",3000), (3,"关羽","男","市场","员工",4000), (4,"孙权","男","行政","总监",6000), (5,"周瑜","男","行政","员工",5000), (6,"小乔","女","行政","员工",4000), (7,"曹操","男","财务","总监",10000), (8,"司马懿","男","财务","员工",6000);
1.将数据按照部?门分组
select dept from emp group by dept;
何为聚合函数?
将多个数据进行计算 并得到?一个结果 称为聚合
有哪些集合函数?
sum
count
avg
max/min
简单测试
2.查询每个部门有几个人
select dept ,count(*) from emp group by dept;
3.计算每个部门的平均?工资
select dept,avg(salary) from emp group by dept;
4.计算每个岗位的平均?工资
select job,avg(salary) from emp group by job;
5.计算每个部?门每个岗位的平均?工资
select dept,job,avg(salary) from emp group by dept,job;
6.查询平均?工资?大于5000的部?门
select dept,avg(salary) from emp group by dept having avg(salary)>5000;
asc 表示升序 是默认的
desc 表示降序
by 后面可以有多个排序依据
limit a,b
limit 1,5
从1开始 到5结束 错误
从1开始 不包含1 取5条
分页查询
每页显示3条 共有10条数据
if 10 % 3 == 0:
10 / 3
else:
10/3 +1
总页数4
第一页
select *from emp limit(0,3)
第二页
select *from emp limit(3,3)
第二页
select *from emp limit(6,3)
起始位置的算法
页数 - 1 * 条数
1 - 1 = 0 * 3 = 0
2 - 1 = 1 * 3 = 3
查看前三?人
select * from emp limit 0,3;
查看工资最高的那个人信息
select * from emp order by salary desc limit 0,1;
查看id为3-6的?人
select * from emp limit 3,3;
三 正则表达式匹配
正则表达式?用于模糊查询,模糊查询已
经讲过了了
like 仅?支持 % 和 _ 远没有正则表达式灵
活
当然绝?大多数情况下 like足够使用
select * from 表名 where 字段名 regexp "正则表达式”;
mysql记录的增删改和单表查询
标签:分页 rom 员工 包含 拼接 注意 个数 set select