当前位置: 首页 > news >正文

MySQL表中数据基本操作

1.表中数据的插入:

1.insert

insert [into] table_name [(column [,column]...)] values (value_list) [,(value_list)] ...

创建一张学生表:

1.1单行指定列插入:

insert into student (name,qq) values (‘张三’,’1234455’);

values左侧为要插入的列,右侧为插入对应列的数据。

1.2全列插入

也可以省略values左侧,表示全列插入,对表中每一列都需要指定数据。

insert into student values (10,’李四’,’12355555’);

单行插入和全列插入的into都可以进行省略。

1.3多行插入:

在一次insert语句后用逗号分隔,可以继续进行数据插入。

例:

2.插入否则更新

在进行数据插入时,可能会遇到主键冲突或者唯一键冲突,导致数据插入失败,因此可以选择性的进行同步更新操作。

insert ... on duplicate key update column=value [,column=value] ...

例如:

insert into student values (1,’张三三’,’11111111111’) on duplicate key update name=’张三三’,qq=’11111111111’;

表示插入数据,若存在键值冲突,则将插入数据转为对表中发生冲突的数据进行修改。若不存在键值冲突,则正常进行插入。

3.插入否则替换

当插入的数据出现冲突时,将表内数据进行替换,若没有冲突,则直接插入。

例:

2.表中数据的查询:

  1. select
  1. 1全列查询:

select * from student;

  1. 2指定列进行查询:

select id,name from student;

        1.3在select时,可以进行运行操作:

如:select id,name,10+10+10 as result from student;

其中10+10+10 as result 表示将运算结构用result重命名的列表示,也可以直接使用:

也可以不带as:

  1. 4在select时还可对列进行重命名:

  1. 5结果去重:

select distinct name from student;

对选择的指定列进行去重筛选

        2.where条件

通过比较运算符进行筛选

null就是null,和零无关,不能参与数字/字符比较。

判断是否为null用is null 或者is not null。

逻辑运算符:

通过运算符进行筛选:

id<12:

10<=id<=12:

也可以用between and:

id=1或者10,11:、

3.模糊匹配:

like ---找姓刘的同学,和李某(某代表只有一个字):

where 后面可以跟逻辑计算,但是不能对在select中重命名的列进行计算,因为是先执行from再执行where,最后执行select。

并且,不能在where后面的筛选条件进行重命名。

4.结果排序--order by

asc为升序(从小到大)

desc为降序(从大到小)

默认为asc排升序

没用order by字句的查询,返回的顺序是为定义的,不能依赖这个顺序。

例:

将id按升/降序显示:

null值比任何值都小。

order可以对select时使用的重命名进行排序,因为要对表结构进行排序,先要有合适的数据---由select进行筛选

5.筛选分页结果---limit

select ... from table_name [where ...] [order by ...] limit  n;

默认起始下标为零表示从零开始,筛选n条结果;

select ... from table_name [where ...] [order by ...] limit s,n;

从s开始,筛选n条结果

例:

当对未知表进行查询时,最好加一条limit 1,避免因为表中数据过大,查询全表数据导致数据库卡死。

3.表中数据的更新

update:

update table_name set column=expr[,column =expr...]

[where ...] [order by ...] [limt ...]

对查询到的结果进行列值更新----根据where查询到的结果进行更新

例:

也可以同时改变多个值:

也可以配合order by,limit使用,将id为前三名的name都改为张三:

4.表中数据的删除:

1.delete:

delete from table_name [where ...] [order by ...] [limit ...]

例:

或删除整张表的数据:

delete  from  table_name;

若表中有auto_increment类型的列,其值不会因为数据的删除而发生改变。

2.截断表

truncate  table_name     

删除表中所有数据,同时也将auto_increment计算器的值置为零。

truncate是直接清空表数据,不走事物,无法回滚----不会记录在日志。

5.插入与查询的组合使用:

insert into table_name [(column,[,column ...])] select ...

将select后的结果进行插入

实际使用:对表中数据进行去重,将去重后的数据插入到新表:

创建一张和student一样的表:

注意:只有但id,name,qq都相同时才会进行去重,若对指定列去重,会使列显示不完整,导致插入失败。

去重完成后,可以通过rename进行替换。

6.聚合函数:

例子:

count:

select count (*) from student; ---统计数据个数

也可以对count(*)做重命名:
 

也可以先去重再统计:

sum:

avg:

max:

min:

7.分组查询

在select中使用group by子句可以对指定列进行分组查询。

实际分组是通过指定列中行的不同信息进行分组,组内的指定列的行信息相同。

------分组的目的是为了对分组后的组使用聚合函数进行查询。

select column1,column2,...from table group by column;

例:

建立表并向其中插入数据:

按组筛选最高工资和平均工资:

也可以加上属于哪个组:

分组,就是把一组按一定条件拆成了多个组,进行各自组内的统计。

group by 不止可对一列进行分组,可以同时对多列进行筛选,将多列行信息相同的数据放在一组进行统计。

having和group by联合使用:

对group by 后经过了聚合统计的结果进行条件筛选。

having 和where的区别?

where是对具体的任意列进行筛选,having是对分组聚合之和的结果进行筛选--------他们的条件筛选的阶段是不同的。

可以通过

select 列名,avg(列名) from 表名 where ... group by ... having ...

来分析:

  1. 执行from找到表中所有数据
  2. 通过where来筛选
  3. 将where筛选之后的数据交给group by分组
  4. 将分组之后的各组交给聚合函数(avg)进行统计,重命名等工作
  5. 将结果交给having进行条件筛选

不止开始创建的表为表,经过where筛选后的也是表,经过分组后的也是表。。。。

mysql一切皆表。


http://www.mrgr.cn/news/93599.html

相关文章:

  • 蓝桥杯题型
  • python语言总结(持续更新)
  • 【VUE2】第一期——初使用、基本语法
  • 权限系统基础知识笔记
  • CUDA计时函数:精确测量GPU代码执行时间
  • Linux | Vim 鼠标不能右键粘贴、跨系统复制粘贴
  • 【leetcode hot 100 206】反转链表
  • PDF文档中表格以及形状解析-后续处理(长线段根据交点打断成短线段)
  • Pytest自动化框架
  • 当AI开始“思考“:拆解大模型训练与推理的秘密(以DeepSeek为例)
  • Linux云计算SRE-第十七周
  • MAC电脑常用操作
  • leetcode日记(84)交错字符串
  • pyside6学习专栏(九):在PySide6中使用PySide6.QtCharts绘制6种不同的图表的示例代码
  • Docker 部署 Vaultwarden
  • π0及π0_fast的源码解析——一个模型控制7种机械臂:对开源VLA sota之π0源码的全面分析,含我司微调π0的部分实践
  • 【使用hexo模板创建个人博客网站】
  • 点云数据处理--splat转3dtiles
  • Vue23Web 基礎性拉滿的面試題(2025版)還沒更新完...
  • RSA的理解运用与Pycharm组装Cryptodome库