【MySQL】表的增删查改

文章目录

  • 1. insert 插入
    • 单行数据插入
    • 多行数据插入
    • 插入替换
      • 替换的第一种方案
      • 替换的第二种方案
  • 2. select 查找
    • 全列查询
    • 指定列查询
    • 查询字段为表达式
    • 结果去重
  • 3. where子句
      • where子句案例
        • and 和 between and 的使用
        • in 和 or 的使用
        • 模糊匹配(like) 的使用
        • NULL的查询
  • 4. order by ——排序
  • 5. 筛选分页结果
  • 6. update——修改
  • 7. delete ——删除
  • 8. 截断表
  • 9. 聚合统计

1. insert 插入

语法:
insert [into] table_name [ colum ] values (value_list)


into 和列属性 都可省略
values左侧为列属性 values右侧为以列属性匹配的数据


【MySQL】表的增删查改_第1张图片

创建一张表 students ,内部包含 自增长的主键 id 、 唯一键 sn 、 不为空的name 、 唯一键 qq


【MySQL】表的增删查改_第2张图片

输入 desc students; 查看students表结构


单行数据插入

【MySQL】表的增删查改_第3张图片

指定列 进行单行插入
由于id为主键 并且是自增长的,所以默认从1开始


【MySQL】表的增删查改_第4张图片

若将values 左侧的括号忽略 则为全列插入

【MySQL】表的增删查改_第5张图片

多行数据插入

当单个插入后,还想继续插入,就需要加上 逗号进行分割

输入 insert into students values(14,1,‘赵六’,‘8888’),(15,2,‘田七’,‘9999’); 即插入成功赵六和田七的信息

插入替换

插入时,有可能出现 主键冲突 或者 唯一键冲突


【MySQL】表的增删查改_第6张图片

主键冲突 即主键的id 值相同


【MySQL】表的增删查改_第7张图片

唯一键冲突 即唯一键的qq相同


替换的第一种方案

为了 发生 主键或者唯一键 冲突时,可以修改
选择语句:
insert on duplicate key update colum=value [ ]
如果发生键值冲突,则对指定列进行修正


【MySQL】表的增删查改_第8张图片

若插入id值为1的信息,则会发生主键冲突


【MySQL】表的增删查改_第9张图片

输入 insert into students values(1,112,‘李四’,‘7777’) on duplicate key update sn=112,qq=‘7777’;
因为发生了主键冲突,所以更新数据库的信息,将原数据库的 sn 值改为112 qq改为7777


【MySQL】表的增删查改_第10张图片

输入 select row_count(); 筛选受影响的行

0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等
1 row affected: 表中没有冲突数据,数据被插入
2 row affected: 表中有冲突数据,并且数据已经被更新


替换的第二种方案

若没有冲突时,则直接插入
若发生冲突时,删除后再插入

replace into 表名 ( ) values( )

1 row affected: 表中没有冲突数据,数据被插入
2 row affected: 表中有冲突数据,删除后重新插入


【MySQL】表的增删查改_第11张图片

由于插入的数据在students表中不存在 所以成功被插入, 显示 1 row affected


【MySQL】表的增删查改_第12张图片

由于插入的数据 sn值 qq值 与表中数据相同,则删除原来表中的数据,再添加新插入的数据
显示 2 row affected


2. select 查找

语法:
SELECT
[DISTINCT] {* | {column [, column] …}
[FROM table_name]
[WHERE …]
[ORDER BY column [ASC | DESC], …]
LIMIT …

distinct 表示去重
可以使用* 将所有行全部列举出来,也可以使用 逗号 隔开一列或者多列 按照指定筛选
from 表示想从那个表中去提取
where 提取表结构数据时,想要设置的筛选条件
order by 表示 排序


【MySQL】表的增删查改_第13张图片

创建一张表 exam_result ,其中包含 主键自增长的id、不为空的姓名、默认值为0.0 的语文成绩
默认值为0.0的数学成绩、默认值为0.0的英语成绩


【MySQL】表的增删查改_第14张图片

在exam_result表中 插入 唐三藏、孙悟空 等人 的 语文 数学 英语 成绩


全列查询

【MySQL】表的增删查改_第15张图片

输入 select * from +表名; 即可查看该表的所有信息

但并不推荐 使用 * 进行全列 查询
因为 查询的越多,意味着需要传输的量越大,可能会影响索引的使用


指定列查询

【MySQL】表的增删查改_第16张图片

输入 select 指定列名 from 表名; 即可获得对应的表中指定列的信息


也可以通过逗号 获取多个列信息

【MySQL】表的增删查改_第17张图片

输入 select 指定列名1,指定列名2 from 表名; 即可获得表中 列名1与列名2的信息


查询字段为表达式

【MySQL】表的增删查改_第18张图片

当select 后面跟表达式 如 1+1 、5*6
都会帮助其进行运算出结果


【MySQL】表的增删查改_第19张图片

表达式最终的结果是要把表达式计算完
由于10是常数,所以最终显示的每一行都会把10拼上


同样可以计算表中各种数据的加和

【MySQL】表的增删查改_第20张图片

将英语 数学 语文 成绩 加在一起 与名字 显示出来


as 可以将列重命名

【MySQL】表的增删查改_第21张图片

此时将 英语 、数学、语文成绩 的加和 重命名为 total


可以将as 省略,直接 重命名

【MySQL】表的增删查改_第22张图片

将name 重命名为 姓名 、将英语 、数学、语文成绩 的加和 重命名为 总分

结果去重

【MySQL】表的增删查改_第23张图片

输入 select distinct 指定列名 from 表名; 即在表的指定列中 去重

3. where子句

where后面跟特定的比较运算符 (比较运算符和逻辑运算符) 来判断 如何进行筛选

【MySQL】表的增删查改_第24张图片

mysql中 判断两个子句 是否相等 用 一个等号 即可
NULL 就是为空,0 就是0 ,两者含义不同


【MySQL】表的增删查改_第25张图片

无法判断 NULL是否等于 NULL ,等号左右的 NULL 是没办法参与运算的


【MySQL】表的增删查改_第26张图片

当使用 <=>,即可判断 两个NULL 是否相等


【MySQL】表的增删查改_第27张图片

不等于 ,既可使用 != 比较 ,也可使用 <> 比较


逻辑运算符

【MySQL】表的增删查改_第28张图片
【MySQL】表的增删查改_第29张图片

在之前创建的 exam_result 表中,查看之前插入的数据


【MySQL】表的增删查改_第30张图片

首先查询exam_result表中 所有人的英语成绩


【MySQL】表的增删查改_第31张图片

想要查找 表中 英语成绩 小于60分的人
所以在查询所有人英语成绩的基础上 添加 where english <60 ,即可查询到 英语成绩 小于60分的人


where子句案例

and 和 between and 的使用

语文成绩 在 80 和90之间 的同学 及语文成绩

【MySQL】表的增删查改_第32张图片

首先查询exam_result表中 所有人的语文成绩


【MySQL】表的增删查改_第33张图片

and 表示 并且
想要查找 表中 语文成绩 在 [80,90] 区间的人
所以在查询所有人语文成绩的基础上 添加 where chinese >=80 and chinese <=90 ,即可查询到 语文成绩 在 [80,90] 区间的人


也可以使用 between and ,达到同样的效果

【MySQL】表的增删查改_第34张图片

between a0 and a1,表示 [a0,a1] 区间内的值 (可以取到a0和a1)


in 和 or 的使用

数学成绩 是58 或者 59 或者 98 或者 99 的同学 及数学成绩

【MySQL】表的增删查改_第35张图片

首先查询exam_result表中 所有人的数学成绩


【MySQL】表的增删查改_第36张图片

想要查找 表中 数学成绩 是58 或者 59 或者 98 或者 99 的同学
所以在查询所有人数学成绩的基础上 添加 where math=58 or math =59 or math=98 or math=99
即可查询到 数学成绩 是58 或者 59 或者 98 或者 99 的同学


也可以使用 in ,来达到同样的效果

【MySQL】表的增删查改_第37张图片

将想要查询的数学成绩全部放入 in的括号中即可 ,如果有对应的数学成绩 ,则会返回


模糊匹配(like) 的使用

姓孙的同学及 孙某同学

【MySQL】表的增删查改_第38张图片

首先查询exam_result表中 所有人的名字


【MySQL】表的增删查改_第39张图片

% 表示任意多个(包括0个)任意字符
想要查找 表中 姓孙 的同学
所以在查询所有人名字的基础上 添加 where name like ‘孙%’
即可找到 姓孙的同学


【MySQL】表的增删查改_第40张图片

_ 表示任意一个字符
想 要查找 表中 孙某 的同学
所以在查询所有人名字的基础上 添加 where name like ‘孙_’
即可找到 孙某的同学


NULL的查询
【MySQL】表的增删查改_第41张图片

查询test表的结构
其中有名字为null 、id为null、名字为空串 的人存在


【MySQL】表的增删查改_第42张图片

输入 select * from test where name is null;
查询test表中 名字是 null 的人,但空串并没有显示出来
因为空串和null的含义不同


输入 select * from test where name is not null;
查询test表中 名字不为空 的人 ,空串也显示出来了
因为空串不为空


4. order by ——排序

【MySQL】表的增删查改_第43张图片

ASC为升序 (从小到大)
DESC为降序 (从大到小)
默认为ASC
(若没有ober by 子句的查询,则返回的顺序是未定义的)


同学及同学成绩,按数学成绩升序显示

【MySQL】表的增删查改_第44张图片

输入 select *from exam_result; 显示exam_result 表的信息


【MySQL】表的增删查改_第45张图片

在所有人的信息基础上,添加 order by math asc 表示在数学成绩列按升序排列


【MySQL】表的增删查改_第46张图片

NULL视为比任何值小,升序出现在最上面


查询同学各门成绩,按照数学降序 、英语升序、语文升序的方式显示

【MySQL】表的增删查改_第47张图片

在所有人的信息基础上,添加 order by math desc,english desc, chinese asc
多个列的升降序需求,使用逗号隔开
就可以查找到 数学降序 、英语升序、语文升序 的人存在


5. 筛选分页结果

【MySQL】表的增删查改_第48张图片

limit n :即将前n行数据截取
如 添加 limit 5 即可将前5行信息 截取出来


【MySQL】表的增删查改_第49张图片

limit s,n: s表示下标 从s+1位置开始,连续读取n条记录
如 limit 1,3 从第2行开始截取3行数据


【MySQL】表的增删查改_第50张图片

limit n offset s : 取n行数据,并从s+1行开始 (s表示下标)
如 limit 3 offset 0 取3行数据,并从第1行位置开始


为了防止表中数据过大,查询全表数据导致数据库卡死
假设按id进行分页,每页分3条记录

【MySQL】表的增删查改_第51张图片

输入 limit 0,3 表示 每一页分3条,该页为第一页


【MySQL】表的增删查改_第52张图片

跳过第一页的前3个数据,则从第4行开始 即下标为3
所以 第二页 为 limit 3,3


6. update——修改

语法:

where 条件筛选
order by 排序
limit 分页
对查询到的结果进行列值更新

若使用update时 ,不使用where ,则对整个表进行修改


将孙悟空同学的数学成绩变为80分

【MySQL】表的增删查改_第53张图片

输入 update exam_result set math=80 where name =‘孙悟空’; 即将孙悟空的数学成绩改为80分


7. delete ——删除

语法:


删除孙悟空同学的考试成绩

【MySQL】表的增删查改_第54张图片

输入 delete from exam_result where name=‘孙悟空’; 将孙悟空同学对应的成绩删除掉
exam_result 表中就找不到 孙悟空的成绩了


【MySQL】表的增删查改_第55张图片

创建一张表结构


【MySQL】表的增删查改_第56张图片

插入三行数据,分别为 A B C


【MySQL】表的增删查改_第57张图片

删除表之前,查询发现 auto_increment 值为4
再将整张表的数据删除
再次查询表信息时,发现表已经空了
再次查询发现 auto_increment对应值依旧为4
所以删除表数据,不会将自增序列对应的值 置空


【MySQL】表的增删查改_第58张图片

再次插入 数据E 时,发现 对应的id值从4开始

8. 截断表

语法:

【MySQL】表的增删查改_第59张图片
【MySQL】表的增删查改_第60张图片

创建一张表 ,id为主键 且 自增长
并向表中插入 A B C


【MySQL】表的增删查改_第61张图片

删除表内容之前,自增长id值为4
使用 truncate for_truncate 将把表内容清空后
删除表内容后,自增长id值不存在了
所以删除表数据,会将自增序列对应的值 置空


【MySQL】表的增删查改_第62张图片

向表中插入 E 后,再次查询表 发现 id值从1开始

截断表特点:
1.不会对整表操作,不能像delete一样针对不部分数据操作
2.不对数据操作,所以比delete快,但是truncate在删除数据时,不会真正经过事物,所以无法回滚
undefined.会重置 auto_increment项

9. 聚合统计

【MySQL】表的增删查改_第63张图片

mysql中存在 聚合函数,这些函数可以直接调,进行聚合统计


【MySQL】表的增删查改_第64张图片

继续使用之前创建的表结构


【MySQL】表的增删查改_第65张图片

输入 select count(*) from 表名; 即可统计出表中多少行


【MySQL】表的增删查改_第66张图片

输入 select math from exam_result; 统计对应的数学成绩
输入 select count(math) math from exam_result; 即可统计对应的数学成绩有多少个


【MySQL】表的增删查改_第67张图片

输入 select sum(math) math from exam_result; 即可统计对应的数学成绩总分


【MySQL】表的增删查改_第68张图片

输入 select sum(math)/count(*) math from exam_result;
通过数学总分除以总人数,得到数学的平均分


【MySQL】表的增删查改_第69张图片

输入 select avg(math) from exam_result; 即可直接获得数学的平均分


【MySQL】表的增删查改_第70张图片

输入 输select max(english) from exam_result; 输即可获取英语的最高分


【MySQL】表的增删查改_第71张图片

输入 select min(math) from exam_result where math>70; 即可获得数学分数大于70的的最低分


你可能感兴趣的:(MySQL,mysql,数据库)