【MySQL表的增删改查】(基础)

本文详细介绍了MySQL中的CRUD操作,包括数据的新增(单行、全列和指定列)、查询(全列、指定列、表达式查询、排序、去重和条件查询)、修改和删除,以及如何使用分页和处理NULL值。
摘要由CSDN通过智能技术生成

1、CRUD

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

2、新增(Create)

实际上,SQL使用的是 insert 关键字
其中 into 可以省略

insert into 表名 values(,.......)


案例:

insert into student values(1,'张三');

2.1单行数据,全列插入

insert into student values(2,'明志');

2.2多行数据,指定列插入

insert into 表名(列名,列名....) values(,.......)



插入日期

在这里插入图片描述

3、查询(Retrieve)

select 选择
再增删查改过程中,查询是最复杂的

3.1、全列查询(最简单的查询)

select * from 表名;

能够查询出表中的所有行所有列。
星号 * 是通配符

3.2、指定列查询

select 列名,列名......from 表名;

在这里插入图片描述

3.3查询字段为表达式

选中表

use java111;

创建表

create table exam_result(
       id int,
       name varchar(20),
       chinese decimal(3,1),
       math decimal(3,1),
       english decimal(3,1)
);

查看表结构

desc exam_result;

插入数据

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

(指定列查询)

select name,chinese from exam_result;

表达式查询

  • MySQL是一个 “客户端 - 服务器” 结构的程序。
  • 此时数据是存储在服务器的硬盘上的。
  • 上述的表达式查询,只是针对服务器响应得到的临时结果进行了计算,不影响硬盘上储存的数据本体。

select 中所有的用法,都不会影响数据库服务器硬盘上储存的数据!!!(只是查询,是读操作)
例如:
在这里插入图片描述
此处查询到的结果,是一个“临时表”,不是硬盘上保存的表的本体!!!
其实不是一张表
decimal(3,1)限制的是硬盘上的数据,而不是临时表上的数据。
临时表能够尽可能的保证你最终的计算结果是正确的。

表达式查询可以包含多个字段(可以多个列一起参与运算)
例如:

注意点:

  1. 一般不建议在这里进行太复杂的运算,对于数据库来说,本身就容易成为性能瓶颈。
  2. 上述表达式查询过程中,表达式最终就成为了临时表的表头的名字。如果表达式比较复杂,不太直观。
  3. 因此可以给临时表的列起别名(外号)

3.4别名(外号)

select name,chinese + mash + engliash as total from eaxm_result;

注意点:

  1. as 可以省略

    还是建议写上

3.5去重查询

针对查询结果,进行去重,存在重复数据,就会把重复的行合并为一行

select distinct 列名 from 表名;

注意点:
如果有多个列一起去重,必须多行的多列都相同的时候,才算重复

3.6带有排序的查询

select 的查询结果,默认是“无序”的
要想让查询结果“有序”,就必须手动使用 order by 语句,让mysql 主动排序!!!

select * from 表名 order by 列名/表达式;
//此处的排序默认是按照升序排序 
//如果要降序排列,还需要加上 desc 关键字


起别名进行排序

order by 也是可以指定多个列进行排序,通过多个列排序约定更复杂的比较规则

select * from 表名 order by 列名[desc],列名[desc]......

3.7条件查询(最重要&最常用)

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

-- 查询语文成绩好于英语成绩的同学
SELECT name, chinese, english FROM exam_result WHERE chinese > english;

-- 查询总分在 200 分以下的同学
SELECT name, chinese + math + english 总分 FROM exam_result 
 WHERE chinese + math + english < 200;

可以在条件选择的时候使用 order by 来排序
(如果没有显式使用 order by ,顺序是不可预期的)

  • AND与OR:
    1. WHERE条件可以使用表达式,但不能使用别名。
    1. 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;
SELECT * FROM exam_result WHERE (chinese > 80 or math>70) and english > 70;

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

  • 范围查询
  1. 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;



2.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;

3.8分页查询:LIMIT

limit 关键字来进行描述,限制了这次查询最多返回多少记录

select * from exam_result limit 3;

这个操作,就是只查询到前三条记录

搭配 offset 关键字
offset 称为偏移量 (相当于下标)
从第三个数据开始
在这里插入图片描述
假设设定 一页 显示 10 条记录
第一页 limit 10 offset 0;
第二页 limit 10 offset 10;

4.修改(Update)

update 会修改服务器硬盘上的数据

update 表名 set 列名 =where 条件;
-- 将孙悟空同学的数学成绩变更为 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;

-- 将所有同学的语文成绩更新为原来的 2 倍
UPDATE exam_result SET chinese = chinese * 2;

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

5.删除(Delete)

delete 是删除表内容,删完之后,表的内容是空的,表本身是存在的
drop table 删除整张表,内容和表都没了

delete from 表名 where 条件;
-- 删除孙悟空同学的考试成绩
DELETE FROM exam_result WHERE name = '孙悟空';
-- 删除整张表数据
-- 准备测试表
DROP TABLE IF EXISTS for_delete;
CREATE TABLE for_delete (
 id INT,
 name VARCHAR(20)
);
-- 插入测试数据
INSERT INTO for_delete (name) VALUES ('A'), ('B'), ('C');
-- 删除整表数据
DELETE FROM for_delete;

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值