注入:
注入单个条目:insert table 表名(对应属性) value(属性插入的内容)
注入多个条目:insert table 表名(对应属性) values(属性插入的内容1),(属性插入的内容2),...
遇到的问题:
1.如果需要修改列为非空,那么其中的内容不能为null,如果为null则会报错
2.如果修改一个列为自增,此时表内必须没有自增列,且该列必须是主键
基本查询内容:
# 查询1 select name,entrydate from tb_emp; # 查询2:查询所有返回字段 select * from tb_emp; #查询所有员工的name,entrydate,并起别名 select name as n,entrydate as e from tb_emp; #查询已有员工关联了哪几种职位 select distinct job from tb_emp;
逻辑查询
#查询1:查询姓名为李明的员工 select id from tb_emp where name = '李明'; #查询2:查询id小于等于5的员工信息 select * from tb_emp where id<=5; #查询3 没有分配职位的员工信息 select *from tb_emp where job is null; select *from tb_emp where job is not null; #查询5 密码不等于123456的员工信息 select * from tb_emp where password!='123456'; #查询6 查询入职日期在'2000-01-01(包含)'到'2010-01-01(包含)'之间的员工信息 select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01'; select * from tb_emp where entrydate >='2000-01-01' and entrydate<='2010-01-01'; #查询7查询入职日期在'2000-01-01(包含)'到'2010-01-01(包含)'之间并且性别为女的员工信息 select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01' and gender=2; select * from tb_emp where entrydate >='2000-01-01' and entrydate<='2010-01-01' and gender=2; #查询8 查询job为2,3,4的员工信息 select * from tb_emp where job in (2,3,4); select * from tb_emp where job = 2 or job =3 or job = 4; #查询姓名为两个字的员工信息 select * from tb_emp where name like '__'; #查询姓李的并且姓名为两个字的员工信息 select * from tb_emp where name like '李_'; #查询姓李的并且姓名为多个字的员工信息 select * from tb_emp where name like '李%';
聚合函数查询
#查询1:统计企业员工数量
#推荐方式,具有优化
select count(*) from tb_emp;
#常量形式
select count('1') from tb_emp;
#通过列名(属性)进行查询
select count(tb_emp.id)
from tb_emp;
#查询2统计该企业最早入职的员工
select min(entrydate)
from tb_emp;
#查询3:统计最迟入职的员工
select max(entrydate)
from tb_emp;
# 查询4:统计该员工id的平均值
select avg(id) from tb_emp;
# 查询4:统计该员工id的和
select sum(id) from tb_emp;
#分组查询
#查询1:根据性别分组,统计男性和女性的员工数量
#需要注意的是,通过分组查询返回类型包含分组字段(列名)以及聚合函数
select gender,count(*)
from tb_emp group by gender;
#查询2:查询入职建在'2024-01-01(包含)'以前的员工,
# 并根据结果对职位分组,获取员工人数>=2的职位
select job, count(*)
from tb_emp where entrydate<='2024-01-01' group by job having count(*)>=2;
上述这个sql语句的重点放在having后,having后代表的是已经分组后的逻辑情况,where为分组前的逻辑语句,分组后的语句使用having进行衔接
除此之外,where函数无法对聚合函数进行判断,而having可以
排序查询
#查询1:根据入职时间对员工进行升序排序
select *
from tb_emp order by entrydate;
#查询2:根据入职时间,对员工进行降序排序
select *
from tb_emp order by entrydate desc ;
#查询3:根据入职时间对公司的员工进行升序排序,入职时间相同再按照更新时间进行降序排序
select *
from tb_emp order by entrydate, update_time;
注意查询3,当且仅当第一个查询字段完成后并且多个标签的第一个字段内容相同时,才会执行第二个字段
分页查询
#查询1:从起始索引0开始查询员工数据,每页展示5条记录 select * from tb_emp limit 0,5; #查询2:第一页员工数据,每页展示5条记录 select * from tb_emp limit 5,5; #查询3:第二页员工数据,每页展示5条记录 select * from tb_emp limit 10,5; #查询4:第二页员工数据,每页展示5条记录 select * from tb_emp limit 15,5;
查询案例
#查询1:查询第一页数据,每页展示10条记录,查询姓张\男\2000-01-01到2025-12-31的内容 select * from tb_emp where name like '%张%' and gender = 1 and entrydate between '2000-01-01' and '2025-12-31' order by tb_emp.update_time desc limit 10;
#查询2:根据需求完成员工性别统计
#if语句的功能:if(判断条件,true时返回的内容,false时返回的内容) as 别名这里的别名对应的时表头
# select gender, count(*)
select if(gender = 1, '男性', '女性') as '性别' , count(*) as '数量'
from tb_emp
group by gender;
查询4:
#查询4:根据需求,完成员工职位信息的统计
select case job when 1 then '班主任' when 2 then '学工主管' when 3 then'讲师' when 4 then '拿来把你' end, count(*)
from tb_emp
group by job;
引入了case方法,和java类似
case 属性 when 属性值 then 结果 when 属性值 then 结果 ... else 结果 end
注意中间不要添加逗号,并且结尾有end
除此之外还需要注意:if与case都是用于判断取值的的,也就是用于显示查询结果的,只能嵌套在大逻辑里,也就是本身不能够直接应用,比如下图: