0


MySQL表的增删改查(基础)

📜个人简介
⭐️个人主页:摸鱼の文酱博客主页🙋‍♂️
🍑博客领域:java编程基础,mysql
🍅写作风格:干货,干货,还是tmd的干货
🌸精选专栏:【Java】【mysql】 【算法刷题笔记】
🎯博主的码云gitee,平常博主写的程序代码都在里面。
🚀支持博主:点赞👍、收藏⭐、留言💬
🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

前言

在上篇文章(mysql数据库基础)中,我向大家简单介绍了mysql数据库的基础知识,如何创建和销毁数据库及数据库内的表.在上次内容的基础上,创建表以后我们要对其进行管理,该如何操作?
本篇博客将向大家介绍在MySQL数据库中,对表的增删改查的操作.希望本篇文章可以对正在学习或想要学习MySQL数据库的你有所帮助

文章目录

🍭一.新增(create)

🔮1.表的创建

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

关于新增表,在上篇中也已经介绍过,这里再简单说一下:首先,创建表必须是建立在选中数据库的基础上,否则将创建失败.
其次,创建表必须要是非空的,要有属性之类,不能创建一个空表.
在不考虑约束的情况下,只需要注意在创建表时表内属性和对应的数据类型,这将影响之后进行的插入数据.

创建表,只规定了这个表的列的长度和属性,而没有对于行数的规定.

例如:

CREATE TABLE student (id INT,
sn INT comment '学号',
name VARCHAR(20) comment '姓名',
qq_mail VARCHAR(20) comment 'QQ邮箱');

在这里插入图片描述

🔮2.插入数据

在向表中插入数据时,我们既可以采用单行插入,亦可以采用多行批量插入.
如果要插入的信息存在缺失(某些列无信息),我们也可以采用用指定列插入的方法,务必确保信息正确插入在对应列下面

💦1).插入单行数据

只插入一行数据
eg:

 insert into student values(0,2010,"Mark",NULL,103);

在这里插入图片描述

💦2).插入多行数据

一次性插入多行数据
eg:

INSERT INTO student  VALUES
    (102, 20001, '曹孟德',NULL,NULL),
    (103, 20002, '孙仲谋',NULL,NULL);

在这里插入图片描述

💦3).全列插入

按照表上列的属性的顺序,依次输入要插入的对应信息(有的规定可以为空,那么就可以用NULL代替,但不能不写,)
eg:
在这里插入图片描述

 insert into student values(0,2010,"Mark",NULL,103);

在这里插入图片描述

💦4).指定列插入

对于只有个别数据要插入,我们也可以先说明要插入的数据属于那一列,然后再对应的给出
与列相对应的信息
eg:

INSERT INTO student (id, sn, name) VALUES
(102, 20001, '刘备'),
(103, 20002, '关羽');

在这里插入图片描述

🍭二.查询(retrieve)

为什么通常都念增删查改,而我却把查询放在第二位?
因为在我看来,查询要更重要,也是删和改的基础(毕竟你想要删或改也应先找到目标)

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

🔮1.全列查询

全列查询也可以理解为整表查询,通过这个命令可以输出一张表内存储的所有信息()

SELECT * from 表名;

eg:

-- 创建考试成绩表
DROP TABLE IF EXISTS exam_result;
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);
-- 查看表内容
select * from exam_result;

在这里插入图片描述

注意:通常情况下不建议使用 * 进行全列查询

原因
– 1. 查询的列越多,意味着需要传输的数据量越大;
– 2. 可能会影响到索引的使用。(索引待后面讲解)

🔮2.指定列查询

同样,在只需要查看某几个数据时,也可以直接查询指定列的信息
eg:

SELECT  name, english,math FROM exam_result;

注:此处指定列的顺序可以不按定义表的顺序
在这里插入图片描述

🔮3. 查询字段为表达式

简单来说就是根据个性化的需求来获取相应信息

比如:要查询学生的语文成绩加十分后的情况

select id, name, chinese+10 from exam_result;                  -- 只包含一个字段

在这里插入图片描述
再比如查看学生成绩总分:

select id, name, chinese + math + english from exam_result;  -- 表达式包含多个字段

在这里插入图片描述

🔮4.别名

为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称,语法.

语法:
SELECT column [AS] alias_name […] FROM table_name;

-- 结果集中,表头的列名=别名
SELECT id, name, chinese + math + english 总分 FROM exam_result;

eg:按刚刚的要求查询总成绩,并给该列数据命名总分
在这里插入图片描述

🔮5.去重(distinct)

使用DISTINCT关键字对某列数据进行去重:
eg:

SELECT math FROM exam_result;

在这里插入图片描述

SELECT DISTINCT math FROM exam_result;

结果:
在这里插入图片描述

🔮6.排序(order by)

ASC 为升序(从小到大)
DESC 为降序(从大到小)
默认为 ASC

SELECT ... FROM table_name [WHERE ...]
    ORDER BY column [ASC|DESC], [...];

eg:

-- 查询同学姓名和 qq_mail,按 qq_mail 排序显示
SELECT name, qq_mail FROM student ORDER BY qq_mail;
SELECT name, qq_mail FROM student ORDER BY qq_mail DESC;

在这里插入图片描述

在这里插入图片描述

💦使用表达式及别名排序

-- 查询同学及总分,由高到低
SELECT name, chinese + english + math FROM exam_result
ORDER BY chinese + english + math DESC;
SELECT name, chinese + english + math total FROM exam_result
ORDER BY total DESC;

在这里插入图片描述

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

-- 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示
SELECT name, math, english, chinese FROM exam_result
ORDER BY math DESC, english, chinese;

在这里插入图片描述

🔮7.条件查询(where)

在这里插入图片描述

在这里插入图片描述

注:

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

eg:

💦1).基本查询

-- 查询英语不及格的同学及英语成绩 (<60)
SELECT name, english FROM exam_result WHERE english <60;

在这里插入图片描述

💦2).AND与OR

-- 查询语文成绩大于80分,且英语成绩大于80分的同学
SELECT * FROM exam_result WHERE chinese >80 and english >80;

在这里插入图片描述

-- 查询语文成绩大于80分,或英语成绩大于80分的同学
SELECT * FROM exam_result WHERE chinese >80 or english >80;

在这里插入图片描述

观察AND 和 OR 的优先级:

SELECT * FROM exam_result WHERE chinese >80 or math>70 and english >70;

在这里插入图片描述
上面结果相当于:chinese > 80 or (math>70 and english > 70)

SELECT * FROM exam_result WHERE(chinese >80 or math>70) and english >70;

在这里插入图片描述

💦3).范围查询

🌱between…and…

-- 查询语文成绩在 [80, 90] 分的同学及语文成绩
SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;

在这里插入图片描述

-- 使用 AND 也可以实现
SELECT name, chinese FROM exam_result WHERE chinese >=80 AND chinese<=90;

在这里插入图片描述

🌱in()

-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
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;

在这里插入图片描述

🌱模糊查询(like)

-- % 匹配任意多个(包括 0 个)字符
SELECT name FROM exam_result WHERE name LIKE '孙%';-- 匹配到孙悟空、孙权

在这里插入图片描述

-- _ 匹配严格的一个任意字符
SELECT name FROM exam_result WHERE name LIKE '孙_';-- 匹配到孙权

在这里插入图片描述

🌱NULL 的查询:IS [NOT] 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;

在这里插入图片描述

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

eg:按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页

-- 第 1 页
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3
OFFSET 0;

在这里插入图片描述

-- 第 2 页
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3
OFFSET 3;

在这里插入图片描述

-- 第 3 页,如果结果不足 3 个,不会有影响
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3
OFFSET 6;

在这里插入图片描述

注意:

  1. 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
  2. NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面

🍭三.删除(delete)

语法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
-- 删除孙悟空同学的考试成绩
DELETE FROM exam_result WHERE name ='孙悟空';

在这里插入图片描述

-- 删除整张表数据
select * from fro_delete;
DELETE FROM for_delete;
select * from fro_delete;

在这里插入图片描述

🍭四.修改(update)

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

eg:

-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
UPDATE exam_result SET math =60, chinese =70 WHERE name ='曹孟德';

在这里插入图片描述

-- 将总成绩倒数前三的 3 位同学的数学成绩加上 5 分
UPDATE exam_result SET math = math +5 ORDER BY chinese + math + english LIMIT 3;

在这里插入图片描述

🎪五.重点小结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签: 后端 sql 数据仓库

本文转载自: https://blog.csdn.net/qq_53947552/article/details/123818425
版权归原作者 摸鱼の文酱 所有, 如有侵权,请联系我们删除。

“MySQL表的增删改查(基础)”的评论:

还没有评论