MySQL-单表操作
数据操作
复制表结构和数据
复制已有表结构
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 表名
{LIKE 旧表名 | (LIKE 旧表名) }
复制已有表数据
INSERT [INTO] 数据表1 [(字段列表)] SELETC [(字段列表)] FROM 数据表名2;
注意:若数据表中含有主键,而主键具有唯一性,所以在数据复制时还要考虑主键冲突的问题
拓展
临时表的创建:
CREATE TEMPORARY TABLE 数据库.表名 (表单)
解决主键冲突
在数据表插入数据的时候,若表中的主键含有实际的业务意义
主键冲突更新
主键冲突更新操作是指,当插入数据的过程若发生主键冲突,则插入数据操作利用更新的方式实现。
INSERT [INTO] 数据表名 [(字段列表)]{VALUES|VALUE}(值列表)
ON DUPLICATE KEY UPDATE 字段名 1 = 新值1[,字段名2 = 新值2]…;
主键冲突替代
主键冲突替代指的是,当插入数据的过程中若发生主键冲突,则删除此条记录,并重新插入。
REPLACE [INTO] 数据表名 [(字段列表)]
{VALUES | VALUE }(值列表)[,(值列表)]…;
REPLACE语句与INSERT语句的使用类似,区别在于前者每执行一次就会发生两个操作(删除记录和插入记录)。
清空数据
除了DELETE语句可以删除数据外,还可以利用TRUNCATE清空数据表中的全部数据。
TRUNCATE [TABLE] 表名
需要注意的是,当删除的数据量很小的时候,DELETE的执行效率要比TRUNCATE高;只有删除的数据量很大的时候,才能看出TRUNCATE的执行效率比DELETE高。
去除重复记录
实际应用中,对于数据的分析需求,有时需要去除查询记录中重复的数据。
SELETE selete 选项 字段列表 FROM 数据表
在上述语法中,“selete选项”默认值为All,表示保存所有查询到的记录;当设置为DISINCT时,表示去除重复记录,只保留一条。需要注意的是,当查询记录的字段有多个时,必须所有字段的值完全相同才被认为是重复记录。
排量与限量
排序
单字段排序
单字段排序指的是查询时仅按照一个指定字段进行升序或降序排序。
SELECT * |{字段列表} FROM 数据表名
ORDER BY 字段名 [ASC|DESC];
ASC表示升序,DESC表示降序。而ORDER BY默认值是ASC
多字段排序
在开发中需要根据多个条件对查询的数据进行排序时,可以采用多字段排序。
SELETE *|{字段列表} FROM 数据表名
ORDER BY 字段名1 [ASC|DESC][,字段名2[ASC|DESC]]…;
多字段排序首先按照字段1进行排序,当字段1相同时,再按照字段名2进行排序,以此类推。
限量
对于一次性查询出的大量数据,不仅不便于阅读查看,还会浪费系统效率。LIMIT可以限定记录的数量,也可以指定查询从那一条记录开始。
SELECT [selete选项] 字段列表 FROM 数据表名
[WHERE 条件表达式][ORDER BY 字段 ASC|DESC]
LIMIT [OFFSET,] 记录数;
排序后限量更新或删除数据
#数据更新的排序与更新
UPDATE 数据表名 SET 字段=新值,…[WHERE 条件表达式]
ORDER BY 字段 ASC|DESC LIMIT 记录数;
#数据删除的排序与限量
DELETE FROM 数据表名 [WHERE 条件表达式]
ORDER BY 字段 ASC|DESC LIMIT 记录数
UPDATE和DELETE操作中添加ORDER BY 表示根据指定的字段,按顺序更新或删除符合条件的记录。如果UPDATE和DELETE操作没有添加WHERE条件,则可以使用LIMIT来限制更新和删除的数量。
分组与聚合函数
分组
在MySQL中,可以使用GROUP BY 根据一个或多个字段进行分组,字段值相同的为一组。另外对于分组的数据可以使用HAVING进行条件筛选。
分组统计
在查询数据时,在WHERE条件后添加GROUP BY即可根据指定的字段进行分组。
SELETE [selete选项]字段列表 FROM 数据表名
[WHERE 条件表达式] GROUP BY 字段名;
分组排序
SELETE [selete选项] 字段列表 FROM 数据表名
[WHERE 条件表达式]
GROUP BY 字段名[ASC|DESC]
GROUP BY 分组排序的实现不需要使用ORDER BY,直接在分组字段后添加ASC(升序,默认可以省略)或DESC(降序)即可。
多分组统计
按照每个字段进行分组后,对已经分组的数据进行再次分组的操作,以实现多分组统计。
SELETE [selete选项]字段列表 FROM 数据表名
[WHERE 条件表达式]
GROUP BY 字段名1 [ASC|DESC],[,字段名2[ASC|DESC]]…;
回溯统计
回溯统计可以简单地理解为再根据指定字段分组后,系统又自动对分组的字段向上进行了一次新的统计并产生一个新的统计数据,且该数据对应的分组字段值为NULL。
SELETE [selete选项] 字段列表 FROM 数据表名
[WHERE 条件表达式]
GROUP BY 字段名1 [ASC|DESC],[,字段名2[ASC|DESC]]…WITH ROLLUP;
统计筛选
当对查询的数据进行分组操作时,可以利用HAVING 根据条件进行数据筛选,他与前面学习过的WHERE功能相同,但是在实际运用时两者有一定的区别。
SELETE [selete选项] 字段列表 FROM 数据表名
[WHERE 条件表达式]
GROUP BY 字段名 [ASC|DESC],…[WITH ROLLUP]
HAVING 条件表达式;
聚合函数
函数名 |
描述 |
---|---|
COUNT() |
返回参数字段的数量,不统计为NULL记录 |
SUM() |
返回参数字段值和 |
AVG() |
返回参数字段的平均值 |
MAX() |
返回参数字段的最大值 |
MIN() |
返回参数字段的最小值 |
GROUP_CONCAT() |
返回符合条件的参数字段值的连接字符串 |
JSON_ARRAYAGG() |
将符合条件的参数字段值作为单个JSON数组返回 |
JSON_OBJECTAGG() |
将符合条件的参数字段作为单个JSON对象返回 |
运算符
常用数学函数
运算符 |
描述 |
---|---|
CEIL(x) |
返回大于等于x的最小整数 |
FLOOR(x) |
返回小于等于x的最大整数 |
FORMAT(x) |
返回小数点后保留y位的x(进行四舍五入) |
ROUND(x[,y]) |
计算离x最近的整数;若设置参数y,与FORMAT(x,y)功能相同 |
TRUNCATE(x,y) |
返回小数点后保留y位的x(舍弃多余小数位,不进行四舍五入) |
ABS(x) |
获取x的绝对值 |
MOD(x,y) |
求模运算,与x%y功能相同 |
PI() |
计算圆周率 |
SQRT(x) |
求x的平方根 |
POW(x) |
幂运算函数,计算x的y次方,与POW(x,y)功能相同 |
RAND() |
默认返回0到1之间的随机数,包括0和1 |
比较函数
函数 |
描述 |
---|---|
IN() |
比较一个值是否在一组给定的集合内 |
NOT IN() |
比较一个值是否不再一组给定的集合内 |
GREATEST() |
返回最大的一个参数值,至少两个参数 |
LEAST() |
返回最小的一个参数值,至少两个参数 |
ISNULL() |
测试参数是否为空 |
COALESCE() |
返回第一个非空参数 |
INTERVAL() |
返回小于第一个参数的参数索引 |
STRCMP() |
比较两个字符串 |
- 大量redo生成的问题原因及改进(r6笔记第50天)
- Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,
- YOLO,一种简易快捷的目标检测算法
- Java基础-22总结转换流,随机访问流,合并流,序列化流,Properties
- openshift镜像构建
- 关于数据库无法登录的问题反思(r6笔记第49天)
- SQL中distinct的用法
- 数据结构是哈希表(hashTable)(一)
- 关于奇怪的并行进程分析(三)(r6笔记第47天)
- 数据结构是哈希表(hashTable)(二)
- Oracle的Replace函数与translate函数详解与比较
- 关于奇怪的并行进程分析(二) (r6笔记第46天)
- Linux性能分析工具与图形化方法
- MySQL和Oracle中的隐式转换(r6笔记第45天)
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- SQL-查询各工程项目使用所提供零件最多的供应商
- 浙大版《C语言程序设计(第3版)》题目集 习题8-3 数组循环右移
- SwiftUI:控制图像插值
- SQL-查询比p6零件供应数量都高的零件
- 浙大版《C语言程序设计(第3版)》题目集 习题8-5 使用函数实现字符串部分复制
- 最小生成树-Magicpig密室出逃(Kruskal+并查集)
- 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符
- SQL-显示供应商供应零件的汇总列表(with rollup+coalesce)
- 浙大版《C语言程序设计(第3版)》题目集 习题8-8 判断回文字符串
- 双向广搜-HDU1401 Solitaire
- TCP三次握手和四次挥手以及11种状态
- 浙大版《C语言程序设计(第3版)》题目集 题8-9 分类统计各类字符个数
- 迭代加深搜索-POJ 3134 Power Calculus
- 浙大版《C语言程序设计(第3版)》题目集 习题9-2 计算两个复数之积
- 浙大版《C语言程序设计(第3版)》题目集 习题9-6 按等级统计学生成绩