✏️✏️✏️今天给各位带来的是关于数据库增删查改基础方面的知识。
清风的CSDN博客
😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流!
动动你们发财的小手,点点关注点点赞!在此谢过啦!哈哈哈!😛😛😛
前言
- CRUD : Create, Retrieve,Update,Delete
- 新增数据
- 查询数据
- 修改数据
- 删除数据
一、新增数据
首先我们创建一张学生表,为后续的新增数据做准备。
create table student(
id int, //身份证号
sn int, //学号
name varchar(20), //姓名
qq_mail varchar(20)); //QQ邮箱
1.1 单行数据-全列插入
1.1.1 语法
insert into 表名 values (值,值,值...);//单行全列插入
1.1.2 案例代码
插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致。
insert into student values (100,10000,'唐三藏',null);
insert into student values (101,10001,'孙悟空','1111');
1.2 单行数据-指定列插入
1.2.1 语法
insert into 表名 (列名,列名...) values (值,值,值...);//单行指定列插入
1.2.2 案例代码
-- 插入一条记录,value_list 数量必须和指定列数量及顺序一致
insert into student (id,name) values (102,'猪悟能');
1.3 多行数据-指定列插入
1.3.1 语法
insert into 表名 (列名,列名...) values (值,值...),(值,值...);//多行全列插入
1.3.2 案例代码
-- 插入两条记录,value_list 数量必须和指定列数量及顺序一致
insert into student (id,sn,name) values
-> (103,20002,'曹孟德'),
-> (104,20003,'孙仲谋');
1.4 多行数据-全列插入
1.4 语法
insert into 表名 values (值,值...),(值,值...);//多行全列插入
1.4.2 案例代码
插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致。
insert into student values
(105,20004,'关云长',null),
(106,20005,'张飞',null),
(107,20006,'武则天',null);
二、查询
创建考试成绩表如下:
create table exam_result (
id int,
name varchar(20),
chinese decimal(3,1),
math decimal(3,1),
english decimal(3,1));
**插入测试数据 **
insert into exam_result (id,name,chinese,math,english) values
(1,'唐三藏',67,98,56),
(2,'孙悟空',87.5,78,77),
(3,'猪悟能',88,98.5,90),
(4,'曹孟德',82,84,67),
(5,'刘玄德',55.5,85,45),
(6,'孙权',70,73,78.5),
(7,'宋公明',75,65,30);
2.1 全列查询
2.1.1 语法
select * from 表名;
2.1.2 案例代码
查询考试成绩表的学生信息
select * from exam_result;
2.2 指定列查询
2.2.1 语法
select 列名,列名... from 表名
2.2.2 案例代码
指定列的顺序不需要按定义表的顺序来,查询学生的姓名,id以及英语成绩
select name,id,english from exam_result;
2.3 查询字段为表达式
查询学生的英语成绩加10分后的学生id和姓名
select id,name, english+10 from exam_result;
**查询学生的总成绩以及学生信息 **
select id, name, chinese + math + english from exam_result;
为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称
**查询学生的总成绩以及学生信息 **
select id, name, chinese + math + english as total from exam_result;
**使用DISTINCT关键字对某列数据进行去重 **
在创建的考试成绩表,可以利用关键字DISTINCT去除:(此表不重复,但不影响测试)
select distinct math from exam_result;
三、排序 ORDER BY
3.1 语法
select 列名,列名... from 表名 order by 列名 排序方式;
//排序方式默认为升序ASC
//降序为DESC
3.2 案例代码
查询学生的英语成绩排名以及学生姓名
select name, english from exam_result order by english;
注意事项:
- 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
- NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
也可以对多个字段进行排序,例如:
查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示
select name,math,english,chinese from exam_result
order by math desc, english, chinese;
四、MySQL关键字查询
4.1 运算符
比较运算符:
运算符说明>,>=,<,<=
大于,大于等于,小于,小于等于
=
等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>
等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=,<>不等于between a0 and a1
范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
in(option...)
如果是 option 中的任意一个,返回 TRUE(1)
is null是空is not null不是空like
模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符
逻辑运算符:
运算符说明and
多个条件必须都为 TRUE(1),结果才是 TRUE(1)
or
任意一个条件为 TRUE(1), 结果为 TRUE(1)
not
条件为 TRUE(1),结果为 FALSE(0)
注意事项
- WHERE条件可以使用表达式,但不能使用别名。
- AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
4.2 案例代码
4.2.1 基本查询 WHERE
-- 查询英语不及格的同学及英语成绩 ( < 60 )
select name,english from exam_result where english < 60;
-- 查询语文成绩好于英语成绩的同学
select name,chinese,english from exam_result where chinese > english;
-- 查询总分在 200 分以下的同学
select name from exam_result where chinese + math + english < 200;
4.2.2 AND 与 OR 查询
-- 查询语文成绩大于80分,且英语成绩大于80分的同学
select name,chinese,english from exam_result where chinese > 80 and english > 80;
-- 查询语文成绩大于80分,或英语成绩大于80分的同学
select name,chinese,english from exam_result where chinese > 80 or english > 80;
4.2.3 范围查询
-- 查询语文成绩在 [80, 90] 分的同学及语文成绩
select name,chinese from exam_result where chinese between 80 and 90;
4.2.4 IN查询
-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
select name,math from exam_result where math in(58,59,98,99);
使用or也可以实现,这里不再赘述。
4.2.5 模糊查询LIKE
-- % 匹配任意多个(包括 0 个)字符
select name from exam_result where name like '孙%';
-- --匹配严格的一个任意字符
select name from exam_result where name like '孙_';
4.2.6 NULL的查询
-- 查询 qq_mail 已知的同学姓名
select name,qq_mail from student where qq_mail is not null;
-- 查询 qq_mail 未知的同学姓名
select name,qq_mail from student where qq_mail is null;
4.2.7 分页查询LIMIT
语法:
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
** 案例:**
按id进行分页,每页三条记录
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;
五、修改 UPDATE
5.1 语法
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
5.2 案例
-- 将孙悟空同学的数学成绩变更为 80 分
update exam_result set math = 80 where name = '孙悟空';
-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
update exam_result set math = 60, chinese = 70 where name = '曹孟德';
-- 将总成绩倒数前三的 3 位同学的数学成绩加上 10 分
update exam_result set math = math + 10 order by chinese + math + english limit 3;
六、删除 DELETE
6.1 语法
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
6.2 案例代码
-- 删除孙悟空同学的考试成绩
delete from exam_result where name = '孙悟空';
-- 删除整张表数据
delete from exam_result;
✨好啦,今天的分享就到这里!
🎉希望各位看官读完文章后,能够有所提升。
✨创作不易,还希望各位大佬支持一下!
👍点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
✏️评论:你的意见是我进步的财富!
版权归原作者 ..清风 所有, 如有侵权,请联系我们删除。