天河42期曾奔腾 发表于 2022-6-6 09:13:51

-06-05 笔记整理

本帖最后由 天河42期曾奔腾 于 2022-6-6 09:15 编辑

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

查 -- select
select * from 表; ==》查询 所有字段的值 来自 xx表
select sid,name,age from emp; ==》查找 sid、name、age字段 来自 emp表

条件查询先接 where (当满足 ... 条件时)
不等于 !=    (NULL值时不参与等于、不等于、大于小于这些条件匹配的)",""text":"select * from emp where dept2!=101; ==》查找 所有字段值 来自 emp表 当满足 dept2字段 不等于101时 ","select * from emp where dept2!101;==》查找 所有字段值 来自 emp表 当满足 dept2字段 不等于101时","marks":[]}]}],"state":{}}]">不等于 !=<>(NULL值时不参与等于、不等于、大于小于这些条件匹配的)
select * from emp where dept2!=101; ==》查找 所有字段值 来自 emp表 当满足 dept2字段 不等于101时
select * from emp where dept2!<>101;==》查找 所有字段值 来自 emp表 当满足 dept2字段 不等于101时

select * from emp where dept2=101; ==》查找 所有字段值 来自 emp表 当满足 dept2字段值为101时;
多条件查询
and 要求两边都满足
or 两边满足一边即可
select * from emp where dept2=101 and incoming=2000;==》查询 所有字段值 来自 emp表 当满足 dept2字段值为101 而且 incoming字段值为2000时
select * from emp where dept2=101 or incoming=7500; ==》查询 所有字段值 来自 emp表 当满足 dept2字段值为101 或 incoming字段值为7500时
null的匹配 is / is not
select * from test where age is null; ==》查询 所有字段值 来自 test表 当满足 age字段 为空时
select * from test where age is not null; ==》查询 所有字段值 来自 test表 当满足 age字段 不为空时
19 and age大于小于的匹配 仅适用于数字字符
select * from test where age>19 and age<=21; ==》查询 所有字段值 来自 test表 当满足 age字段值 大于19 且 age字段值 小于等于21;
between .. and .. :介于,是包含着等于的闭区间 也适用于时间
select * from test where age between 19 and 21; ==》查询 所有字段值 来自 test表 当满足 age字段值 介于19到21之间时

in 与 not in
select * from emp where age in (35,32,57); ==》 查询 所有字段值 来自 emp表 当 age字段 在(in)35或32或57时
select * from emp where age not in (35,32,57); ==》查询 所有字段值 来自 emp表 当 age字段 不在(not in)35或32或57时
在Linux中模糊匹配符: ' * ' , ' ? '
但是在MySQL中 ' * ' 和 ' ? ' 有其他的作用
MySQL中的模糊匹配符: ' % ' , ' _ '
' % ’ :匹配0个或多个字符
' _ ' :匹配一个字符
模糊匹配:like
不包括第1行)","marks":[{"type":"color","value":"#7B7B7B"}]},{"text":" 开始后3行;","marks":[]}]}],"state":{}},{"type":"block","id":"eKqE-1654415896483","name":"paragraph","data":{"version":1},"nodes":[{"type":"text","id":"9i0z-1654415896481","leaves":[{"text":"select * from test where age is not null limit 2,3; ==》查询 所有字段值 来自 test表 当满足 age字段值不为空时,限定查询从第3行开始后3行内容","marks":[]}]}],"state":{}}]">查询限定的数据 -- 分页查询 limit,只能sql语句的末尾
limit 3; :限定查询 前3行
limit 1,3:限定查询从第2行开始(不包括第1行),后面的3行
select * from test limit 1,3; ==》查询 所有字段值 来源 test表 限定从 第2行(1,3=>不包括第1行) 开始后3行;
select * from test where age is not null limit 2,3; ==》查询 所有字段值 来自 test表 当满足 age字段值不为空时,限定查询从第3行开始后3行内容
排序 order by
asc 表示升序、desc表示降序,都不写默认时升序操作
如果结合条件查询where,则必须接在where条件查询后面
如果结合限定查询limit,则接在limit 限定查询前面 tt
select * from test where age is not null order by age asc limit 3; ==》查询 所有字段值 来自 test表 当满足 age字段 不为空时的值,且进行升序排序,限定显示最前3条数据
select * from test order by age desc; ==》查询 所有字段值 来自 test表 对 age字段 进行 降序 排序
对多个字段进行同时排序,谁在前谁的优先级最高(order by排序最好不要同时对3个以上的字段排序)
select * from test order by phone asc,age asc; ==》查询 所有字段值 来自 test表 同时对 phone字段 和 age字段 进行升序排序,会优先完成 phone字段 的升序,,再对 age字段 进行排序
分组查询group by
注意
1. 分组查询是要查询指定的字段,对什么字段进行分组就查询查询什么字段。因为分组后,只有分组字段可以正常匹配,其他非分组字段(普通字段)是随机出现(一般是满足分组的第一条)
select * from emp group by dept2 ; ==》查询 所有字段值 来自 emp表 对 dept2字段 进行分组操作
2.当使用了group by分组之后,要进行条件过滤,是不能使用where,where条件只能卸载group by之前(先对表格数据进行过滤,再进行分组)
select * from emp where dept2 !=101 group by dept2; ==》 查询 所有字段值 来自 emp表 当满足 dept2字段 不等于101时,且对满足条件的 dept2字段 进行分组
3.如果希望再group by 分组之后进行条件过滤,就要使用having(作用有点类似where,但只能使用在group by分组之后)
4.group by分组一般都是结合着聚合函数使用,where条件时不允许接聚合函数的,having才可以
聚合函数(一般是结合分组查询使用,如果不使用分组查询,那么直接按照整个表格的情况进行处理)
count() 统计
select count(*) from 表; ==》统计表中的行数
select count(1) from 表; ==》统计表中的行数
select count(字段) from 表; ==》统计表中对应字段有多少条数据
2;","marks":[]}]}],"state":{}},{"type":"block","id":"qzMb-1654421336922","name":"paragraph","data":{"version":1},"nodes":[{"type":"text","id":"kMD6-1654421336921","leaves":[{"text":"","marks":[]}]}],"state":{}},{"type":"block","id":"GT2n-1654417410639","name":"paragraph","data":{"version":1},"nodes":[{"type":"text","id":"srBR-1654417410638","leaves":[{"text":"增 -- insert into ","marks":[{"type":"bold"}]}]}],"state":{}},{"type":"block","id":"1Cye-1654397178128","name":"paragraph","data":{"version":1},"nodes":[{"type":"text","id":"rs72-1654397178126","leaves":[{"text":"int 、bigint 、float 、ddouble只能插入数字,插入数据时不需要加引号","marks":[]}]}],"state":{}},{"type":"block","id":"wGaK-1654397244669","name":"paragraph","data":{"version":1},"nodes":[{"type":"text","id":"D4LY-1654397244661","leaves":[{"text":"char 、warchar插入字符串的,可以插入任意格式的数据,但是要加引号","marks":[]}]}],"state":{}},{"type":"block","id":"WjOX-1654397296854","name":"paragraph","data":{"version":1},"nodes":[{"type":"text","id":"nbj5-1654397296846","leaves":[{"text":"date 插入日期,要求格式 YYYY-MM-DD,也必须加引号","marks":[]}]}],"state":{}},{"type":"block","id":"qAdM-1654396534049","name":"paragraph","data":{"version":1},"nodes":[{"type":"text","id":"cDgJ-1654396534047","leaves":[{"text":"方法一:要求表的字段不多,对表的结构要熟悉","marks":[]}]}],"state":{}},{"type":"block","id":"L7Q1-1654396574514","name":"paragraph","data":{"version":1},"nodes":[{"type":"text","id":"2uV0-1654396574506","leaves":[{"text":"1.插入的值的数量必须要跟字段的数量对应上;","marks":[]}]}],"state":{}},{"type":"block","id":"0GkN-1654396603101","name":"paragraph","data":{"version":1},"nodes":[{"type":"text","id":"FVxc-1654396603093","leaves":[{"text":"2.值的格式必须要一一对应字段的要求","marks":[]}]}],"state":{}},{"type":"block","id":"arKs-1654396678853","name":"paragraph","data":{"version":1},"nodes":[{"type":"text","id":"C0Z9-1654396678850","leaves":[{"text":"insert into 表名 values(字段1的值,字段2的值,字段3的值, ... ,字段7的值),(字段1的值,字段2的值,字段3的值, ... ,字段7的值);==》 对一个有7个字段的表插入两行数据","marks":[]}]}],"state":{}}]">sum() 求和
select sum(incoming) from emp; ==》求 emp表中的总收入 ==》对表中 某个字段的值 进行求和
avg() 求平均
select avg(incoming) from emp; ==》求 emp表中的平均值收入 ==》对表中 某个字段的值计算平均值
max() 求最大值
select max(incoming) from emp; ==》求 emp表中的最大值收入 ==》对表中 某个字段的值计算最大值
min() 求最小值
select min(incoming) from emp; ==》求 emp表中的最小值收入 ==》对表中 某个字段的值计算最小值

distinct() 去重
select distinct(phone) from test; ==》对

as语句:取别名,可以对输入结果的字段名进行简化输出

面试题:珠海工行必问SQL题
现在有一个科目表,里面有两个字段:姓名、科目
求 表中选择科目大于两个科目的学生姓名
select name from 表名 where subjects>2;

增 -- insert into
int 、bigint 、float 、ddouble只能插入数字,插入数据时不需要加引号
char 、warchar插入字符串的,可以插入任意格式的数据,但是要加引号
date 插入日期,要求格式 YYYY-MM-DD,也必须加引号
方法一:要求表的字段不多,对表的结构要熟悉
1.插入的值的数量必须要跟字段的数量对应上;
2.值的格式必须要一一对应字段的要求
insert into 表名 values(字段1的值,字段2的值,字段3的值, ... ,字段7的值),(字段1的值,字段2的值,字段3的值, ... ,字段7的值);==》 对一个有7个字段的表插入两行数据
方法二:对指定的字段插入数据 -- 常用的方式
insert into 表名(字段4,字段1,字段2)values(字段4的值,字段1的值,字段2的值);==》对一张表中三个指定字段插入值,值的顺序按照指定字段的顺序进行插入
NULL和 '   ':NULL表示完全不占系统空间的,但是''空字符时占系统一个字节0的空间
'NULL'==》这是一个字符串
NULL ==》这是表示 空值
改 -- update..set..
update 表 set 被改字段=值 where 条件字段=满足什么条件
update 表 set sid=4 where name='xiaogua' ==》更新 test表 设置 sid的值为4 当 name字段等于'xiaogua'
删 -- delete
delete from 表 where 字段 为xx值时
delete from test where phone=17688889999 and time is null; ==》删除 表test 中 满足 phone字段值为17688889999 且 时间为空时 的行
delete from 表; ==》不限定条件删除表中数据,可以清空表中内容

面试题:MySQL中删除数据有多少种方式?
1.delete:可以根据条件删除指定的数据。如果不接条件删除时,可以清空表中数据,但是重新对表格插入数据时,自增长字段还会再原来的最大值基础上进行累计递增(只删除数据,但没有释放空间)
2.truncate:truncate 表名; ==》清空表格中数据,不能接条件删除指定的数据。保留表结构,重新插入数据时,自增长会从1重新开始(清空表中数据并释放空间)
3.drop table +表名 ==》直接删除整张表,删除数据,表的结构定义也被删除
select * from test from where name like 'xiao____'; ==》 查询 所有字段值 来自 test表 当满足 name字段值 以xiao开头后面接4个字符时

select * from test where name like '%m%'; ==》查询 所有字段值 来自 test表 当满足 name字段值 匹配 任意字符中间包含m的值时






页: [1]
查看完整版本: -06-05 笔记整理