MySQL:表的增删查改——CRUD(二)

devtools/2024/11/15 6:08:22/

本篇博客接上篇MySQL:表的增删查改——CRUD(一)-CSDN博客


目录

1、查询(Retrieve)

1.1 条件查询:WHERE

1.1.1 比较运算符

1.1.2 逻辑运算符

1.1.3 查询语句的执行顺序

1.1.3 SQL代码示例

1.2 分页查询:LIMIT

2、修改(Update)

2.1 SQL代码示例

3、删除(Delete)

3.1 delete操作注意事项

3.2 SQL代码示例


1、查询(Retrieve

1.1 条件查询:WHERE

语法:select 列名/表达式 from 表名 where 列名/表达式 运算符 条件

1.1.1 比较运算符

  • = 号,既可用来比较是否相等,可以用来赋值;但是,NULL比较特殊,不可使用 = 号来比较是否为NULL。
  • 若要比较值是否为NULL,需要 <=> 号,或者 IS NULL (是NULL返回1表示true,否则返回0表示false)与 IS NOT NULL(不是NULL返回true(1),否则返回false(0))。
  • != 和 <> 均用来判断两者是否不相等。
  • BETWEEN a0 AND a1,表示范围为[a0,a1],左闭右闭。
  • IN (a1,a2,...) 若存在小括号中的值则返回true(1),否则返回false(0)。
  • LIKE 表示模糊匹配。%表示0个或任意多个字符,_ 表示任意一个字符,_ _ 表示任意两个字符,.......

1.1.2 逻辑运算符

这里的逻辑运算符与Java、Cpp中的运算符含义相同。

  • AND 相当于 &&
  • OR 相当于 ||
  • NOT 相当于 !

 逻辑运算符之间具有优先级关系,其中NOT(逻辑非)> AND(逻辑与)> OR(逻辑或),但不建议特意记,建议编码时使用小括号手动指定优先级,提高可读性。

1.1.3 查询语句的执行顺序

查询时可配合去重、排序、条件一起使用,但是在where子句中,我们对于列名/表达式不能使用别名给出条件这跟SQL语句的执行顺序有关。

当我们将别名换成表达式后就能够正常执行:

但是我们看到,order子句可以使用别名,其实这跟SQL语句的执行顺序有关:

  1. 通过from找到要查的表
  2. 通过where子句筛选出符合条件的数据行(此时还没有完成select子句中别名的定义,不能使用别名)
  3. 通过select子句抽选出指定的列或生成相应的表达式(此时才完成别名的定义)
  4. 通过order子句排序(此时已完成select子句中别名的定义,可以使用别名)

1.1.3 SQL代码示例

sql">-- 基本查询
-- 查询英语不及格的同学及英语成绩
SELECT name,english FROM exam WHERE english < 60;
-- 查询语文成绩好于英语成绩的同学
SELECT name,chinese,english FROM exam WHERE chinese > english;
-- 查询总分在 200 分以下的同学
SELECT name,chinese+math+english 总分 FROM exam WHERE chinese+math+english < 200;-- AND与OR
-- 查询语文成绩大于80分,且英语成绩大于80分的同学
SELECT name,chinese,english FROM exam WHERE chinese > 80 AND english > 80;
-- 查询语文成绩大于80分,或英语成绩大于80分的同学
SELECT name,chinese,english FROM exam WHERE chinese > 80 OR english > 80;-- 范围查询
-- 查询语文成绩在 [80, 90] 分的同学及语文成绩
SELECT name,chinese FROM exam WHERE chinese BETWEEN 80 AND 90;
SELECT name,chinese FROM exam WHERE 80 <= chinese AND chinese <= 90;
-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
SELECT name,math FROM exam WHERE math IN (58,59,98,99);
SELECT name,math FROM exam WHERE math = 58 OR math = 59 OR math = 98 OR math = 99;-- 模糊查询:LIKE
-- % 匹配任意多个(包括0个)字符
SELECT * FROM exam WHERE name LIKE '孙%';
-- _ 匹配严格的一个任意字符
SELECT * FROM exam WHERE name LIKE '孙_';-- NULL 的查询
-- IS [NOT] NULL
SELECT * FROM exam WHERE id IS NULL;
SELECT * FROM exam WHERE id <=> NULL;
SELECT * FROM exam WHERE id IS NOT NULL;

1.2 分页查询:LIMIT

我们之前所学的查询都是不限制记录条数的查询,其实这样的查询是非常危险的,因为在生产环境中,表中存储着大量的数据,不限制条数的查询会造成占用大量资源,非常的不安全。

分页查询就是能够限制查询的条数,能够有效的减少数据库服务器的压力,分页查询的使用也是非常的多,我们也常常见到分页查询:

分页查询语法:

分页查询的同样可以配合顺序、条件查询一起使用,其前面的语法与我们之前所学查询语法相同,知识在结尾处加上LIMIT关键字,表示限制查询的条数。

表中记录的起始下标为0。

分页查询共有3种语法规则:

  • SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n; 这里LIMIT 后的n指:(默认)从第0行开始查询,共查询n条记录。
  • SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n; 这里LIMIT 后的s,n指:从第s行开始查询,共查询n条记录。
  • SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;这里LIMIT 后的n指:共查询n条记录。这里OFFSET 后的s指:从第s行开始查询。

示例:

  • 示例1:
  • 示例2:

如果每页都有相同的查询条数,则当前页数查询的起始行数s = (当前页数-1)*每页查询的记录数。

或者记忆为:s += 每页查询的记录数。

sql">-- 每页查询两条数据
-- 查询第1页
select * from exam order by id asc limit 0,2;
-- 查询第2页
select * from exam order by id asc limit 2,2;
-- 查询第3页
select * from exam order by id asc limit 4,2;
-- 查询第4页
select * from exam order by id asc limit 6,2;

2、新增(Create)

2.1 插入查询结果

到这里,我们已经掌握了简单查询的操作,这里讲一种新的插入方法——将查询到的数据插入到表中,即将旧表中的数据导入(复制)到一张新表中。

语法:insert into 新表名 列名 select 旧表中的列名 from 旧表名;

注意:insert语句中新表的列一定要和select子句中旧表的列相对应。


3、修改(Update)

update 表名 set 列名 = 新值  [, 列名 = 新值 ... ] [where ... ] [order ... ] [limit ... ];

  • 一条update语句可以修改多个属性,多个属性间使用逗号隔开
  • where为修改条件,满足条件的记录才可以被修改
  • order子句的作用是排序,limit子句的作用是限制修改条数即修改多少条。
  • order和limit的配合使用能够达到修改排名前多少个记录的作用。

注意:

  1. 使用update修改数据时,一定要加where子句来控制修改条件,否则修改的将是整张表中所有的记录,这是非常危险的操作!!!
  2. 如果符合where条件的有多条记录,且没有使用limit限制修改的条数,则所有符合条件的记录都将被修改!!!

3.1 SQL代码示例

注意:

如果要让数学成绩减少30分,则只能这样书写:math = math - 30;而不能这样书写:math -= 30;

sql">-- 将孙悟空同学的数学成绩变更为80分
UPDATE exam SET math = 80 WHERE NAME = '孙悟空' ;
-- 将曹孟德同学的数学成绩变更为60分,语文成绩变更为70分
UPDATE exam SET math = 60,chinese = 70 WHERE name = '曹孟德';
-- 将数学成绩前三名的同学的数学分数减30分
UPDATE exam SET math = math - 30 ORDER BY math DESC LIMIT 3;
-- 将语文成绩低于50分的同学的语文分数变为原来的2倍
UPDATE exam SET chinese = chinese*2 WHERE chinese < 50;

4、删除(Delete)

delete from 表名 where条件 order by 列名 asc|desc limit n;

4.1 delete操作注意事项

使用删除操作时一定要加上where条件,否则整张表中的数据都将被删除(清空),这是一个非常危险的操作!!!

在生产环境中,我们很少使用delete操作来删除数据。

如果要删除一个数据,我们常常使用''伪删除'':一般在表中添加一个deleteState字段来做标记,0表示正常(未删除),1代表已删除,若要删除数据则使用update来更新deleteState字段,来实现删除功能,所以,这条被删除的数据仍然存在于数据库中,降低数据误删的风险。

4.2 SQL代码示例

删除英语成绩倒数前三的同学的所有考试成绩:

sql">-- 删除英语成绩倒数前三的同学的所有考试成绩
delete from exam order by english asc limit 3;

END


http://www.ppmy.cn/devtools/91533.html

相关文章

2015款到18款奔驰GLC升级为2021款的HU6主机后,实现了触摸屏人机交互和Carplay功能

奔驰GLC是北京奔驰生产的一款中型SUV。有车主将2015款奔驰GLC升级为2021款的HU6主机后&#xff0c;实现了触摸屏人机交互和Carplay功能。该车主分享了使用体验&#xff1a; • Carplay功能&#xff1a;可以直接在车机大屏幕上显示导航、音乐和电话信息&#xff0c;让用户在开车…

思码逸 信通院联合发布:《软件研发效能基准报告》

页数&#xff1a;47页 免费下载&#xff1a;https://fs80.cn/go7exq 本文共计6000字&#xff0c;建议阅读时间&#xff1a;5-10分钟。 阅读本文你将收获&#xff1a; 研发效能基准指标 研发效能基准指标数据&#xff1a;交付速率、交付质量、交付能力 研发效能综合分析&…

Unity 在Editor下保存对Text组件的文本的修改

Unity 在Editor下保存对Text组件的文本的修改 /****************************************************文件&#xff1a;TimeStampForText.cs作者&#xff1a;lenovo邮箱: 日期&#xff1a;2024/8/8 1:9:21功能&#xff1a; *************************************************…

医院预约挂号小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;医生管理&#xff0c;科室分类管理&#xff0c;医生信息管理&#xff0c;预约挂号管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;医生信息&#…

Unity 使用字符串更改Text指定文字颜色、大小、换行、透明

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、使用字符串改变文字属性的方法&#xff08;一&#xff09;修改颜色&#xff08;二&#xff09;修改大小&#xff08;三&#xff09;换行&#xff08;四&…

oracle 并行parallel的插入insert用法

在Oracle数据库中&#xff0c;INSERT 语句确实可以使用 Parallel&#xff08;并行&#xff09;功能。通过并行插入&#xff0c;可以在插入数据时同时利用多个并行操作进程来执行插入操作&#xff0c;从而显著提高插入操作的速度和效率。这对于需要处理大量数据插入的场景尤为有…

解决vscode连接远程服务器时一直要求输入密码的问题

今天在用vscode连接我的Linux服务器时&#xff0c;输入密码后并没有成功登录&#xff0c;而是不断的弹出密码输入框。如果有遇到相同问题的同学可以试试下面的方法 1.点击查看&#xff0c;打开命令面板 2.终止服务器 选中自己的服务器&#xff0c;然后会让你输入密码 3.重新登…

对 Go 语言中循环屏障 CyclicBarrier 的理解

同步屏障 (Barrier) 是并发编程中的一种同步方法。对于一组 goroutine ,程序中的一个同步屏障意味着任何 goroutine 执行到此后都必须等待,直到所有的 goroutine 都达到此点才可继续执行下文。 Barrier 无论是翻译成屏障、障碍还是栅栏,都很形象,就是一道拦截坝,拦截一组对…