0


MySQL中表的增删改查

一、CRUD

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


二、新增(Create)

已有的表结构和表数据:

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

结果如下:

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

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

代码展示

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

结果如下:


三、查询(Retrieve)

(1)语法

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

(2)全列查询

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

语法:select * from 表名

代码展示:

select * from books;

结果如下:

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

(3)指定列查询

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

代码展示:

select name, author, price from books;

结果如下:

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

(4)查询字段为表达式

1、表达式不包含字段:

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

代码演示:

 select name, price, 10 from books;

结果如下

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

2、表达式包含一个字段

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

代码演示:

select name, author, price + 10 from books;

结果如下:

表结构如下:

3、表达式包含多个字段

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

整型数据代码演示:

 select name, chinese + math + english from report;

结果如下:

不是整型数据代码演示:

select price, name + author + sort from books;

结果如下:

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

(5)别名

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

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

代码演示:

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

结果如下:

(6)去重:DISTINCT

现有的表:

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

代码展示:

 select distinct math from exam_result;

结果如下:

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

结果如下:

3、降序

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

代码展示:

select * from exam_result order by math desc;

结果如下:

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

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

代码展示:

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

结果如下:

注意:

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

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

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

代码演示:

 select * from exam_result order by math, english;

结果如下:

(8)条件查询:WHERE

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

1、比较运算符

2、逻辑运算符

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

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

如图示例:

            sql语句的执行顺序:

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

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

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

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

3、基本查询:

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

代码如下:

 select name, english from exam_result where english > 70;

结果如下:

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

代码如下:

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

结果如下:

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

代码如下:

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

结果如下:

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

结果如下:

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

5、范围查询

(1) BETWEEN ... AND
    代码展示:
select * from exam_result where chinese between 80 and 90;
    结果展示:


这里用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);

结果展示:

这里也可以用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 '孙%';

结果如下:

代码展示:

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

结果如下:

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

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

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

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

代码如下:

select name from exam_result where name is not null;

结果如下:

代码如下:

select name from exam_result where name is NULL;

结果如下:

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;

结果如下:

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

代码展示:

select * from exam_result limit 3;

结果如下:

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

代码展示:

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

结果如下:


四、修改(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 = '孙悟空';

结果如下:

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

代码如下:

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

结果如下:

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

代码如下:

结果如下:

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

代码如下:

 update exam_result set chinese = chinese * 2;

结果如下:


五、删除(Delete)

语法:

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

案例:

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

代码如下:

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

结果如下:

-- 删除整张表数据

准备一张表,如下:

代码如下:

 delete from for_delete;

结果如下:


六、内容重点总结

新增

查询

修改

删除


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

标签: mysql 数据库

本文转载自: https://blog.csdn.net/cool_tao6/article/details/134148942
版权归原作者 tao滔不绝 所有, 如有侵权,请联系我们删除。

“MySQL中表的增删改查”的评论:

还没有评论