【MySQL】表的增删查改

    • 创建库创建表
    • 表插入
    • 表更新插入
    • 表替换
    • 插入查询结果
    • 全列查找
    • 指定列查找
    • 查找结果去重
    • where条件查找
    • 筛选分页结果
    • 对查询到的结果进行列值更新
    • delete 和 truncate 的区别

创建库创建表

  • create database 库名称;
  • use 进入的库名称;
  • create table 表名称;

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

  • select * from 表名称;
  • desc 表名称; — 查看表信息

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

表插入

values 左侧是列属性(如果忽略就是全插入)

>insert [into] table_name
>	[(column [, column] ...)]
>	values (value_list) [, (value_list)] ...

其中 [] 中的操作是可以去除不写的

下列描述了默认全插入,指定元素插入,和多插入操作

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

表更新插入

插入返回对应的情况:
– 0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等
– 1 row affected: 表中没有冲突数据,数据被插入
– 2 row affected: 表中有冲突数据,并且数据已经被更新

在原先的插入命令后加入on duplicate key update 需要修改的变量名=更新内容

【MySQL】表的增删查改_第4张图片
【MySQL】表的增删查改_第5张图片

表替换

表的替换和表的插入更新并不一样,表的更新指的是直接在原先基础上进行修改更新,而表替换是进行删除后进行重新插入

替换返回对应的情况:
– 1 row affected: 表中没有冲突数据,数据被插入
– 2 row affected: 表中有冲突数据,删除后重新插入

替换就是将插入命令进行了一个修改将 insert 去掉为 replace
【MySQL】表的增删查改_第6张图片

插入查询结果

– 创建一张空表 no_duplicate_table,结构和 duplicate_table 一样
可以使用like
create table no_duplicate like duplicate_table;
【MySQL】表的增删查改_第7张图片
【MySQL】表的增删查改_第8张图片
【MySQL】表的增删查改_第9张图片

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

全列查找

  • 通常情况下不建议使用 * 进行全列查询
    • 查询的列越多,意味着需要传输的数据量越大;
    • 可能会影响到索引的使用。

select * from exam_result;

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

指定列查找

select id,name,math from exam_result;

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

为指定字段另取一个别名
select id,name,chinese+math+english 总分 from exam_result;

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

查找结果去重

select distinct math from exam_result;

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

where条件查找

比较运算符

运算符 说明
>, >=, <, <= 大于,大于等于,小于,小于等于
= 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=> 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <> 不等于
BETWEEN a0 AND a1 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, …) 如果是 option 中的任意一个,返回 TRUE(1)
IS NULL 是 NULL
IS NOT NULL 不是 NULL
LIKE 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

逻辑运算符:

运算符 说明
AND 多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR 任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT 条件为 TRUE(1),结果为 FALSE(0)

英语不及格的同学及英语成绩 ( < 60 )
select name,english from exam_result where english<60;

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

语文成绩在 [80, 90] 分的同学及语文成绩
select name,chinese from exam_result where chinese>=80 and chinese<=90;
【MySQL】表的增删查改_第16张图片
select name,chinese from exam_result where chinese between 80 and 90;

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

数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩

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

mysql> select name,math from exam_result where math in(58,59,98,99);
【MySQL】表的增删查改_第18张图片

姓孙的同学 及 孙某同学

% 匹配任意多个(包括 0 个)任意字符
_ 匹配严格的一个任意字符
select name from exam_result where name like '孙%';

select name from exam_result where name like '孙_';
【MySQL】表的增删查改_第19张图片

语文成绩好于英语成绩的同学

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

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

总分在 200 分以下的同学

select name,chinese + math + english 总分 from exam_result where chinese + math + english < 200;

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

语文成绩 > 80 并且不姓孙的同学

select name,chinese from exam_result where chinese > 80 and name not like '孙%';
【MySQL】表的增删查改_第22张图片

孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80

select name,chinese,math,english,chinese+math+english 总分 from exam_result where name like '孙_' or chinese+math+englishglish>200 and chinese < math and english > 80;
【MySQL】表的增删查改_第23张图片
【MySQL】表的增删查改_第24张图片

NULL 的查询

【MySQL】表的增删查改_第25张图片
【MySQL】表的增删查改_第26张图片

结果排序

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

【MySQL】表的增删查改_第27张图片
查询同学及总分,由高到低

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

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

筛选分页结果

建议:对未知表进行查询时,最好加一条 limit 1,避免因为表中数据过大,查询全表数据导致数据库卡死

按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页
需要有数据才能排序,只有数据准备好了,你才要显示,limit的本质功能是 “显示”
select * from exam_result limit 3 offset 0;
select * from exam_result limit 3 offset 3;
select * from exam_result limit 3 offset 6;
select * from exam_result limit 2,3;
select * from exam_result limit 3;
【MySQL】表的增删查改_第29张图片
进行总分排序

select name,chinese+math+english as total from exam_result where chinese+math+english>200 order by total desc;

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

对查询到的结果进行列值更新

注意:更新全表的语句慎用!

将孙悟空同学的数学成绩变更为 80 分
update exam_result set math=80 where name='孙悟空';
【MySQL】表的增删查改_第31张图片

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

update exam_result set math=60,chinese=70 where name='曹孟德';
【MySQL】表的增删查改_第32张图片
== 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分==

update exam_result set math=math+30 order by math+chinese+english asc limit 3;
【MySQL】表的增删查改_第33张图片

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

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

【MySQL】表的增删查改_第34张图片
删除总成绩最后一名

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

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

delete 和 truncate 的区别

注意: truncate 操作慎用

  1. 只能对整表操作,不能像 delete 一样针对部分数据操作;
  2. 实际上 MySQL 不对数据操作,所以比 delete 更快,但是 truncate 在删除数据的时候,并不经过真正的事物,所以无法回滚
  3. 会重置 auto_increment 项
    【MySQL】表的增删查改_第36张图片
    【MySQL】表的增删查改_第37张图片

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