mysql对数据做差分_MySQL对数据操作的一些深入语法

本文详细介绍了MySQL中的数据操作,包括插入数据的蠕虫复制、主键冲突处理、数据修改、删除以及查询。讨论了如update、delete、truncate等语句的使用,并详细阐述了查询数据的多种方式,如where子句、group by子句、having子句、order by子句,以及联合查询和交叉连接等高级语法。
摘要由CSDN通过智能技术生成

其他数据操作

数据的操作也叫作crud:

C:create

R:read

U:update

D:delete

插入数据

蠕虫复制

就是在已有的数据的基础之上,将原来的数据进行复制,插入到相对应的表中!

语法规则:

insert into 表名select *|字段列表from表名

注意:

当一个表中的数据复制到另一个表中的时候,需要注意数据的来源要与被插入的表的字段数量和类型要保持一致!

总结蠕虫复制的优点:

1, 可以以最快的速度复制另外一张表的数据

2, 在短期内产生大量的数据,以测试服务器的压力

主键重复

插入的值与主键中的值发生冲突,重复的时候,需要使用一个语法,一般使用在主键更改的时候:

如果重复的时候及更新值:

insert into 表名[字段列表] values(值列表) on duplicate key update字段1=值1,字段2=值2……

直接将重复的值删除,插入新数据:

replaceinto 表名[字段列表] values(值列表);

修改数据

update 表名set字段1=值1,字段2=值2……[where条件][order by字段名asc|desc][limit数据量]

删除数据

标准语法:

delete from 表名[where条件] [order by字段名asc|desc][limit数据量]

还有一个类似删除功能的语法:

truncate table 表名;或truncate表名;

注意:该语句不属于DML,属于DDL

相当于做了两件事情:

1, 先把原表drop掉!

2, 再按以前的原表的结构重新创建一次!

查询数据

select[select选项]*|字段列表[as 字段别名]from 数据源[where子句][group by子句][having子句][order by子句][limit子句];

以上的语法一般只是单表查询,另外还有多表查询,多表查询又有联合查询、子查询、连接查询(左连接,右连接,内连接,外连接,自然连接)

注意:

1, from后面的子句往往称之为:五子句,也叫五子查询!

2, 五子查询都可以没有,但是,如果要有,就必须按顺序写!

select选项和别名

含义:查询到的数据如何显示

这里的select选项有两个值:

all:也是缺省值(默认值),保留所有的查询结果!

distinct:去重,去掉重复的查询结果!

别名

所谓的别名,就是给字段或其他表达式等标识符另起一个名字,基本语法如下:

字段|表达式|表|子查询[as]别名

这里的as可以省略,但是为了增加可读性,一般还是写上!

where子句

语法:where 表达式

先将表达式计算结果,如果表达式为真(结果不为0)则则返回记录,如果为假(则为0),则不返回记录。相当于对所有记录进行遍历!

MySQL运算符

MySQL支持以下的运算符:

关系运算符

<  >

<=  >=

=   !=(<>)

注意:这里的等于是一个等号

between and

做数值范围限定,相当于数学上的闭区间!

比如:

between A and B相当于[A,B]

在between and前加上not则是反过来。

in和not in

语法形式:in|not in(集合)

表示某个值出现或没出现在一个集合之中!

模糊查询

也就是带有like关键字的查询,常见的语法形式是:

select *|字段列表from表名where字段名[not] like‘通配符字符串’;

所谓的通配符字符串,就是含有通配符的字符串!

MySQL中的通配符有两个:

_   :代表任意的单个字符

%   :代表任意的字符

group by子句

分组统计查询语句

group by 字段1[,字段2]……

从形式上看,就是通过表内的某个或某些字段进行分组:

统计函数

sum():求和,就是将某个分组内的某个字段的值全部相加

max():求某个组内某个字段的最大值

min():求某个组内某个字段的最小值

avg():求某个组内某个字段的平均值

count():统计某个组内非null记录的个数,通常就是用count(*)来表示!

多字段分组

group by 字段1[,字段2]……

作用是:先根据字段1进行分组,然后再根据字段2进行分组!

having子句

having子句和where子句一样,也是用来筛选数据的,通常是对group by之后的统计结果再次进行筛选!

二者的比较:

1, 如果语句中只有having子句或只有where子句的时候,此时,它们的作用基本是一样的!

2, 二者的本质区别是:where子句是把磁盘上的数据筛选到内存上,而having子句是把内存中的数据再次进行筛选!

3, where子句的后面不能使用统计函数,而having子句可以!因为只有在内存中的数据才可以进行运算统计!

order by子句

根据某个字段进行排序,有升序和降序!

语法形式为:

order by 字段1[asc|desc]

默认的是asc,也就是升序!如果要降序排序,需要加上desc!

多字段排序

order by 字段1[asc|desc],字段2[asc|desc]……

比如:order by score asc,age desc

联合查询

关键字:union

语法形式

select语句1

union[union选项]

select 语句2

union[union选项]

select 语句3

union[union选项]

……

作用:

所谓的联合查询,就是将多个查询结果进行纵向上的拼接,也就是select语句2的查询结果放在select语句1查询结果的后面。依次类推!

既然是纵向上的拼接,所以联合查询有一个最最基本的语法,就是各个select语句查询出来的结果,其中字段的个数必须相同,比如,不能一个是4列,一个是3列!并且从显示的结果上看,无论“拼接”了多少个select语句,字段名只显示第一条select语句的字段名!

其中,这里的union选项跟前面学习的select选择的值是一样的,只是默认值不一样:

all:也是缺省值,保留所有的查询结果!

distinct:去重(默认值),去掉重复的查询结果!

交叉连接

关键字:cross join

含义

就是从一张表的一条记录去连接另一张表中的所有记录,并且保存所有的记录,其中包括两个表的所有的字段!

交叉连接语法:

select  * | 字段列表from表1cross join表2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值