天河42期邓镓迪 发表于 2022-6-6 09:10:34

6.5

对表中数据的操作——增删改查
增:对表格进行数据的插入,为了添加或者插入测试数据供我们进行测试
改:对表中原有的数据进行修改,为了修改测试数据供我们进行测试某些测试不到的场景
删:对一些我们测试过程产生的脏数据(在测试过程中一些不是程序正常生成的数据)进行清除
查:对测试过程中产生的数据进行检查核查
--------------------------------------------------------------------

增:insert into
方式一:要求表的字段不多,对表的结构要熟悉
1.插入的值的数量必须要跟字段的数量对应上
2.值的格式必须要一一对应字段的要求
insert into 表名 values(字段1的值,字段2的值,字段3的值...   ,字段7的值),(字段1的值,字段2的值...   ,字段7的值);(对一个有7个字段的表插入两行)
方式二:对指定的字段插入数据(常用的方式)
insert into 表名(字段4,字段1,字段2) values(字段4的值,字段1的值,字段2的值),对一张表中3个指定字段插入值,值的顺序按照指定字段的顺序进行插入.

NULL和'   ':NULL是完全不占系统空间的,但是‘’空字符是占系统一个字节0的空间的
'NULL'==>这是一个字符串
NULL ==》这是表示 空值

改:update、set
update 表 set 被改字段=值 where 条件字段=满足什么条件;

update test set sid=4 where name='xiaoming';
更新test表 设置 sid的值为4,当name字段=xiaoming时,

查:select * form test;   查询所有字段(*)的值(来自于test表中)
select sid,name,age from test
条件查询先接where(当满足 某条件时)

select * from emp where dept2=101;【 查询emp中dep2=101的情况】

不等于 !=   <>(NULL值是不参与等于、不等于、大于小于这些条件匹配的)
select * from emp where dept2!=101;          【查询emp中dep2
select * from emp where dept2<>101;         不等于101的情况。】
-------------------------------------------------------------------------------------------------------------------------------------
多条件查询
and条件:要求两边同时满足
select *from emp where dept2=101 and incoming=3500; 【dept2=101和incoming=3500同时满足】
-------------------------------------------------------------------------------------------------------------------------------------
or条件:以or为分界,两边只要满足一个
select * from emp where dept2=101 or incoming=7500;【满足dept2=101或incoming=7500】
———————————————————————————————————————————
null的匹配 :is、is not
select *from test where age is null;
select *from test where age is notnull;

【大于小于的匹配:】
select *from test where age>19 and age <=21;

【between 。。and 。。。:介于,是包含着等于的闭区间】
select *from test where age between 19 and 21;

在Linux中模糊匹配符:'*' '?'。
在MySQL中的模糊匹配符,'%''_'
% 匹配0个或多个字符
_ 匹配一个字符

模糊匹配:like
select *from test where name = '%m%';       【任意字符 m 任意字符】
select * from test where name like 'xiao____'; 【xiao开头,后接4个字符】
select * from test where age like '2%';【age:2接任意字符】
select * from test where time like '2022%';【time:2022接任意字符】

查询限定的数据---分页查询 limit,只能放在SQL语句的末尾
select *from test limit 0,3; 【0到3行】
select *from test where time is not null limit 2,3; 【当time字段的值不为空时,限定查询第3行(2)开始的三行内容】
————————————————————————————————————————————

select *from test order by age desc;【对age字段进行降序排列】
select *from test order by age asc;【对age字段进行升序排列】
select * from test where age is not null order by age asc limit 3; ==》先做where条件过滤,再做order by排序,最后做limit限定查询【当age不为空时,对age字段升序排列,并显示前三条】

select * from test order by phone asc,age asc; ==》对多个字段进行同时排序,谁在前谁的优先级更高(注意:order by排序最好不要同时对3个以上的字段进行排序)
————————————————————————————————————————————

分组查询:group by
注意:
1.分组查询要查询指定的字段,对什么字段进行分组就查询什么字段。因为分组之后,只有分组字段可以正常匹配,其他非分组字段(普通字段)是随机出现的(一般是满足分组的第一条)
2.当使用了group by分组之后,要进行条件过滤,不能再使用where了,where条件只能写在group by之前(先对表格数据进行过滤,再进行分组)先过滤再分组。
3.如果希望在group by分组之后进行条件过滤,就要使用having(作用类似where,但是只能写在group by分组之后)
4.group by分组一般是要结合 聚合函数使用,where条件是不允许接聚合函数,having才可以接聚合函数。

select dept2 from emp group by dept2;【查询emp表中dept2字段的值,对dept2字段进行分组操作】

select dept2,count(*) from emp group by dept2 having dept2 != 101;【查询dept2和统计行数(count*),先对dept2进行分组,再把结果中的dept2进行去除(统计除101外的情况)。】

select dept2,count(*) from emp group by dept2 having count(*) >1;【查询dept2和统计行数(count*),先对dept2进行分组,再找出结果中行数(count(*))大于1的情况】。
————————————————————————————————————————————
聚合函数:(一般是结合分组查询使用,如果不使用分组查询,那么则是直接按照整个表格的情况进行处理)
count()统计
select count(*) from表;统计表中的行数
select count(1) from表;统计表中的行数
select count(字段) from表; 统计表中对应字段有多少条数据

①select sum(incoming) from emp; ==》求emp表中的总收入:对表中某个字段的值进行求和统计
②select avg(incoming) from emp; ==》求emp表中的平均收入 :对表中某个字段的值进行求平均
③select max(incoming) from emp;==》求emp表中的最大收入:对表中某个字段的值进行求最大值
④select min(incoming) from emp;==》求emp表中的最小收入 :对表中某个字段的值进行求最小值
⑤select distinct(phone) from test; 对test表中的phone字段的值进行去重复的操作,每种值只保留一个


SQL中进行四则运算:
select max(incoming),min(incoming),(max(incoming)-min(incoming))*100 from emp;
D:\YUNJI\weixinobU7VjhWZ3EbBzkoz-CMgyRKG-zM\9f0ac4ae6d2a4acb83c60f47c7dce352\ghtmo%eq@)`m~cp]2e]6kxd.png



as语句:取别名,可以对输入结果的字段名进行简化输出
select max(incoming),min(incoming),max(incoming)-min(incoming)*100 as '乱取的' from emp;
D:\YUNJI\weixinobU7VjhWZ3EbBzkoz-CMgyRKG-zM\cb73a7bf1f1048d897554da5ee6508c0\0oa8dqv~puto7zgc4n}b8h5.png
delete from 表 where 字段=满足什么条件
update test set sid=4 where name='xiaoming';

【更新 test表 设置 sid的值为4 当 name字段等于'xiaoming'时】
update test set score =88.88;
update test set name='laomai',age=28,score=100,time='1999-01-01' where sid=7;

D:\YUNJI\weixinobU7VjhWZ3EbBzkoz-CMgyRKG-zM\1b806e168824456fa09168eeaeb22062\clipboard.png


delete from 表 where xx字段=满足什么条件;
delete from test where phone=17688889999 and time is null;【删除test表中当phone=17688889999且time字段为空的数据】
D:\YUNJI\weixinobU7VjhWZ3EbBzkoz-CMgyRKG-zM\7433793f0fcd4e9dbd7cf375b7d496d4\clipboard.png

delete from 表;==>不限定条件删除表中数据,可以清空表中内容

——————————————————————————
面试题:MySQL中删除数据有多少种方式?
1.delete:可以根据条件删除指定的数据。如果不接条件删除,则清空表中数据,但是重新对表插入数据时,自增长字段还会在原来的最大值基础上进行递增(只删除数据,但没有释放空间)
2.truncate 表名:直接清空表格数据,不能接条件删除指定的数据。保留表

页: [1]
查看完整版本: 6.5