增删改查操作

工作中百分之90的操作,都在此章节包含

CRUD简介

CURD是对数据库中的记录进⾏基本的增删改查操作:

Create (创建)

Retrieve (读取)

Update (更新)

Delete (删除)

1. Create新增

insert

sql 复制代码
insert into 表名 values (值,值......);

在此处的值,需要和表结构匹配

1.1 单⾏数据全列插⼊

值的数量必须和定义表的列的数量及顺序⼀致

sql 复制代码
insert into student values (1,'张三','男');

1.2 单⾏数据指定列插⼊

值的数量必须和指定列数量及顺序⼀致

sql 复制代码
insert into student(name,gender) values('李四','女');

1.3 多⾏数据指定列插⼊

在⼀条inset语句中也可以指定多个student,实现⼀次插⼊多⾏数据

sql 复制代码
insert into student values (3,'赵六','女'),(4,'田七','男'),(5,'周八','男');

一次插入和分多次插入有什么区别呢?

一次插入一条,分三个insert 执行.这样的操作,客户端和服务端,进行了三次网络通信.

一次插入三条,客户端和服务端,进行了一次网络通信.

网络通信,有一定开销

指定列插入和多行数据插入可以一起使用

sql 复制代码
insert into student (id) values(7),(8),(9);

2. Retrieve 查询

最难,最复杂的操作

Select

2.1 构造数据

sql 复制代码
CREATE TABLE exam (
 id BIGINT,
 name VARCHAR(20) COMMENT '同学姓名',
 chinese float COMMENT '语⽂成绩',
 math float COMMENT '数学成绩',
 english float COMMENT '英语成绩'
);
-- 插⼊测试数据
INSERT INTO exam (id,name, chinese, math, english) VALUES
(1, '唐三藏', 67, 98, 56),
(2, '孙悟空', 87, 78, 77),
(3, '猪悟能', 88, 98, 90),
(4, '曹孟德', 82, 84, 67),
(5, '刘⽞德', 55, 85, 45),
(6, '孙权', 70, 73, 78),
(7, '宋公明', 75, 65, 30);

2.2 全列查询

sql 复制代码
select * from 表名;

* 统配符 通配符可以代表各种信息.

此处的select * 的 * 代表所有列

全列查询,是一个非常危险的操作!!!

全列查询,会把表中所有数据都查询出来. 涉及到大量的硬盘访问和网络访问.

在生产环境中,一张表可能会非常大,数据会非常多.

2.3 指定列查询

sql 复制代码
select 列名,列名.....from 表名;
sql 复制代码
select id,name from student;

查询结果得到的表 ,是一个"临时表 ". 不能对这个表做出任何修改

2.4 查询时带有表达式

把所有学⽣的语⽂成绩加10分

sql 复制代码
select name ,chinese +10 from exam;

临时表 对临时表进行的操作,不会影响到数据库服务器硬盘中的原始数据.

所有 select 操作都不影响 数据库服务器的保存 原始数据

计算所有学⽣语⽂、数学和英语成绩的总分

sql 复制代码
select name ,chinese + math + english from exam;

2.5 查询带有别名

sql 复制代码
select 表达式 as 别名 from 表名;

as可以省略,但是不建议省略.可以提高代码可读性.

sql 复制代码
select name ,chinese + math + english from exam;

2.6 针对查询结果去重

distinct

把多个相同的值,合并成一个. 针对行

sql 复制代码
select distinct math from exam;

如果有多个值,使⽤DISCTINCT去重时,只有查询列表中所有列的值都相同才会判定为重复

2.7 条件查询 (重点)

根据查询条件,对于要查询的行,进行筛选

where 条件查询

2.7.1 比较运算符

SQL中 = 是比较相等,有时候还能作为赋值使用

SQL 把 NULL 视为 false .SQL 那别的值和 NULL 进行运算,结果还是 NULL

会出行无脑 false 的情况

<=> 和 = 唯一的区别, NULL<=>NULL 结果是 true

value BETWEEN a0 AND a1 :看value 的值,是否在 a0,a1 闭区间中****连续的

value IN (option, ...) : 判定value 是否在集合中****离散

like 模糊匹配

2.7.2 逻辑运算符

AND 和 OR的优先级

其实不用特意去记. 可以使用()手动指定优先级

and的优先级大于or

查询英语不及格的同学及英语成绩 ( < 60 )

sql 复制代码
select name,english from exam where english <60;

写的列 和查询条件 并不相关

总分在200分一下的同学

sql 复制代码
select name, english + math + chinese as total from exam 
where english + math + chinese < 200;

前面用 as tatol了,后面不能使用吗? 答案是不可以

sql 复制代码
select name, english + math + chinese as total from exam where tatol < 200;

查询语⽂成绩⼤于80分且英语成绩⼤于80分的同学

sql 复制代码
select name, chinese, english from exam where chinese >80 and english <80;

语文成绩在80,90 分的同及语文成绩

sql 复制代码
select name, chinese from exam where chinese between 80 and 90;

数学成绩是 78 或者 79 或者 98 或者 99 分的同学及数学成绩

sql 复制代码
select name, math from exam where math in (78,79,98,99);

2.7.3 模糊查询

like 搭配通配符

% 代表任意个任意字符

_ 代表一个任意字符

查询所有姓孙的同学

sql 复制代码
select * from exam where name like '孙%';

SQL的模糊查询,执行效率会比较低 实际开发中慎重使用

2.7.4 NULL的查询

查询英语成绩为NULL的记录

sql 复制代码
select * from exam where english is null;

2.8 排序查询

Order by

针对查询结果排序

sql 复制代码
select 列名 from 表名 order by 列名,列名......;

默认是 升序排序. 也可以写 asc 显示指定升序~~ asc可以省略

通过 desc 关键字明确 ,降序排序~

sql 复制代码
select * from exam order by chinese desc;

如果一个 SQL 没有指定 order by, 此时意味着查询结果的顺序,是"未定义的"

查询同学及总分,由⾼到低排序

sql 复制代码
select name,chinese + math +english from exam order by chinese + math +english desc; 

order by 可以使用别名作为排序规则~~

order by 执行顺序是在表达式计算之后的,别名先定义出来了才运用到order by;

2.9分页查询

mysql 的分宜查询,就可以实现 网页中的"分页效果"

sql 复制代码
select 列名 from 表名 where 条件 order by 列名 limit N offset M;

获取到前N条数据. offset 称之为"偏移量" 相当于 "数组下标".

约定一页有三条数据~~

sql 复制代码
select * from exam limit 3 offset 6;
sql 复制代码
select * from exam limit 6,3;

3. Update 修改

updata

sql 复制代码
update 表名 Set 列名;

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

sql 复制代码
update exam set math = 80 where name = '孙悟空';

此处修改的不是"临时表", 而是修改数据库服务器硬盘上的原始数据 ~~

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

sql 复制代码
update exam set math = math + 30 
where chinese is not null and math is not null and english is not null
order by chinese + math + english asc limit 3;

不能写作 math+=30 . sql 中不支持

update也是一个比较危险的操作,使用的时候一定要注意

不加where条件时,会导致全表数据被列新,谨慎操作

4.Delete 删除

sql 复制代码
delete from 表名;

如果不写条件,就会删除所有数据,最终得到一个"空的表"

drop table 连表都没有了

相关推荐
Elastic 中国社区官方博客2 小时前
13.7万人,零人工决策:使用 Elasticsearch 实现智能体驱动的灾害响应系统
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
yuzhiboyouye2 小时前
sql增删改查怎么写?有时会不会有联表查询的增删查改
数据库·sql
jingyu飞鸟2 小时前
openEuler 22.03 LTS SP4安装华为opengauss 22.03 LTS版本数据库,一键复制安装使用,保姆级教程
数据库·华为
IvorySQL2 小时前
【HOW 2026 分论坛演讲】PG/IvorySQL私有云中实践
数据库·人工智能·sql·postgresql
SAP庖丁解码2 小时前
【采购申请的校验——成本中心范围】
数据库
雪的季节3 小时前
HTTP 和 HTTPS 五大核心区别
数据库·http·https
GottdesKrieges3 小时前
OceanBase迁移用户及其权限配置
数据库·oceanbase
就叫_这个吧3 小时前
Java+MySQL+Mybatis+Junit4实现学生信息管理系统
java·mysql·mybatis
OceanBase数据库官方博客3 小时前
新版本 OceanBase seekdb 1.3.0:22倍性能增益,P99抖动小于1.1倍
数据库·oceanbase