首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >数据库造神计划第五天---增删改查(CRUD)(1)

数据库造神计划第五天---增删改查(CRUD)(1)

作者头像
寻星探路
发布2025-12-17 19:02:08
发布2025-12-17 19:02:08
1890
举报
文章被收录于专栏:CSDN博客CSDN博客

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

• Create(创建)

• Retrieve(读取)

• Update(更新)

• Delete(删除)

作为Java后端开发,未来的主要工作之一就是CRUD

一、Create 新增

1、语法

代码语言:javascript
复制
INSERT [INTO] table_name
    [(column [, column] ...)]
VALUES 
    (value_list) [, (value_list)] ...

value_list: value, [, value] ...

2、示例

代码语言:javascript
复制
# 创建⼀个⽤于演⽰的表
create table users (
    id bigint,
    name varchar(20) comment '⽤户名'
);
2.1单行数据全列插入

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

代码语言:javascript
复制
# 插入第一条记录
insert into users values (1, '张三');

# 插入第二条记录
insert into users values (2, '李四');

#注:

2.2单行数据指定列插入

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

代码语言:javascript
复制
# 指定了具体要插⼊的列
insert into users(id, name) values (3, '王五');
2.3多行数据指定列插入

在⼀条INSERT语句中也可以指定多个value_list,实现⼀次插入多行数据

代码语言:javascript
复制
# 每个value_list表⽰⼀⾏数据
insert into users(id, name) values (4, '赵六'), (5, '钱七');

二、Retrieve 检索

1、语法

代码语言:javascript
复制
SELECT
   [DISTINCT]
   select_expr [, select_expr] ...
   [FROM table_references]
   [WHERE where_condition]
   [GROUP BY {col_name | expr}, ...]
   [HAVING where_condition]
   [ORDER BY {col_name | expr } [ASC | DESC], ... ]
   [LIMIT {[offset,] row_count | row_count OFFSET offset}]

2、示例

2.1构造数据
代码语言:javascript
复制
#创建表结构
CREATE TABLE exam (
    id BIGINT,
    name VARCHAR(20) COMMENT '同学姓名',
    chinese float COMMENT '语⽂成绩',
    math float COMMENT '数学成绩',
    english float COMMENT '英语成绩'
);

#插⼊测试数据 
INSERT INTO exam (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);

3、Select

3.1全列查询

查询所有记录

代码语言:javascript
复制
# 使⽤ * 可以查询表中所有列的值
select * from exam;

#注:上述属于数据库的危险操作!!!在公司中,会有很多的环境,同样的代码不同的环境运行的结果就可能不同,所以select * 在生产环境上执行很可能出现问题!!!

3.2指定列查询

查询所有⼈的编号、姓名和语⽂成绩

代码语言:javascript
复制
select id,name,chinese from exam;

在select后面的查询列表中指定希望查询的列,可以是一个也可以是多个,中间⽤逗号隔开指定列的顺序与表结构中的列的顺序无关

3.3查询字段为表达式
3.3.1常量表达式
代码语言:javascript
复制
# 表达式本⾝就是⼀个常数
select id,name,10 from exam;
代码语言:javascript
复制
# 也可以是常量的运算
select id,name,10+1 from exam;
3.3.2把所有学生的语文成绩加10分
代码语言:javascript
复制
# 表达式中包含⼀个字段
select id,name,chinese+10 from exam;
3.3.3计算所有学生语文、数学和英语成绩的总分
代码语言:javascript
复制
 # 表达式包含多个字段
select id, name, chinese + math + english  from exam;
3.4为查询结果指定别名
3.4.1语法
代码语言:javascript
复制
 SELECT column [AS] alias_name [, ...] FROM table_name;

AS 可以省略,别名如果包含空格必须用单引号包裹

3.4.2示例

为总分这⼀列指定别名

代码语言:javascript
复制
#为总分这⼀列指定别名
select id, name, chinese + math + english as 总分 from exam;

#注:

(1)不仅可以给表达式起别名,还可以给表起别名!!!

(2)起别名是为了增强代码的可读性(代码的可读性>代码的高效执行)

3.5结果去重查询

行与行之间去重(记录和记录之间去重)

(1)查询当前所有的数学成绩

代码语言:javascript
复制
# 通过观察有两条98的记录
select math from exam;

(2)在结果集中去除重复记录,可以使用DISTINCT

代码语言:javascript
复制
# 去重查询
select distinct math from exam;

#注:

(1)使用DISCTINCT去重时,只有查询列表中所有列的值都相同才会判定为重复

(2)查询时不加限制条件会返回表中所有结果,如果表中的数据量过大,会把服务器的资源消耗殆尽

(3)在生产环境不要使不加限制条件的查询

4、where条件查询

查询的时候,指定条件,符合条件的行被查询出来,不符合条件的就跳过~~

4.1语法
代码语言:javascript
复制
SELECT
 select_expr [, select_expr] ... [FROM table_references]
 WHERE where_condition
4.2比较运算符

#注:

(1)NULL可以参与运算,但是运算结果都是NULL

(2)(NULL==NULL=>NULL=>false)(NULL<=>NULL=>true)

(3)我们谈到区间,大多数时候都是“前闭后开”,但是between and是“前闭后闭”!!!

4.3逻辑运算符
4.4示例
4.4.1基本查询

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

代码语言:javascript
复制
select name, english from exam where english < 60;

条件查询执行过程: 1)遍历这个表的每一行数据~~ 2)把这一行数据, 代入到条件中 3)如果条件成立(true),此时把这个行加入到结果集合中,如果条件不成立(false),这一行直接跳过 4)当完成所有的遍历过程之后,此时得到了结果集合,还需要根据 select 指定的列/表达式/别名/去重操作 5)再针对结果集合做进一步处理~~

查询语文成绩高于英语成绩的同学

代码语言:javascript
复制
select name, chinese, english from exam where chinese > english;

总分在200分以下的同学

代码语言:javascript
复制
select name, chinese + math + english as 总分 from exam where chinese + math + english < 200;
4.4.2AND和OR

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

代码语言:javascript
复制
select * from exam where chinese > 80 and english > 80;

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

代码语言:javascript
复制
select * from exam where chinese > 80 OR english > 80;

观察AND和OR的优先级

代码语言:javascript
复制
select * from exam where chinese > 80 or math > 70 and english > 70;
代码语言:javascript
复制
select * from exam where (chinese > 80 or math > 70) and english > 70;

由此可见,and优先级要更高一些,但是和前面一样,尽量加括号,不要去记优先级

4.4.3范围查询

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

代码语言:javascript
复制
# 使⽤BETWEEN AND 实现
select name, chinese from exam where chinese between 80 and 90;
# 使⽤ AND 实现
select name, chinese from exam where chinese >= 80 and chinese <= 90;

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

代码语言:javascript
复制
# 使⽤IN实现
select name, math from exam where math in (78, 79, 98, 99);
# 使⽤OR实现
select name, math from exam where math = 78 or math = 79 or math = 98 or math = 99;

#注:

between and 描述的是连续的区间~~ in 描述的是离散的集合~~

4.4.4模糊查询

%:0个或者任意个任意字符 _:1 个任意字符

查询所有姓孙的同学

代码语言:javascript
复制
select * from exam where name like '孙%';

查询姓孙且姓名共有两个字同学

代码语言:javascript
复制
 select * from exam where name like '孙_';

#注:SQL 使用 like 进行模糊匹配, 通常是一个"低效操作"

SQL 的模糊匹配功能其实是非常弱的~~ 编程圈子中,对于模糊匹配, 有一套成熟的解决方案,正则表达式~~

例:

4.4.5NULL的查询

构造数据

代码语言:javascript
复制
 # 写⼊⼀条数据,英语成绩为NULL
 insert into exam values (8, '张⻜', 27, 0, NULL);

查询英语成绩为NULL的记录

查询英语成绩不为NULL的记录

代码语言:javascript
复制
 # 使⽤is not null
select * from exam where english is not null;

NULL与其他值进⾏运算结果为NULL

代码语言:javascript
复制
 # 观察结果中的总分
select name, chinese + math + english as 总分 from exam;

#注:

(1)WHERE条件中可以使用表达式,但不能使用别名

(2)AND的优先级高于OR,在同时使用时,建议使用小括号()包裹优先执行的部分

(3)过滤NULL时不要使用等于号(=)与不等于号(!=,<>)

(4)NULL与任何值运算结果都为NULL

由于内容较多,会分为多篇讲解,预知后续内容,请看后续博客!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Create 新增
    • 1、语法
    • 2、示例
      • 2.1单行数据全列插入
      • 2.2单行数据指定列插入
      • 2.3多行数据指定列插入
  • 二、Retrieve 检索
    • 1、语法
    • 2、示例
      • 2.1构造数据
    • 3、Select
      • 3.1全列查询
      • 3.2指定列查询
      • 3.3查询字段为表达式
      • 3.4为查询结果指定别名
      • 3.5结果去重查询
    • 4、where条件查询
      • 4.1语法
      • 4.2比较运算符
      • 4.3逻辑运算符
      • 4.4示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档