0


一文带你拿下MySQL之增删查改(基础)

✏️✏️✏️今天给各位带来的是关于数据库增删查改基础方面的知识。

清风的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;


✨好啦,今天的分享就到这里!

🎉希望各位看官读完文章后,能够有所提升。

✨创作不易,还希望各位大佬支持一下!

👍点赞,你的认可是我创作的动力!

⭐收藏,你的青睐是我努力的方向!

✏️评论:你的意见是我进步的财富!


本文转载自: https://blog.csdn.net/m0_73920844/article/details/134546444
版权归原作者 ..清风 所有, 如有侵权,请联系我们删除。

“一文带你拿下MySQL之增删查改(基础)”的评论:

还没有评论