[MySQL]关于表的增删改查

目录

1.插入

1.1单行数据+全列插入

 1.2多行插入,指定列插入

​编辑2.查询

2.1全列查询

2.2指定列查询

3.3查询字段为表达式

 2.4别名

​编辑2.5去重

2.6排序

 2.7条件查询

2.7.1基本查询:

2.7.2 AND 和OR

2.7.3范围查询

 2.7.4模糊查询

 2.7.5分页查询 limit

3.修改

4.删除


1.插入

1.1单行数据+全列插入

我们首先创建一张学生表来做为我们的例子:
[MySQL]关于表的增删改查_第1张图片

表里包含的元素有id,学号,姓名,邮箱;

然后我们进行全列插入

格式为 insert into student values(数据1,数据2,数据3)

[MySQL]关于表的增删改查_第2张图片

 1.2多行插入,指定列插入

数据格式:

Insert into stuent(列名,列名,列名)values(数据,数据,数据,),(数据,数据,数据);

[MySQL]关于表的增删改查_第3张图片2.查询

先创建一个考试成绩表

 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);
 

[MySQL]关于表的增删改查_第4张图片

2.1全列查询

 通常情况下不建议使用select *查询,会造成大量的性能资源使用。

1.查询的列越多,意外着需进行传输的数据越大。

2.可能会影响索引的使用

select *from exam_resule;

[MySQL]关于表的增删改查_第5张图片

2.2指定列查询

指定列的顺序不需要按照定义的时候的顺序

语法格是:

select id,name,chinese from exam_result;

[MySQL]关于表的增删改查_第6张图片

3.3查询字段为表达式

表达式不包含字段

select id,name,10 from exam_result;

[MySQL]关于表的增删改查_第7张图片

表达式包含一个字段

select id  ,name,chinese+10 from exam_result;

[MySQL]关于表的增删改查_第8张图片

表达式包含多个字段:

select id,name,english+chinese+math  from exam_result;

[MySQL]关于表的增删改查_第9张图片

 2.4别名

select id,name ,math+chinese +english as 总分 from exam_result;

[MySQL]关于表的增删改查_第10张图片2.5去重

我们先查询一下math成绩

select math from exam_result;

[MySQL]关于表的增删改查_第11张图片

可以看到98分重复了 我们使用 distnit关键字试试

select distinct math from exam_result;

[MySQL]关于表的增删改查_第12张图片

2.6排序

order by 关键字

desc为降序 默认为升序

[MySQL]关于表的增删改查_第13张图片

降序 desc关键字写到最后面

[MySQL]关于表的增删改查_第14张图片

可以对多个字段排序,排序的优先级随书写顺序

[MySQL]关于表的增删改查_第15张图片

 2.7条件查询

运算符 说明
>, >=, <, <= 大于,大于等于,小于,小于等于
= 等于,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 是 NULL
IS NOT NULL 不是 NULL
LIKE 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字

逻辑运算符:

运算符 说明
AND 多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR 任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT 条件为 TRUE(1),结果为 FALSE(0)

注:
1. WHERE条件可以使用表达式,但不能使用别名。
2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
例子:

2.7.1基本查询:

查询英语成绩不及格的同学

select name,english from exam_result where english < 60;

[MySQL]关于表的增删改查_第16张图片

查询语文成绩好于英语成绩的同学:

select name,chinese,english from exam_result where chinese>english; 

[MySQL]关于表的增删改查_第17张图片查询总分在200以下的学生:

select  name, math+chinese+english as 总分 from exam_result where math+chinese+english < 200;

[MySQL]关于表的增删改查_第18张图片

2.7.2 AND 和OR

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

select name,english,chinese from exam_result where chinese>80 and english >80;

[MySQL]关于表的增删改查_第19张图片

猪悟能同学好厉害hhhh

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

select name , chinese ,english from exam_resut where chinese>80 or english >80;

[MySQL]关于表的增删改查_第20张图片观察一下and和or的优先级(一般情况下如果想要哪个优先级高就用小括号给它加起来);

首先我们先查找全部的同学成绩 select *from exam_result;

[MySQL]关于表的增删改查_第21张图片

select *from exam_result where chinese>80 or math>70 and english>70;

[MySQL]关于表的增删改查_第22张图片

 我们给前面的or 打上括号看看

select * from exam_result where (chinese>80 or math>70) and english >70;

[MySQL]关于表的增删改查_第23张图片可以看到 and 的优先级大于or

2.7.3范围查询

between ...and...

查询语文成绩在80~90之间的同学

select name,chinese from exam_result where chinese between 80 and 90;

[MySQL]关于表的增删改查_第24张图片

使用 and也可以实现

select name,chinese from exam_result where chinese>=80 and chinese<=90;

[MySQL]关于表的增删改查_第25张图片

 2.7.4模糊查询

%匹配多个字符

select name from exam_result where name like '孙%';

[MySQL]关于表的增删改查_第26张图片

_ 匹配一个字符

select name from exam_result where name like '孙_';

[MySQL]关于表的增删改查_第27张图片

 2.7.5分页查询 limit

起始下标为0 

从 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 进行分页,每页 3 条记录,分别显示 第 1、2、3 页

select id ,name from exam_result order by id limit 3 offset 0;

[MySQL]关于表的增删改查_第28张图片

select id ,name from exam_result order by id limit 3 offset 3;

[MySQL]关于表的增删改查_第29张图片

select id ,name from exam_result order by id limit 3 offset 6;

[MySQL]关于表的增删改查_第30张图片

3.修改

update from table_name set colume=expr,[colume = expr] [where...] [order by ...] [limit...]

 把孙悟空同学的数学成绩改为80分

update exam_result set math = 80 where name='孙悟空';

[MySQL]关于表的增删改查_第31张图片

将曹孟德的数学成绩改为60,语文成绩改为70

update exam_result set math =60 ,chinese =70 where name ='曹孟德';

[MySQL]关于表的增删改查_第32张图片

将总成绩倒数后三名的数学成绩加上10分

update exam_result set math = math+10 order by math+chinese+english limit 3;

[MySQL]关于表的增删改查_第33张图片


将所有同学的语文成绩变成原来的两倍

首先是这样的

[MySQL]关于表的增删改查_第34张图片

update exam_result set chinese = chinese *2 ;

[MySQL]关于表的增删改查_第35张图片

4.删除

delete from 表名 where... orderby...limit...

案例

删除孙悟空同学的考试成绩

detele from exam_result where name = '孙悟空';

[MySQL]关于表的增删改查_第36张图片

删除整张表

drop table if exists for_delete;首先判断库里面有没有这张表,有的话就删了

create table for_delete(id int ,name varchar(20)); 创建表

insert into for_delete (name) values('A'),('B'),('C');加入数据

select *from for_delete; 查看表

delete from for_delete; 删除一整张表

selete *from for_delete ;再次查看表,会发现为空了 

[MySQL]关于表的增删改查_第37张图片

你可能感兴趣的:(mysql,数据库)