表的增删改查

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

文章目录

  • 1. Create(创建)
    • 1.1 insert
    • 1.2 插入否则更新
    • 1.3 替换
  • 2. Retrieve(查询)
    • 2.1 SELECT 列
    • 2.2 WHERE 条件
    • 2.3 结果排序
    • 2.4 筛选分页结果
  • 3. Update(更新)
  • 4. Delete(删除)
    • 4.1 删除数据
    • 4.2 截断表
  • 5. 插入查询结果

1. Create(创建)

1.1 insert

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

多行数据 + 指定列插入:
表的增删改查_第4张图片
这里就没有指定qq的插入。

1.2 插入否则更新

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

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

1.3 替换

主键 或者 唯一键 没有冲突,则直接插入。主键 或者 唯一键 如果冲突,则删除后再插入
表的增删改查_第7张图片
表的增删改查_第8张图片
可以看到,我们把张三删除了,然后换成了王五。

在这里插入图片描述

2. Retrieve(查询)

表的增删改查_第9张图片
表的增删改查_第10张图片
在这里创建了一个学生成绩表。并在里面插入了一些测试数据。
表的增删改查_第11张图片

2.1 SELECT 列

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

指定列查询:
指定列的顺序不需要按定义表的顺序来
表的增删改查_第12张图片
这里的意思是只查询名字和数学的列。

查询字段为表达式:
表达式包含一个字段:
表的增删改查_第13张图片
每个人的数学成绩都加上了10。

表达式包含多个字段:
表的增删改查_第14张图片
为查询结果指定别名:
表的增删改查_第15张图片
表的增删改查_第16张图片
结果去重:
表的增删改查_第17张图片
98 分重复了,我们可以在查询的时候进行去重。
表的增删改查_第18张图片
加上一个distinct就可以了。

2.2 WHERE 条件

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

总分在 200 分以下的同学:
表的增删改查_第28张图片

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

逻辑运算符:
表的增删改查_第29张图片
语文成绩 > 80 并且不姓孙的同学:
表的增删改查_第30张图片

2.3 结果排序

表的增删改查_第31张图片
注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序

按数学成绩升序和降序显示:
表的增删改查_第32张图片
查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示:
表的增删改查_第33张图片
多字段排序,排序优先级随书写顺序。

查询同学及总分,由高到低,ORDER BY 子句中可以使用列别名:
表的增删改查_第34张图片

2.4 筛选分页结果

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

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

3. Update(更新)

语法:

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

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

查看原数据:
表的增删改查_第37张图片
表的增删改查_第38张图片
我们一定要加上where条件筛选,不然所有的成绩都会被修改。

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

4. Delete(删除)

4.1 删除数据

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

4.2 截断表

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

5. 插入查询结果

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

将 duplicate_table 的去重数据插入到 no_duplicate_table
表的增删改查_第51张图片
DISTINCT这个是查询时可以去重。
通过重命名表,实现原子的去重操作
表的增删改查_第52张图片

你可能感兴趣的:(MySql,MySQL,数据库)