目录

MySQL表中数据基本操作

MySQL表中数据基本操作

1.表中数据的插入:

1.insert

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

创建一张学生表:

https://i-blog.csdnimg.cn/direct/fc3fab6e4fee4972ab527dd56fe7067c.png

1.1单行指定列插入:

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

https://i-blog.csdnimg.cn/direct/1f0eb103db1845f5b1ef4eb5954ef072.png

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

1.2全列插入

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

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

https://i-blog.csdnimg.cn/direct/39bb34b6bb7b43a1b39ff048250af40a.png

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

1.3多行插入:

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

例:

https://i-blog.csdnimg.cn/direct/1aa2ae5cb92f4bcdb97ffd3fa988690c.png

2.插入否则更新

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

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

例如:

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

https://i-blog.csdnimg.cn/direct/dfcf0d9f95644d0b9b216fde1ec2e858.png

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

3.插入否则替换

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

例:

https://i-blog.csdnimg.cn/direct/082075244e024698a46cbded0399e4bf.png

2.表中数据的查询:

  1. select

  2. 1全列查询:

select * from student;

https://i-blog.csdnimg.cn/direct/38589e161f044c23945dd6da7616240e.png

  1. 2指定列进行查询:

select id,name from student;

https://i-blog.csdnimg.cn/direct/28c8db4e4cf3453da2c4a9fffada9fe5.png

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

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

https://i-blog.csdnimg.cn/direct/d3c847be07db4eba9c9d7a9a7ee4444e.png

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

https://i-blog.csdnimg.cn/direct/0896e120d900452c8a25a7bc0893df87.png

也可以不带as:

https://i-blog.csdnimg.cn/direct/5cae452084c04626a59aa5fd95540f50.png

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

  2. https://i-blog.csdnimg.cn/direct/73102c1c193948c88acb3611ce0def83.png

  3. 5结果去重:

select distinct name from student;

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

https://i-blog.csdnimg.cn/direct/4ecc1740a0a64828b82cd371b1d66fda.png

2.where条件

通过比较运算符进行筛选

https://i-blog.csdnimg.cn/direct/43c322e452dd40a5ab2a56480667234f.png

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

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

逻辑运算符:

https://i-blog.csdnimg.cn/direct/65b3336da6a94a64a8837a8b1348f925.png

通过运算符进行筛选:

id<12:

https://i-blog.csdnimg.cn/direct/c67d6fafcdef455397ebc17e2260acfe.png

10<=id<=12:

https://i-blog.csdnimg.cn/direct/b88656db9e2c4e448c13841053ddb848.png

也可以用between and:

https://i-blog.csdnimg.cn/direct/0933417eb26646a08c7c99895a3e221a.png

id=1或者10,11:、

https://i-blog.csdnimg.cn/direct/892d109f059c499eb9feb37096927366.png

3.模糊匹配:

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

https://i-blog.csdnimg.cn/direct/9d487606235a430abb1aa865100cfcf5.png

https://i-blog.csdnimg.cn/direct/c5fedf8000bb45e1887a8e8389c72c27.png

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

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

4.结果排序–order by

asc为升序(从小到大)

desc为降序(从大到小)

默认为asc排升序

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

例:

将id按升/降序显示:

https://i-blog.csdnimg.cn/direct/3e6f8ba5bc634f24b2f049c3a484a0ee.png

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条结果

例:

https://i-blog.csdnimg.cn/direct/ae48f82612f44f8a9468a370ab18da2e.png

https://i-blog.csdnimg.cn/direct/50c2bb27961a46c591faa95c107b17b5.png

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

3.表中数据的更新

update:

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

[where …] [order by …] [limt …]

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

例:

https://i-blog.csdnimg.cn/direct/bc948c9e811c46e892774f0addd9fa60.png

也可以同时改变多个值:

https://i-blog.csdnimg.cn/direct/853869f7ffa04535992f13c6fc610ace.png

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

https://i-blog.csdnimg.cn/direct/ed092d12062d4463b8ab58c3b15ad5ca.png

4.表中数据的删除:

1.delete:

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

例:

https://i-blog.csdnimg.cn/direct/8ef13b252f1046bfb845748da113ca6a.png

或删除整张表的数据:

delete  from  table_name;

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

2.截断表

truncate  table_name

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

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

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

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

将select后的结果进行插入

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

创建一张和student一样的表:

https://i-blog.csdnimg.cn/direct/ac525c0e3b8a432b80e85a07ca53bbdd.png

https://i-blog.csdnimg.cn/direct/4af86884d207441bb911750944f34aa4.png

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

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

6.聚合函数:

https://i-blog.csdnimg.cn/direct/dc66d9fc58524b26bcb55ed26885880b.png

例子:

count:

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

https://i-blog.csdnimg.cn/direct/52352f8d944b4fee8113befeb7fbd4c7.png

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

https://i-blog.csdnimg.cn/direct/7edaaffa3ab145258cfdc84c908c7d0e.png

也可以先去重再统计:

https://i-blog.csdnimg.cn/direct/737d246cab9b4bab96dc2936a56e0989.png

sum:

https://i-blog.csdnimg.cn/direct/99807b2c3641455db649112834765d7f.png

avg:

https://i-blog.csdnimg.cn/direct/bb48b710d4264443883bda31e8e577b4.png

max:

https://i-blog.csdnimg.cn/direct/6bf095e7afd3434fa576e736e5d7d22a.png

min:

https://i-blog.csdnimg.cn/direct/e4e3078b01f24eeb8ab86064f59a57c6.png

7.分组查询

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

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

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

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

例:

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

https://i-blog.csdnimg.cn/direct/0a4dc0a6939f4638ac283733bbc07e34.png

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

https://i-blog.csdnimg.cn/direct/371e2deed1a74a4099b46ab37bb12f98.png

也可以加上属于哪个组:

https://i-blog.csdnimg.cn/direct/091a24de3c304320ae0da38f1260fcbb.png

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

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

having和group by联合使用:

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

https://i-blog.csdnimg.cn/direct/71162586e85948f1b39697ea91181d3b.png

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一切皆表。