表的增删改查

在这里插入图片描述

1. Create(创建)

1.1 insert

在这里插入图片描述
下面我们用这个表来操作:
在这里插入图片描述
单行数据 + 全列插入:
在这里插入图片描述
注意:这里在插入的时候,也可以不用指定id(当然,那时候就需要明确插入数据到那些列了),那么mysql会使用默认的值进行自增。

多行数据 + 指定列插入:
在这里插入图片描述
这里就没有指定qq的插入。

1.2 插入否则更新

由于 主键 或者 唯一键 对应的值已经存在而导致插入失败,可以选择性的进行同步更新操作语法:
在这里插入图片描述
ON DUPLICATE KEY 当发生重复key的时候。

举个例子:
在这里插入图片描述
在这里插入图片描述
我们可以看到主键为2的字段,被更新成了张三。
在这里插入图片描述
在这里插入图片描述

1.3 替换

主键 或者 唯一键 没有冲突,则直接插入。主键 或者 唯一键 如果冲突,则删除后再插入
在这里插入图片描述
在这里插入图片描述
可以看到,我们把张三删除了,然后换成了王五。

在这里插入图片描述

2. Retrieve(查询)

在这里插入图片描述
在这里插入图片描述
在这里创建了一个学生成绩表。并在里面插入了一些测试数据。
在这里插入图片描述

2.1 SELECT 列

全列查询:
上面的方式就是全列查询,通常情况下不建议使用 * 进行全列查询,1. 查询的列越多,意味着需要传输的数据量越大。 2. 可能会影响到索引的使用。

指定列查询:
指定列的顺序不需要按定义表的顺序来
在这里插入图片描述
这里的意思是只查询名字和数学的列。

查询字段为表达式:
表达式包含一个字段:
在这里插入图片描述
每个人的数学成绩都加上了10。

表达式包含多个字段:
在这里插入图片描述
为查询结果指定别名:
在这里插入图片描述
在这里插入图片描述
结果去重:
在这里插入图片描述
98 分重复了,我们可以在查询的时候进行去重。
在这里插入图片描述
加上一个distinct就可以了。

2.2 WHERE 条件

比较运算符:
在这里插入图片描述
如果我们想要查询数学成绩在80分以上的同学:
在这里插入图片描述
如果我们想要查询数学成绩在70到85之间的同学:
在这里插入图片描述
查询在集合里的数据:
在这里插入图片描述
我们也可以查询英语不及格的同学的语文成绩如何:
在这里插入图片描述
姓孙的同学 及 孙某同学:
% 匹配任意多个(包括 0 个)任意字符
在这里插入图片描述
如果我们查询除了姓孙的:
在这里插入图片描述
_ 匹配严格的一个任意字符,__匹配严格的二个任意字符
在这里插入图片描述
语文成绩好于英语成绩的同学:
在这里插入图片描述
条件中比较运算符两侧都是字段。

总分在 200 分以下的同学:
在这里插入图片描述

那么我们该如何去筛选一个NULL的字段和空字符串呢
筛选空字符串,我们可以使用=符号,但是筛选NULL,不能使用=号,可以采用<=>和IS来筛选。

逻辑运算符:
在这里插入图片描述
语文成绩 > 80 并且不姓孙的同学:
在这里插入图片描述

2.3 结果排序

在这里插入图片描述
注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序

按数学成绩升序和降序显示:
在这里插入图片描述
查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示:
在这里插入图片描述
多字段排序,排序优先级随书写顺序。

查询同学及总分,由高到低,ORDER BY 子句中可以使用列别名:
在这里插入图片描述

2.4 筛选分页结果

语法:起始下标为 0
从 0 开始,筛选 n 条结果。SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT n;

假设我们要筛选总分前3名的:
在这里插入图片描述
从 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;
在这里插入图片描述
建议:对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死

3. Update(更新)

语法:

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

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

查看原数据:
在这里插入图片描述
在这里插入图片描述
我们一定要加上where条件筛选,不然所有的成绩都会被修改。

将总成绩倒数前三的 3 位同学的数学成绩加上 30 分:
在这里插入图片描述
数据更新,不支持 math += 30 这种语法
在这里插入图片描述
更新后数据,不可以按总分升序排序取前 3 个了。
在这里插入图片描述

4. Delete(删除)

4.1 删除数据

在这里插入图片描述
在这里插入图片描述
删除整张表数据:
在这里插入图片描述
我们在这准备测试表来删除数据。
在这里插入图片描述
插入数据之后,我们就可以删除这个表了。
在这里插入图片描述
删除表之后,我们再插入一条数据,可以看到它的id还是会自增的。
在这里插入图片描述
查看表结构,AUTO_INCREMENT项一直记录。

4.2 截断表

在这里插入图片描述
然后我们还按照上面的操作:
在这里插入图片描述
然后我们截断表:
在这里插入图片描述
截断整表数据,注意影响行数是 0,所以实际上没有对数据真正操作。
在这里插入图片描述
在这里插入图片描述

5. 插入查询结果

在这里插入图片描述
删除表中的的重复记录,重复的数据只能有一份
在这里插入图片描述
思路:创建一张空表 no_duplicate_table,结构和 duplicate_table 一样
在这里插入图片描述
只能拷贝表的结构,不能把数据也拷贝过来。

将 duplicate_table 的去重数据插入到 no_duplicate_table
在这里插入图片描述
DISTINCT这个是查询时可以去重。
通过重命名表,实现原子的去重操作
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学代码的咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值