MySQL|6000字总结MySQL最基础的增删查改命令


文章目录

  • 一、新增(Create)
    • 1.单行数据 + 全列插入
    • 2.多行数据 + 全列插入
    • 3.多行数据+指定列插入
  • 二、查询(Retrieve)
    • 1.全列查询
    • 2.指定列查询
    • 3.查询字段为表达式
    • 4.起别名(as)
    • 5.去重(distinct)
    • 6.排序(order by)
    • 7.条件查询(where)
      • 范围查询
      • in
      • 模糊查询:LIKE
      • null的查询
    • 8.分页查询(limit)
    • 9.插入查询结果
  • 三、修改(Update)
  • 四、删除(Delete)
  • 总结

CRUD也就是我们常说的增删查改也是数据库最基础的操作
C:create增加
R:retrieve 查找
U:update 修改
D:delete 删除
注释: 在SQL中 – 表示注释,需要独占一行,或者使用 comment注释。
一、新增(Create) 我们先创建一张学生表
-- 创建一张学生表 create table student ( id int, -- 学号 sn int, -- 姓名 name varchar(16), -- qq邮箱 qq_mail varchar(17) );

使用 insert into 表名 values 对表进行插入数据
注意:数量必须和定义表的列的数量及顺序一致
1.单行数据 + 全列插入
insert into student values (1,20210001,'刘备','12345@qq.com'); insert into student values (2,20210002,'张飞','1234566@qq.com');

2.多行数据 + 全列插入
insert into student values (3,20210003,'关羽','1234567@qq.com'), (4,20210003,'诸葛亮','10001@qq.com');

3.多行数据+指定列插入 我们还可以指定单独几个列进行插入,需要注意:插入的顺序要对应
-- 指定插入学号和姓名 insert into student (sn,name) values (5,'曹操'), (6,'周瑜');

注意:更建议一条语句插入多条数据,插入数据的时候会涉及到网络传输,如果多条数据分多次插入就会涉及到多次网络传输,开销也就会更大。
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

二、查询(Retrieve) 我们先创建一个考试成绩表
-- 创建考试成绩表 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,'刘备',77.5,98,56), (2,'张飞',80,66,77), (3,'关羽',67,87,56), (4,'曹操',77.5,78,66), (5,'诸葛亮',87,98.5,88), (6,'宋江',80,76,65), (7,'李逵',50,30.5,45);

我们通过 select 关键字来进行查找操作
1.全列查询 通过 select * from对所有列查询
通常情况下不建议使用 * 进行全列查询
  1. 查询的列越多,意味着需要传输的数据量越大;
  2. 可能会影响到索引的使用.
select * from exam_result;

查询结果
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

2.指定列查询 这种方式比全列插叙更推荐使用
通过 select 多个列名 from 表名进行查询数据
-- 插叙学生名字和其对应的数学成绩 select name,math from exam_result;

运行结果:
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

3.查询字段为表达式 我们可以指定的查询结果上加上一些简单的表达式,此操作查询出来的表只是一个临时表并不影响原来表的数据。
1.包含一个字段
-- 对查询的语文成绩加10分 select id,name,chinese+10 from exam_result;

运行结果:
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

2.包含多个字段
-- 对插叙的数学加10分,英语加5分 select id,name,chinese,math+10,english+5 from exam_result;

运行结果:
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

3.多个字段求和
我们可以对查询结果进行求和来求总成绩
select name,chinese+math+english from exam_result;

运行结果:
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

4.起别名(as) 为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称
select id,name,chinese+math+english 总分 from exam_result;

运行结果
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

为了更好区分我们还可以在别名前面加上 as 效果是一样的
select id,name,chinese+math+english as 总分 from exam_result;

给每个字段都起别名查询
select id as 学号,name as 姓名,chinese as 语文, math as 数学,english as 英语, chinese+math+english as 总分 from exam_result;

MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

5.去重(distinct) 通过 查询关键字 select 配合 distinct 关键字来去重
select distinct 去重列名 from 表名
-- 不去重的查询 select chinese from exam_result;

MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

去重后
-- 去重代码 select distinct chinese from exam_result;

MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

还可以指定多列去重,指定多列的时候需要每一列都相同才会去重。
-- 去重前 select chinese,math,english from exam_result;

MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

去重后
select distinct chinese,math,english from exam_result;

MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

注意:每次去重操作其实都涉及到比较运算,比较整数没啥问题,如果比较 double 或者是 float 就可能存在误差。
decimal是可以精准比较的
比较字符串的时候,在创建数据库的时候会通过关键字 COLLATE 指定比较规则
6.排序(order by) 通过 order by 关键字来对查询数据进行排序。
  • ASC 为升序(从小到大)
  • DESC 为降序(从大到小)
  • 默认为 ASC
注意:
1.没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
2.NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
-- 按照数学成绩 select name,math from exam_result order by math;

运行结果:
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

使用表达式排序
按总成绩从高到低排序
select id,name,chinese+math+english from exam_result order by chinese+english+math desc;

运行结果:
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

使用表达式排序起别名排序
select id,name,chinese+math+english as 总分from exam_result order by chinese+math+english desc

运行结果:
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

多个字段进行排序,排序优先级随书写顺序
select name,chinese,math,english from exam_result order by chinese ,math,chinese;

先按照语文升序排序,如果语文成绩相同,用数学成绩进行降序排序,同理如果语文数学成绩相同就用英语降序排序
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

可对数据去重后排序
排序前
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

去重排序后
-- 对语文成绩去重排序 select distinct chinese from exam_result order by chinese;

MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

7.条件查询(where) 比较运算符:
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

逻辑运算符:
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

注意:
  1. WHERE条件可以使用表达式,但不能使用别名。
  2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
基本查询:
-- 查询英语不及格的同学 select name,english from exam_result where english < 60;

-- 查询语文成绩好于数学成绩的同学 select name, chinese, math from exam_result where chinese > math;

-- 查询总分小于250分的同学 select name,chinese+math+english as 总分 from exam_result where chinese+math+english < 250;-- 查询总分小于250的同学并以升序排序 select name,chinese+math+english as 总分 from exam_result where chinese+math+english < 250order by chinese+math+english;

AND与OR:
-- 查询语文成绩大于80分,且数学成绩大于80分的同学 select name,chinese,math from exam_result where chinese > 80 and math > 80;

-- 查询数学成绩大于80分,或者英语成绩大于80分的同学 select name,math,english from exam_result where math > 80 or english > 80;

范围查询
BETWEEN … AND .
注意:between and ,左右都是闭区间
-- 查询语文成绩在[80,90]分的同学 select name,chinese from exam_result where chinese between 80 and 90;

这个查询用 and 也是可以实现的
-- 使用 and 也是同样可以实现 mysql> select name,chinese from exam_result where chinese >= 80 and chinese <= 90;

in
-- 查找数学成绩分数等于 98或者66或者80或99分的同学 select name,math from exam_result where math in (98,66,80,99); -- 使用or也可以实现同样的效果 select name,math from exam_result where math = 98 or math = 66 or math = 80 or math = 90;

模糊查询:LIKE
用 % 和 _ 可以使用模糊查询
“%”:可以代替 n 个字符
“_”:每一个可以代替一个字符
当前表中的所有同学
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

-- 查询所有姓孙的同学 select name from exam_result where name like '孙%';

运行结果
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

-- 查询所有名字两个字且性孙的同学 select name from exam_result where name like '孙_';

运行结果
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

null的查询
查询 NULL 的时候不能直接使用 = ,可以用
  1. <=>
  2. is null
-- 两种方法都可以判断是不是 null select name chinese from exam_result where chinese <=> null; select name chinese from exam_result where chinese is null;

示例:
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

查询不是 null 的同学
-- 查询英语成绩不为 null 的同学 select name chinese from exam_result where english is not null;

8.分页查询(limit) 如果查询的数据有成千上万条,就不适合在一个页面显示了。
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

语法:
-- 起始下标为 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开始的前三条数据 select id,name,chinese,math,english from exam_result limit 3; -- 查询表中从3开始的后8条数据 select id,name,chinese,math,english from exam_result limit 3,8; -- 查询表中从3开始的后8条数据,比上面那种方式更明确,也更建议使用 select id,name,chinese,math,english from exam_result limit 8 offset 3;

MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

-- 查询从3开始往后8条数据并以数学成绩排序 select id,name,chinese,math,english from exam_result order by math limit 8 offset 3;

MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

注意:如果操作线上数据库,每个SQL语句都要带上 limit
9.插入查询结果 语法:
INSERT INTO table_name [(column [, column ...])] SELECT ...

我们可以把一个表的查询结果插入到另外一个表中,需要注意以下几点:
  1. 查询表中的结果中的字段要和插入表中的字段类型对应
  2. 不一定需要两个表中的字段全部对应,只需要查询到的结果中的字段在被插入的表中要存在,且类型一样
代码示例:
创建一个学生表和用户表,插入两条数据
-- 用户表 create table user ( id int primary key auto_increment, name varchar(20), age int, sex char ); -- 学生表 create table student ( name varchar(10), sex char ); insert into student values ('李逵','男'); insert into student values ('宋江','男');

通过 select 语句 把查询到的学生表记录插入到用户表中
insert into user (name,sex) select name,sex from student;

三、修改(Update) 通过 update…set关键字来修改数据
注意:修改数据时一定要加上 where ,一旦忘记加上 where 就可能修改掉所有数据
语法:
UPDATE table_name SET column = expr [, column = expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...]

修改前
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

-- 把孙权的数学成绩改成80 update exam_result set math = 80 where name = '孙权'; -- 把刘备的数学成绩改为60,语文改为成绩70 update exam_result set math = 60,chinese = 70 where name = '刘备';

MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

修改前
MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

-- 把总成绩前三的同学的数学分数减10分 update exam_result set math = math-10 order by chinese+math+english desc limit 3;

MySQL|6000字总结MySQL最基础的增删查改命令
文章图片

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

四、删除(Delete) 语法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

-- 删除孙膑的成绩 delete from exam_result where name = '孙膑';

删除整张表的数据
和drop 的区别就是表还在数据没了
delete from 表名;

总结
  1. 插入数据
-- 单行插入 insert into 表(字段1, ..., 字段N) values (value1, ..., value N); -- 多行插入 insert into 表(字段1, ..., 字段N) values (value1, ...), (value2, ...), (value3, ...)

  1. 查询:select
-- 全列查询 select * from 表 -- 指定列查询 select 字段1,字段2... from 表 -- 查询表达式字段 select 字段1+100,字段2+字段3 from 表 -- 别名 select 字段1 别名1, 字段2 别名2 from 表 -- 去重DISTINCT select distinct 字段 from 表 -- 排序ORDER BY select * from 表 order by 排序字段 -- 条件查询WHERE: -- (1)比较运算符 (2)BETWEEN ... AND ... (3)IN (4)IS NULL (5)LIKE (6)AND (7)OR (8)NOT select * from 表 where 条件 update 表 set 字段1=value1, 字段2=value2... where 条件 delete from 表 where 条件 比特科

  1. 修改:update
update 表 set 字段1=value1, 字段2=value2... where 条件

  1. 删除:delete
delete from 表 where 条件

【MySQL|6000字总结MySQL最基础的增删查改命令】注意:
  1. where 条件可以使用表达式,但不能使用别名
  2. 判断是否为 null 要使用 <=> 或者 is null ,非 null 则用 not null
  3. 修改数据时一定要加上 where ,一旦忘记加上 where 就可能修改掉所有数据
  4. 如果操作线上数据库,每个SQL语句都要带上 limit

    推荐阅读