MySQL中表的增删改查

目录

一、CRUD

二、新增(Create)        

(1)语法

(2)单行数据+全列插入

(3)多行数据+指定列插入

三、查询(Retrieve)

(1)语法

(2)全列查询

(3)指定列查询

(4)查询字段为表达式

        1、表达式不包含字段:

        2、表达式包含一个字段

       表结构如下:

        3、表达式包含多个字段

(5)别名

(6)去重:DISTINCT        

(7)排序:ORDER BY

1、语法:

2、升序

3、降序

4、使用表达式及别名排序

5、可以对多个优先级进行排序,排序优先级随书写顺序

(8)条件查询:WHERE

 1、比较运算符

2、逻辑运算符

3、基本查询:

4、AND和OR:

5、范围查询

        (1) BETWEEN ... AND

        (2)IN

6、模糊查询:LIKE

7、NULL的查询:IS [NOT] NULL        

8、分页查询:LIMIT

四、修改(Update)

案例:

-- 将孙悟空同学的数学成绩变更为 80 分

-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分

-- 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分

-- 将所有同学的语文成绩更新为原来的 2 倍

五、删除(Delete)

案例:

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

-- 删除整张表数据

六、内容重点总结

新增​编辑

查询​编辑

修改​编辑

删除​编辑

都看到这了,点个赞再走吧,谢谢谢谢谢!!!


一、CRUD

注释:在SQL中可以使用“--空格+描述”来表示注释说明
CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写
 


二、新增(Create)        

已有的表结构和表数据:

MySQL中表的增删改查_第1张图片

(1)语法

INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...

 

(2)单行数据+全列插入

语法:insert into 表名 values(要插入的数据, ...)

注意:插入的数据顺序要和表结构相同,不然插入会失败

代码展示:

insert into books values('数学', '张三', 6.66, '数学类');
insert into books values('英语', '李四', 8.88, NULL);

结果如下:

MySQL中表的增删改查_第2张图片

(3)多行数据+指定列插入

语法:insert into 表名 (指定的列名, ...) values(指定列名数据)

代码展示

insert into books (name, price, sort) values('语文', 5.55, '语文类'), ('物理', 7.77, '物理类');

结果如下:

MySQL中表的增删改查_第3张图片


三、查询(Retrieve)

(1)语法

SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...

 

(2)全列查询

注意:select查询操作的全都是临时表,不会改变原本的数据

语法:select * from 表名

代码展示:

select * from books;

结果如下:

MySQL中表的增删改查_第4张图片

注意:通常情况下不建议使用 * 进行全列查询
-- 1. 查询的列越多,意味着需要传输的数据量越大;(要处理的信息太多,服务器可能会堵塞,大量的硬盘IO和网络IO就可能把硬盘或者网卡的宽带给吃满,一旦宽带吃满了,此时服务器就无法正常响应其他的客户端的请求了,在其他的客户端视野中,就会认为服务器挂了)
-- 2. 可能会影响到索引的使用

(3)指定列查询

语法:select 指定的列名,... from 表名

代码展示:

select name, author, price from books;

结果如下:

MySQL中表的增删改查_第5张图片

注意:指定列查询可以不按这个表的列顺序查询,如图

MySQL中表的增删改查_第6张图片

(4)查询字段为表达式

        1、表达式不包含字段:

语法:select 表达式, ... from books

代码演示:

 select name, price, 10 from books;

结果如下

MySQL中表的增删改查_第7张图片

因为没有10,所以会创建一个字段10,下面都放10

        2、表达式包含一个字段

语法:select 含有一个字段的表达式, ... froms 表名

代码演示:

select name, author, price + 10 from books;

结果如下:

MySQL中表的增删改查_第8张图片

       表结构如下:

MySQL中表的增删改查_第9张图片

        3、表达式包含多个字段

语法:select 含有多个字段的表达式,... from 表名

整型数据代码演示:

 select name, chinese + math + english from report;

结果如下:

MySQL中表的增删改查_第10张图片

不是整型数据代码演示:

select price, name + author + sort from books;

结果如下:

MySQL中表的增删改查_第11张图片

可以看到,表达式包含多行字段,有只要有NULL都为NULL,字符串相加等于0的现象

(5)别名

语法:select 列名,... as 别名 from report

注意(as可以不加,但是加上更好,容易区分)

代码演示:

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

结果如下:

MySQL中表的增删改查_第12张图片

(6)去重:DISTINCT        

现有的表:

MySQL中表的增删改查_第13张图片

语法:select distinct 列名,... from 表名

代码展示:

 select distinct math from exam_result;

结果如下:

MySQL中表的增删改查_第14张图片

(7)排序:ORDER BY

1、语法:

-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];

 

2、升序

语法:select * (或者其他列名也可以) from 表名 order by 列名

代码展示:

 select * from exam_result order by math;

结果如下:

MySQL中表的增删改查_第15张图片

3、降序

语法:select * (或者其他列名也可以) from 表名 order by 列名 desc

代码展示:

select * from exam_result order by math desc;

结果如下:

MySQL中表的增删改查_第16张图片

4、使用表达式及别名排序

语法:select 列名, 表达式 from 表名 order by 表达式;

代码展示:

 select name, math + chinese + english as total from exam_result order by math + chinese + english;

结果如下:

MySQL中表的增删改查_第17张图片

注意:

MySQL中表的增删改查_第18张图片

这里order by后面可以使用别名

5、可以对多个优先级进行排序,排序优先级随书写顺序

语法:select 要查询的列 exam_result order by 列名,列名...;

代码演示:

 select * from exam_result order by math, english;

结果如下:

MySQL中表的增删改查_第19张图片

(8)条件查询:WHERE

注意:where条件可以用表达式,但不可以用别名

 1、比较运算符

MySQL中表的增删改查_第20张图片

2、逻辑运算符

MySQL中表的增删改查_第21张图片

注意:1. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

           2. WHERE条件可以使用表达式,但不能使用别名

如图示例:

MySQL中表的增删改查_第22张图片

                sql语句的执行顺序:

                第一步:取出一条记录(遍历表)

                第二步:把记录带入条件带入条件,判断是否满足

                第三步:如果条件满足,再把select指定的列取出来,并进行一些表达式运算

MySQL中表的增删改查_第23张图片

所以条件查询的where后面不能用别名

3、基本查询:

查询英语成绩大于70分的同学:

代码如下:

 select name, english from exam_result where english > 70;

结果如下:

MySQL中表的增删改查_第24张图片

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

代码如下:

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

结果如下:

MySQL中表的增删改查_第25张图片

查询总成绩小于200的同学:

代码如下:

 select name, chinese + math + english from exam_result where (chinese + math + english) < 200;

结果如下:

MySQL中表的增删改查_第26张图片

4、AND和OR:

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

代码如下:

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

结果如下:

MySQL中表的增删改查_第27张图片

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

代码如下:

 select name, chinese, english from exam_result where (chinese > 80) or (english > 80);

结果如下:

MySQL中表的增删改查_第28张图片

注意:and优先级高于or,在使用的时候,有需要可以用括号括起来

5、范围查询

        (1) BETWEEN ... AND

        代码展示:

select * from exam_result where chinese between 80 and 90;

        结果展示:

MySQL中表的增删改查_第29张图片
     这里用and也可以实现

代码:

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

        (2)IN

代码如下:

 select name, math from exam_result where math in(58, 59, 98, 99);

结果展示:

MySQL中表的增删改查_第30张图片

这里也可以用or

代码:

select name, math from exam_result where math = 58 or math = 59 or math = 98 or math = 99;

6、模糊查询:LIKE

        % 匹配任意多个(包括 0 个)字符
        _ 匹配严格的一个任意字符


代码展示:

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

结果如下:

MySQL中表的增删改查_第31张图片

代码展示:

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

结果如下:

MySQL中表的增删改查_第32张图片

注意:%也可以这样使用:%孙,就是以“孙”结尾的字段;%孙%,只要包含“孙”的字段

        _也可以这样使用:_孙,就是前面只有一个字符,结尾带“孙”的字段,下划线_也可以使用多个。

7、NULL的查询:IS [NOT] NULL        

判断表里面某个列是否为NULL,或者不是NULL

代码如下:

select name from exam_result where name is not null;

结果如下:

MySQL中表的增删改查_第33张图片

代码如下:

select name from exam_result where name is NULL;

结果如下:

MySQL中表的增删改查_第34张图片

8、分页查询: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;
 

从 0 开始,筛选 3 条结果

代码展示:

select * from exam_result limit 3;

结果如下:

MySQL中表的增删改查_第35张图片

从0开始,筛选3条记录,按 id 进行分页,顺序

代码展示:

select * from exam_result limit 3;

结果如下:

MySQL中表的增删改查_第36张图片

从3开始,筛选3条记录,按id进行分页,顺序

代码展示:

 select * from exam_result order by id limit 3 offset 3;

结果如下:

MySQL中表的增删改查_第37张图片


四、修改(Update)
 

语法:

UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]

 

案例:
 

-- 将孙悟空同学的数学成绩变更为 80 分

语法:

update 表名 set 要修改的列名 = 要修改的值 where 列名 = 要指定修改的列里的值

代码如下:

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

结果如下:

MySQL中表的增删改查_第38张图片

-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分

代码如下:

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

结果如下:

MySQL中表的增删改查_第39张图片


-- 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分

代码如下:

结果如下:


-- 将所有同学的语文成绩更新为原来的 2 倍

代码如下:

 update exam_result set chinese = chinese * 2;

结果如下:

MySQL中表的增删改查_第40张图片


五、删除(Delete)

语法:

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
 

案例:
 

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

代码如下:

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

结果如下:

MySQL中表的增删改查_第41张图片


-- 删除整张表数据

准备一张表,如下:

MySQL中表的增删改查_第42张图片

代码如下:

 delete from for_delete;

结果如下:

MySQL中表的增删改查_第43张图片


六、内容重点总结

新增
MySQL中表的增删改查_第44张图片

查询

MySQL中表的增删改查_第45张图片

修改

删除


都看到这了,点个赞再走吧,谢谢谢谢谢!!!

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