MySQL基础操作总结_CRUD

文章目录

1.新增 insert

1.1 单行数据+全列插入

1.2 多行数据+指定列插入

2.查询 select

2.1 全列查询

2.2 指定列查询

2.3 查询字段包含表达式

2.4 别名

2.5 去重:distinct

2.6 排序:order by 

2.7 条件查询 

2.7.1 where条件查询

2.7.2 and与or查询

2.7.3 范围查询

2.7.4 模糊查询 like

2.7.5  NULL 的查询:IS [NOT] NULL

2.8 分页查询 : limit

3.修改 update

4.删除 delete


CRUD即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写

其中查询操作是应用场景最多的,需要熟练使用,下面对四个操作演示一下用法

1.新增 insert

语法

insert [into] table_name values (value_list)...
value_list: value,......

先创建一张学生表

 insert into student1 values (1001,20110,'张三','123456@qq.com');

1.1 单行数据+全列插入

插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致

 insert into student1 values (1001,20110,'张三','123456@qq.com');
 insert into student1 values (1002,20111,'李四','2123456@qq.com');

1.2 多行数据+指定列插入

插入两条记录,value_list 数量必须和指定列数量及顺序一致

insert into student1 (id,sn,name,qq_emial) values 
    (1003,20112,'王五','323456@qq.com'),
    (1004,20113,'赵六','42345@qq.com');

2.查询 select

在工作的场景中,查询操作出现的概率是四个操作中最大的,比起其它三个操作也相对复杂

语法

select  [distinct]{* | colunm [,ccolumn] ...]}
        [from table_name]
        [where ...]
        [order by column [asc|desc],...]
        limit...

创建一个考试成绩表

 

 插入一些数据

insert into exam_result(id,name,chinese,math,english) values
        (71250,'张三',95.5,82.2,67.5),
        (69753,'李四',88,86,89),
        (12254,'王五',87,88,98),    
        (61256,'张六',73,85,65),
        (30258,'孙七',25,88,65),
        (11260,'柯八',82,76,45);

2.1 全列查询

一般不建议使用 *进行全列查询,原因如下:

1.全列查询是一个危险的操作,当数据库的数据很多时,全列查询意味着需要传输的数据量也很大

2.可能影响到索引的使用

 select*from exam_result;

2.2 指定列查询

指定列的查询不用按照表定义的顺序来

select name,chinese from exam_result;

 

2.3 查询字段包含表达式

表达式不包含字段时,就像上面介绍的指定列查询

包含一个字段的查询

select name,chinese+10 from exam_result;

表达式:chinese+10  

包含多个字段的表达式查询

 select name,chinese+math from exam_result;

2.4 别名

别名是指为查询结果中的列指定别名,表示返回结果集,以该别名作为列名

语法

select column [as] alias_name[] from table_name;

as 后加别名,也可以省略

查询每个同学的总成绩:

 select name,chinese+math+english as count_result from exam_result;

 省略as效果相同

2.5 去重:distinct

使用DISTINCT关键字对某列数据进行去重

english 列有重复数据,使用DISTINCT关键字去重

select distinct english from exam_result;

2.6 排序:order by 

 asc 为升序

desc 为降序

默认为asc

语法

select ... from table ....order by column [asc|desc];

注意:

1. 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序

2. NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面

3. 使用表达式及别名排序

查询同学及总分,由高到低

select name,chinese+math+english from exam_result order by chinese+math+english desc;

4. 可以对多个字段进行排序,排序优先级随书写顺序

 select name,chinese,math from exam_result order by chinese desc,math;

2.7 条件查询 

比较运算符:

运算符说明
>, >=, <, <=大于,大于等于,小于,小于等于
=等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <>不等于
BETWEEN a0 ANDa1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, ...)如果是 option 中的任意一个,返回 TRUE(1)
IS NULL是 NULL
IS NOT NULL不是 NULL
LIKE模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

逻辑运算符:

和逻辑关系运算符相同,and和&&,or和||,not和非

运算符说明
AND多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT

条件为 TRUE(1),结果为 FALSE(0)

2.7.1 where条件查询

查询总分在 200 分以下的同学

注意:where条件可以用于表达式,不能使用别名

 select name,chinese+math+english 总分 from exam_result where chinese + math + english < 200;

如果加别名

MySQL不允许在WHERE子句中使用列别名,因为

计算WHERE子句时,可能尚未确定列值

2.7.2 and与or查询

注意:AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

查询语文成绩大于80分,且英语成绩大于80分的同学

select * from exam_result where chinese > 80 and english > 80;

查询语文成绩大于80分,或英语成绩大于80分的同学

select * from exam_result where chinese > 80 or english > 80;

我们观察一下and和or 的优先级

不加括号时:

先执行 english > 80 and math > 80,返回结果后再执行or再返回结果,为了避免不必要的麻烦,我们可以在使用时加上括号

 select * from exam_result where chinese > 80 or english > 80 and math > 80;

 加括号时:

select * from exam_result where (chinese > 80 or english > 80) and math > 80;

2.7.3 范围查询

1.between...and...

也可以用and 完成查询操作

查询语文成绩在 [80, 90] 分的同学及语文成绩

 select name,chinese from exam_result where chinese between 80 and 90;

2.in

使用or 也能实现

查询数学成绩是 76 或者 88 或者 82 或者 99 分的同学及数学成绩

 select name,math from exam_result where math in(76,88,82,99);

2.7.4 模糊查询 like

% 匹配任意多个(包括 0 个)字符

select name from exam_result where name like '张%';

_ 匹配严格的一个任意字符

select name from exam_result where name like '王_';

2.7.5  NULL 的查询:IS [NOT] NULL

查询 qq_mail 已知的同学姓名

 select name,qq_emial from student1 where qq_emial is not null;

 查询 qq_mail 未知的同学姓名

 select name,qq_emial from student1 where qq_emial is null;

2.8 分页查询 : limit

从0开始筛选n条结果

... ... limit n

从s开始筛选n条结果

... ... limit s,n

 

 比第二种方法更明确

从s开始筛选n条结果

... ... limit n offset s

 

我们对成绩表按id分页,分别显示3页

第一页

 select id,name,math,english,chinese from exam_result order by id limit 3 offset 0;

第二页

select id,name,math,english,chinese from exam_result order by id limit 3 offset 3;

 第三页

select id,name,math,english,chinese from exam_result order by id limit 3 offset 6;

如果没有结果会显示空,如果有结果但是不满足要查询的数量,也会显示不满足查询数量的数据,也就是如果只剩下两条数据,分页后查询的是三条,最后一页也会显示剩下的两条数据

3.修改 update

语法

update table_name set column = ......

将张三同学的数学成绩变更为 80 分

update exam_result set math = 80 where name = '张三';

将总成绩倒数前三的 3 位同学的英语成绩加上 30 分

update exam_result set english = english + 30 order by chinese + math + english limit 3;

4.删除 delete

涉及删除了,肯定又是一个比较危险的操作

语法

delete from tbale _name ... ...

删除张三同学的考试成绩

delete from exam_result where name = '张三';

删除整张表

delete from table_name; 

  • 66
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 57
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 57
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoLo♪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值