idea内置数据库DataGrip + sql语句库表操作
表数据操作,表是上一个博客里的表 tb_emp
-- dml:数据操作语言
-- dml:插入数据 - insert
-- 1.为tb_emp表的username ,name ,gender字段插入值
-- 所有用到引号的地方,用单引号双引号都可以
insert into tb_emp(username,name,gender,crate_time,update_time) value ('red','小红',1,now(),now());
-- 2.为tb_emp表的所有字段插入值
-- 时间也要放在引号里
-- 麻烦
insert into tb_emp(id, username, password, name, gender, image, job, entrydate, crate_time, update_time)
value (null,'blue','123','小蓝',2,'1.jpg',1,'2024-7-18',now(),now());
-- 简单
insert into tb_emp value (null,'blue2','123','小蓝2',2,'1.jpg',1,'2024-7-18',now(),now());
-- 3.批量为tb_emp表的username ,name ,gender字段插入值
-- 小括号括起来并用逗号分隔
insert into tb_emp(username,name,gender,crate_time,update_time) value
('yellow','小黄',1,now(),now() ),
('green','小绿',1,now(),now() ),
('purple','小紫',1,now(),now() );
-- dml:更新数据 - update
-- 1. 将tb_emp表的id为3 的员工姓名name字段更新为’小兰‘
update tb_emp set name = '张兰' , update_time = now() where id = 9;
-- 2.将tb_emp所有员工入职时间更新为’2010-01-01‘
update tb_emp set entrydate = '2010-01-01' , update_time = now();
-- dml:删除数据 - delete
-- 1.删除tb_emp表中id为1的员工
delete from tb_emp where id = 1;
-- 2.删除tb_emp表中所有员工
delete from tb_emp;
-- dql:查询数据 - select
-- id, username, password, name, gender, image, job, entrydate, crate_time, update_time
-- ----------------------基本查询----------------------
-- 1.查询指定字段 name entrydate 并返回
select name , entrydate from tb_emp;
-- 2.查询返回所有字段
-- 麻烦,推荐
select id, username, password, name, gender, image, job, entrydate, crate_time, update_time from tb_emp;
-- 简单,不推荐,性能低
select * from tb_emp;
-- 3.查询所有员工的 name entrydate 并起别名(姓名,入职时间)
-- as可以省略
-- 特殊符合需要加引号
select name as '姓 名' , entrydate 入职时间 from tb_emp;
-- 4.查询已经有的员工关联了哪几种职位(不重复)
select distinct job from tb_emp;
-- ----------------------条件查询----------------------
-- 1.查询姓名为小红的员工
select * from tb_emp where name ='小红';
-- 2.查询id大于等于9的员工信息
select * from tb_emp where id <= 9;
-- 3.没有分配职位的员工信息
select * from tb_emp where job is null ;
-- 4.查询有职位的员工信息
select * from tb_emp where job is not null ;
-- 5.查询密码不等于’123456‘的员工信息
select * from tb_emp where password != '123456';
-- 一样
select * from tb_emp where password <> '123456';
-- 6.查询入职日期在’2000-01-01(包含)‘到’2010-01-01‘之间的员工信息
select * from tb_emp where entrydate >= '2000-01-01' and entrydate <= '2010-01-01';
-- 简化写法
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01';
-- 7.查询入职日期在’2000-01-01(包含)‘到’2010-01-01‘之间,性别为女的员工信息
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-1' and gender = 2;
-- 8.查询职位是2或3或4的员工信息
select * from tb_emp where job = 2 or job = 3 or job = 4;
select * from tb_emp where job in (2 ,3,4);
-- 9.姓名为两个字的员工信息
-- _替代一个字符
select * from tb_emp where name like '__';
-- 10.查询姓张的动员工信息
-- %替代任意字符
select * from tb_emp where name like '张%';
-- ----------------------分组查询----------------------
-- 聚合函数 - null值不参与所有聚合函数的计算
-- 1.统计该企业员工数量 - count
-- a.count(字段)
select count(id) from tb_emp;
-- b.count(常量)
select count(0) from tb_emp;
-- c.count(*) - 推荐
select count(*) from tb_emp;
-- 2.统计该企业最早入职的员工 - min
select min(entrydate) from tb_emp;
-- 3.统计该企业最晚入职的员工 - max
select max(entrydate) from tb_emp;
-- 4.统计该企业员工id的平均值 - avg
select avg(id) from tb_emp;
-- 5.统计该企业员工的id之和 - sum
select sum(id) from tb_emp;
-- ----------------------分组查询
-- 1.根据性别分组,统计男性和女性员工数量 - count(*)
select gender , count(*) from tb_emp group by gender ;
-- 2.先查询入职时间在’2015-01-01‘以前的员工,并对及结果根据职位分组,获取员工数量大于等于2 的职位
-- 分组之前使用where进行筛选,分组之后使用having;聚合函数只能用having判断
-- 顺序:where-聚合-having
select job,count(*) from tb_emp where entrydate <= '2015-01-01' group by job having count(*) >= 2;
-- if(条件表达式,true取值,false取值)
select if(gender = 1,'男性员工','女性员工') as 性别, count(*) from tb_emp group by gender ;
-- case 表达式 when 值1 then 结果1 when 值2 then 结果2 ... else ... end
select
(case gender
when 1 then '班主任'
when 2 then '讲师'
when 3 then '学工主管'
when 4 then '教研主管'
else '未分配职位' end ) 职位,
count(*)
from tb_emp
group by gender ;
-- ----------------------排序查询----------------------
-- 1.根据入职时间,对员工进行升序排序 - asc (默认) 上到下:小到大
select * from tb_emp order by entrydate ; -- asc;
-- 2..根据入职时间,对员工进行降序排序 - desc 上到下:大到小
select * from tb_emp order by entrydate desc ;
-- 3.根据入职时间,对公司的员工进行升序排序,若入职时间相同再按照更新时间进行降序排序
select * from tb_emp order by entrydate , update_time desc;
-- ----------------------分页查询----------------------
-- 起始索引的计算公式:(页码 - 1) * 每页展示记录数
-- 1.从起始索引0开始查询员工数据,每页展示2条记录
select * from tb_emp limit 0,2; -- 写法1
-- 2.查询第1页员工数据,每页展示2条记录
select * from tb_emp limit 2; -- 写法2
-- 3.查询第2页员工数据,每页展示5条记录
select * from tb_emp limit 5,5;
-- 4.查询第3页员工数据,每页展示2条记录
select * from tb_emp limit 4,2;
其中并不建议再sql中进行if和case操作,会降低查询效率
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通