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

🔥个人主页: 寻星探路

🎬作者简介:Java研发方向学习者

📖个人专栏:《从青铜到王者,就差这讲数据结构!!!》、** 《JAVA(SE)----如此简单!!!》 、《数据库那些事!!!》**

⭐️人生格言:没有人生来就会编程,但我生来倔强!!!



目录

[一、Create 新增](#一、Create 新增)

1、语法

2、示例

2.1单行数据全列插入

2.2单行数据指定列插入

2.3多行数据指定列插入

[二、Retrieve 检索](#二、Retrieve 检索)

1、语法

2、示例

2.1构造数据

3、Select

3.1全列查询

3.2指定列查询

3.3查询字段为表达式

3.3.1常量表达式

3.3.2把所有学生的语文成绩加10分

3.3.3计算所有学生语文、数学和英语成绩的总分

3.4为查询结果指定别名

3.4.1语法

3.4.2示例

3.5结果去重查询

4、where条件查询

4.1语法

4.2比较运算符

4.3逻辑运算符

4.4示例

4.4.1基本查询

4.4.2AND和OR

4.4.3范围查询

4.4.4模糊查询

4.4.5NULL的查询


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

• Create(创建)

• Retrieve(读取)

• Update(更新)

• Delete(删除)

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

一、Create 新增

1、语法

sql 复制代码
INSERT [INTO] table_name
    [(column [, column] ...)]
VALUES 
    (value_list) [, (value_list)] ...

value_list: value, [, value] ...

2、示例

sql 复制代码
# 创建⼀个⽤于演⽰的表
create table users (
    id bigint,
    name varchar(20) comment '⽤户名'
);

2.1单行数据全列插入

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

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

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

#注:

2.2单行数据指定列插入

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

sql 复制代码
# 指定了具体要插⼊的列
insert into users(id, name) values (3, '王五');

2.3多行数据指定列插入

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

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

二、Retrieve 检索

1、语法

sql 复制代码
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构造数据

sql 复制代码
#创建表结构
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全列查询

查询所有记录

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

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

3.2指定列查询

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

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

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

3.3查询字段为表达式

3.3.1常量表达式
sql 复制代码
# 表达式本⾝就是⼀个常数
select id,name,10 from exam;
sql 复制代码
# 也可以是常量的运算
select id,name,10+1 from exam;
3.3.2把所有学生的语文成绩加10分
sql 复制代码
# 表达式中包含⼀个字段
select id,name,chinese+10 from exam;
3.3.3计算所有学生语文、数学和英语成绩的总分
sql 复制代码
 # 表达式包含多个字段
select id, name, chinese + math + english  from exam;

3.4为查询结果指定别名

3.4.1语法
sql 复制代码
 SELECT column [AS] alias_name [, ...] FROM table_name;

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

3.4.2示例

为总分这⼀列指定别名

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

#注:

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

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

3.5结果去重查询

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

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

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

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

sql 复制代码
# 去重查询
select distinct math from exam;

#注:

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

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

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

4、where条件查询

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

4.1语法

sql 复制代码
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)

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

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

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

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

总分在200分以下的同学

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

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

sql 复制代码
select * from exam where chinese > 80 and english > 80;

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

sql 复制代码
select * from exam where chinese > 80 OR english > 80;

观察AND和OR的优先级

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

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

4.4.3范围查询

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

sql 复制代码
# 使⽤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分的同学及数学成绩

sql 复制代码
# 使⽤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 个任意字符

查询所有姓孙的同学

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

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

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

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

SQL 的模糊匹配功能其实是非常弱的~~

编程圈子中,对于模糊匹配, 有一套成熟的解决方案,正则表达式~~

例:

4.4.5NULL的查询

构造数据

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

查询英语成绩为NULL的记录

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

sql 复制代码
 # 使⽤is not null
select * from exam where english is not null;

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

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

#注:

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

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

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

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

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

相关推荐
BD_Marathon9 分钟前
Hive初始化元数据库时报错:Unknown version specified for initialization: 3.1.0
数据库·hive·hadoop
ArabySide17 分钟前
【Spring Boot】事务的回滚、传播与常见问题
数据库·spring boot
q***575021 分钟前
Redis服务安装自启动(Windows版)
数据库·windows·redis
Databend22 分钟前
DATA AI Databend Meetup 2025上海站邀您共话未来
数据库
合作小小程序员小小店1 小时前
web网页开发,在线%宠物销售%系统,基于Idea,html,css,jQuery,java,ssh,mysql。
java·前端·数据库·mysql·jdk·intellij-idea·宠物
不知更鸟1 小时前
Django 的配置文件 INSTALLED_APPS
数据库·sqlite
合作小小程序员小小店1 小时前
web网页开发,在线%物流配送管理%系统,基于Idea,html,css,jQuery,java,ssh,mysql。
java·前端·css·数据库·jdk·html·intellij-idea
2501_941142931 小时前
基于区块链的数字身份管理:探索安全与隐私的未来
网络·数据库·人工智能
LoneEon2 小时前
Ubuntu 上搭建 Redis 3 节点集群(6 实例:3主3从)
数据库·redis·缓存
chxii2 小时前
在 Spring Boot 中,MyBatis 的“自动提交”行为解析
java·数据库·mybatis