当前位置: 首页 > news >正文

MySQL 表内容的增删查改 -- CRUD操作,聚合函数,group by 子句

目录

1. Create

1.1 语法

1.2 单行数据 + 全列插入

1.3 多行数据 + 指定列插入

1.4 插入数据否则更新数据

1.5 替换

2. Retrieve

2.1 SELECT 列

2.1.1 全列查询

2.1.2 指定列查询

2.1.3 查询字段为表达式

2.1.4 为查询结果指定别名

2.1.5 结构去重

2.2 WHERE 条件

2.2.1 运算符介绍

2.2.2 案例

2.3 对筛选结果排序显示 

2.3.1 案例

2.4 分页显示结果

3. Update

3.1 案例

4. Delete

4.1 案例

4.2 截断表

5. 插入查询结果

6. 聚合函数

6.1 案例

7. group by 子句的使用

7.1 案例


        CRUD: create(创建),retrieve(读取),Update(更新),delete(删除)

1. Create

1.1 语法

INSERT [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ...value_list: value, [, value] ...

        插入数据的时候,value_list 中列的数量和顺序要和 前面定义表([(column [, column] ...)] )的列的一致。

        这里先创建一张学生表,用于下列实验。 

1.2 单行数据 + 全列插入

        如果定义表中没有指定列,表示全列插入。也可以在定义表中指定全部列表示全列插入。

1.3 多行数据 + 指定列插入

1.4 插入数据否则更新数据

        由于在插入的时候会发生主键或者唯一键冲突,可以选择性的进行同步更新操作:

INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ...

        如下图中的语句,当插入的数据没有主键或者唯一键冲突的时候插入数据,如果有主键或唯一键冲突则将原数据更新为 update 之后的数据。

1.5 替换

REPLACE [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ...value_list: value, [, value] ...

        如果插入的数据与表中的数据没冲突,则插入该数据;如果插入的数据与表中的数据有冲突,则将表中数据替换为该数据。 

2. Retrieve

SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...DISTINCT:表示去重。
{* | {column [, column] ...}:*表示通配符,column表示要查看的列。
WHERE ...:后面跟筛选条件。
ORDER BY column [ASC | DESC], ...:按照 column 升序或降序排序。
LIMIT ...:限制条数。

        下列是后续实验使用的表的结构以及其数据。 

2.1 SELECT 列

2.1.1 全列查询

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

2.1.2 指定列查询

        指定列的顺序不需要按定义表的顺序来写。可以指定想要查询的若干列进行查询。

2.1.3 查询字段为表达式

        (1)表达式不包含字段

        (2)表达式包含一个字段

        (3)表达式包含多个字段 

2.1.4 为查询结果指定别名

SELECT column [AS] alias_name [...] FROM table_name;

        as 可以省略。 

2.1.5 结构去重

2.2 WHERE 条件

2.2.1 运算符介绍

        比较运算符: 

        '=' 不能用于判断是否等于 NULL。 

        between 的区间是左闭右闭的。 

        like 前可以加 not 表示取反。

        逻辑运算符:

2.2.2 案例

        (1)查看英语低于60分的同学。

        (2)查看语文成绩在 [80, 90] 分的同学。 

        (3)数学成绩是 98 或 99 的同学。 

        (4)筛选出姓孙的同学,孙某以及孙某某。

        (5)筛选语文成绩好于英语成绩的同学。 

        (6)筛选总分在 200 分一下的同学。 

        从上图可以看到,语句 1 可以正常执行,而语句 2 则会失败。原因是因为 select 语句是有执行顺序的。首先执行的是 from 表示从那个表中找,其次是 where 子句,表示筛选的条件,最后在是列的显示。上述的语句 2 中,在执行 where 的时候还没有进行重命名,所以使用 total 充当筛选条件是不可行的,其次,重命名也不能在 where 子句中进行。

2.3 对筛选结果排序显示 

        order by 的执行顺序在显示列之后,所以可以使用重命名的列名进行排序。

-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];

        注:没有 order by 子句查询出来的顺序是未定义的。 NULL 视为比任何值都小。

2.3.1 案例

        (1)按数学成绩升序或降序显示同学及其数学成绩。

        (2) 按数学降序,英语升序,语文升序的方式显示各科成绩。

        上述语句表明的是,当数学相等的时候,按照英语成绩升序排列,当数学成绩相等并且英语成绩相等的时候,按照语文成绩相等来排。 

2.4 分页显示结果

-- 起始下标为 0-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

        对未知表进行查询的时候最好加上一条 limit 语句,避免因为表中数据过大,查询全表数据导致数据库卡死。

3. Update

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

        对查询到的结果进行列值更新如果没有 where 子句会对全表进行修改

3.1 案例

        (1)将孙悟空的数学成绩修改为 80 分。

        (2)将总分倒数前 3 的同学数学加 30 分。 

4. Delete

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...];

        对查询到的结果进行删除

4.1 案例

        (1)删除孙悟空的成绩。

        (2)删除整张表的数据。 

        整张表的数据删除之后,并不会重置 auto_increment 项。

4.2 截断表

TRUNCATE [TABLE] table_name;

        truncate 也是清空整张表的数据,只能对整张表操作,不能想 delete 一样删除部分数据。会重置 auto_increment 项。truncate 不对数据操作,直接把表清空,所以比 delete 快,但是 truncate 在删除数据的时候,并不会记录到日志当中,也不会经过真正的事务,所以无法回滚。

5. 插入查询结果

INSERT INTO table_name [(column [, column ...])] SELECT ...;

        案例:删除表中的重复记录。

        (1)创建原始数据表并插入测试数据。

        (2)创建一张空表,结构和原表一样。 

        (3)将原表去重的数据插入到新表中。 

        (4)将原表重命名为其他,然后将新表重命名为原表。 

6. 聚合函数

6.1 案例

        (1)统计学生数学成绩的平均值。

        (2)返回 > 70 分以上的最低数学成绩。

7. group by 子句的使用

        分组的目的是为了进行分组之后,方便进行聚合统计。

select column1, column2, .. from table group by column;

7.1 案例

        创建一个雇员信息表(来自oracle 9i的经典测试表),EMP 员工表,DEPT 部门表,SALGRADE 工资等级表。

        (1)显示每个部门的平均工资和最高工资。 

        (2)显示每个部门的每种岗位的平均工资和最低工资。 

        (3)显示平均工资低于 2000 的部门和它的平均工资。

        having 对聚合统计之后的结果进行条件筛选。 

知识点1:        

        SQL 查询中各个关键字的执行先后顺序 from > on> join > where > group by > with > having > select > distinct > order by > limit

 

相关文章:

  • 期货反向跟单—交易规则设计(四)品种选择
  • 火热邀测!DataWorks数据集成支持大模型AI处理
  • vue3+element plus 自定义组件,单列的方块 图形加文字列表
  • Cursor:开启智能编程新视界
  • DeepSpeed常见面试问题
  • Unity屏幕适配——背景适配
  • 微前端架构设计与实战示例
  • 小白的进阶之路系列之四----人工智能从初步到精通pytorch自定义数据集下
  • 【数据库】概述(纯理论)
  • Rust 学习笔记:关于迭代器的练习题
  • 网盘解析工具v1.3.6,增加文件夹解析下载
  • STM32定时器的死区时间(DTR)如何计算
  • 【电商接口】开发者如何对接快手订单API?
  • CMake指令:source_group()
  • [Python] 如何使用 Python 调用 Dify 工作流服务实现自动化翻译
  • 自学嵌入式 day 24 -系统编程 文件
  • JS逆向 【QQ音乐】sign签名| data参数加密 | AES-GCM加密 | webpack实战 (上)
  • 黑马程序员C++核心编程笔记--2 引用
  • ISOLAR软件生成报错处理(三)
  • 中大型企业 CIO List
  • 做英文网站2014/武汉网站提升排名
  • 北京的软件公司/seo怎么优化方案
  • 专注于网站营销服务/百度关键词推广多少钱
  • 仿牌独立站/百度下载安装到桌面上
  • 做网站域名优化的怎么样/什么是广告营销
  • 网站如何做关/大数据查询官网