MySQL记录相关操作

tech2022-12-23  50

MySQL记录相关操作

一、表相关操作介绍二、插入数据insert三、更新数据update四、删除数据五、单表查询1、语法:2、重点掌握优先级:3、简单查询3.1 简单查询3.2 使用distinct避免重复(针对的是记录)3.3 进行四则运算查询3.4 使用concat()拼接记录的内容 4、where约束4.1 单条件查询4.2 多条件查询4.3 关键字between and4.4 关键字is null4.5 关键字in集合查询4.6 关键字like模糊查询4.7 正则表达式查询 5、分组查询:group by6、having过滤7、order by (查询排序)8、limit(限制查询的记录数)

一、表相关操作介绍

-插入数据 -更新数据 -删除数据 -查询数据

二、插入数据insert

语法:

1、插入完整数据(顺序插入) 语法一: insert into 表名(字段1,字段2,字段3…字段n) values(1,2,3…值n); 语法二: insert into 表名 values(1,2,3…值n); 2、指定字段插入数据 语法: insert into 表名(字段1,字段2,字段3) values(1,2,3); 3、插入多条数据 insert into 表名 values (1,2,3…值n), (1,2,3…值n), (1,2,3…值n); 4、插入查询结果 insert into 表名(字段1,字段2,字段3…字段n) select (字段1,字段2,字段3…字段n) from2; where ...;

三、更新数据update

语法:

update 表名 set 字段1=1, 字段2=2, where 条件;

示例:

update mysql.user set password=password('123') where user='root' and host='localhost';

四、删除数据

语法:

delete from 表名 where 条件;

五、单表查询

1、语法:

select distinct 字段1,字段2,... from 表名 where 过滤条件 group by 分组的条件 having 筛选条件 order by 排序字段 limit n;

2、重点掌握优先级:

关键字的执行优先级: from where group by having select distinct order by limit 即: 1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组 4.将分组的结果进行having过滤 5.执行select 6.去重 7.将结果按条件排序:order by 8.限制结果的显示条数

3、简单查询

3.1 简单查询
select name,sex from emp; select name as 名字,sex 性别 from emp; select * from emp;
3.2 使用distinct避免重复(针对的是记录)
select distinct post from emp;
3.3 进行四则运算查询
select name as 名字,salary*12 as 年薪 from emp;
3.4 使用concat()拼接记录的内容
select name,concat(salary*12,'$') from emp; select name,concat("annual_salary",":",salary*12,"$") as 年薪 from emp; select name,concat_ws(":","annual_salary",salary*12,"$") as 年薪 from emp; # 结合case语句 select ( case when name='cc' then name when name='jason' then concat(name,'_handsome') else concat(name,'_sb') end ) as 名字 from emp;

4、where约束

where语句中可以使用比较运算符、between、in、like 模糊匹配、逻辑运算符等

4.1 单条件查询
select name from emp where post='HR';
4.2 多条件查询
select name,salary from emp where post='HR' and salary>10000;
4.3 关键字between and
select name,salary from emp where salary butween 10000 and 20000; select name,salary from emp where salary not butween 10000 and 20000;
4.4 关键字is null

判断某个字段是否为null不能用等号,需要用is

ps:null与空字符串不是同一个概念

select name,post_comment from employee where post_comment is null;
4.5 关键字in集合查询
select name,salary from emp where id=3 or id=5 or id=7; select name,salary from emp where id in (3,5,7); select name,salary from emp where id not in (3,5,7);
4.6 关键字like模糊查询
# 1、通配符% # %表示任意个任意字符 select * from emp where name like '陈小%'#2、通配符_ # 表示一个任意字符 select * from emp where name like "ja__";
4.7 正则表达式查询
select * from emp where name regexp '^陈'; # 查询名字以“陈”开头的 select * from emp where name regexp '明¥'; # 查询名字以“明”结尾的 select hex(name) from emp where hex(name) regexp 'e[4-9][0-9a-f]{4}';

5、分组查询:group by

1、首先,分组是发生在where执行之后,也就是说分组是基于where之后得到的记而进行的 2、分组指的是,将所有的记录按照某个相同字段进行归类,比如针对员工信息表的职位分组或者按照性别进行分组 3、为何要分组? 比如取每个部门的最高薪资,如果不按部门分组的话,取每个部门的最高薪资就无从谈起 4、大前提: 可以按照任意字段分组,但是分组以后,比如group by post,只能查看post字段, 如果想查看组内信息,需要借助于聚合函数 5、聚合函数 max() min() avg() sum() count()

示例:

select depart_id,count(id),avg(age),max(salary),min(salary),sum(salary) from emp group by depart_id;

查看每个职位上的男性的平均薪资

select post,avg(salary) from emp where sex="male" group by post;

查看每个职位的男生姓名(使用concat拼接起来)

select post,group_concat(name) from emp where sex='male' group by post;

6、having过滤

having与where不一样的地方在于:

执行优先级从高到低:where > group >having 1、where 执行在group by分组之前,所以where中可以有任意字段,但是不能使用聚合函数 2、having执行在group by分组之后,所以having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数

示例:

select max(salary) from emp where max(salary) > 10000; ERROR 1111 (HY000): Invalid use of group function # 报错,不能使用聚合函数 select max(salary) from emp having max(salary) > 10000; +-------------+ | max(salary) | +-------------+ | 1000000.31 | +-------------+ 1 row in set (0.00 sec) select post,avg(salary) from emp where sex='male' group by post having avg(salary) > 8000;

7、order by (查询排序)

按单列排序 select * from emp order by salary; select * from emp order by salary asc; # 升序 select * from emp order by salary desc; # 降序 按多列排序:(比如:先按照age排序,如果年龄相同,则按照薪资排序) select * from emp order by age, salary desc;

8、limit(限制查询的记录数)

select * from emp order by salary desc limit 3; # 默认起始位置为0 select * from emp order by salary desc limit 1,5; # 从0开始,往后查5条 select * from emp order by salary desc limit 5,5; # 从5开始,往后查5条(不包含第5条)
最新回复(0)