MySQL之DML操作

DML是指数据操作语言,英文全称是Data Manipulation Language,用来对数据库中表的记录进行更新。
有关数据表的DML操作:

INSERT INTO

DELETE、TRUNCATE

UPDATE

SELECT

条件查询

查询排序

聚合函数

分组查询

1.1 INSERT语句

sql 复制代码
INSERT INTO 表名 [字段列表] VALUES (值列表);
默认情况下,一次插入操作只插入一行

一次性插入多条记录:
INSERT INTO table [(column [, column...])] 
	VALUES(value [, value...]),(value [, value...])
	
如果为每列都指定值,则表名后不需列出插入的列名
如果不想在表名后列出列名,可以为那些无法指定的值插入null
可以使用如下方式一次插入多行
	INSERT INTO 表名 [字段列表] SELECT 值列表 UNION 值列表 UNION 值列表....;
    语句------可以非常复杂。
	
如果需要插入其他特殊字符,应该采用\转义字符做前缀

1.2 REPLACE语句

sql 复制代码
replace语句的语法格式有三种语法格式。

语法格式1:replace into 表名 [(字段列表)] values (值列表)

语法格式2:
	replace [into] 目标表名[(字段列表1) select (字段列表2) from 源表 where 条件表达式
	
语法格式3:
	replace [into] 表名 set 字段1=值1, 字段2=值2
REPLACE与INSERT语句区别:

replace语句的功能与insert语句的功能基本相同,不同之处在于:使用replace语句向表插入新记录时,如果新记录的主键值或者唯一性约束的字段值与已有记录相同,则已有记录先被删除(注意:已有记录删除时也不能违背外键约束条件),然后再插入新记录。

使用replace的最大好处就是可以将delete和insert合二为一(效果相当于更新),形成一个原子操作,这样就无需将delete操作与insert操作置于事务中了

1.3 UPDATE语句

sql 复制代码
UPDATE 表名 SET
列名 = 新的值
[,列名 = 新的值,列名 = 新的值]
[WHERE 条件];

修改可以一次修改多行数据,修改的数据可用where子句限定,where子句里是一个条件表达式,只有符合该条件的行才会被修改。没有where子句意味着where字句的表达式值为true。也可以同时修改多列,多列的修改中间采用逗号(,)隔开。

1.4 delete和TRUNCATE语句

sql 复制代码
DELETE FROM 表名 [WHERE 条件];
TRUNCATE FROM 表名 [WHERE 条件];

完全清空一个表。 DDL语句。

DROP、TRUNCATE、DELETE的区别:

delete:删除数据,保留表结构,可以回滚,如果数据量大,很慢

truncate: 删除所有数据,保留表结构,不可以回滚,一次全部删除所有数据,速度相对很快

drop: 删除数据和表结构,删除速度最快。

1.5 SELECT语句

语法:
sql 复制代码
SELECT 需要查询的列
FROM 表名 [,其余表]
[连接机制]
[WHERE 条件]
[GROUP BY 分组条件]
[ORDER BY 排序条件]
[LIMIT 区间条件];
简单的SELLECT语句:
sql 复制代码
SELECT {*, column [alias],...}
FROM table;

说明:
--SELECT列名列表。*表示所有列。
--FROM 提供数据源(表名/视图名)
--默认选择所有行
SELECT语句中的算数表达式:
sql 复制代码
对数值型数据列、变量、常量可以使用算数操作符创建表达式(+ - * /)
对日期型数据列、变量、常量可以使用部分算数操作符创建表达式(+ -)
运算符不仅可以在列和常量之间进行运算,也可以在多列之间进行运算。
	SELECT last_name, salary, salary*12
	FROM employees;
	
补充:+说明
-- MySQL的+默认只有一个功能:运算符
SELECT 100+80; # 结果为180
SELECT '123'+80; # 只要其中一个为数值,则试图将字符型转换成数值,转换成功做预算,结果为203
SELECT 'abc'+80; # 转换不成功,则字符型数值为0,结果为80
SELECT 'This'+'is'; # 转换不成功,结果为0
SELECT NULL+80; # 只要其中一个为NULL,则结果为NULL
运算符的优先级:

乘法和除法的优先级高于加法和减法

同级运算的顺序是从左到右

表达式中使用括号可强行改变优先级的运算顺序

NULL值的使用:

空值是指不可用、未分配的值

空值不等于零或空格

任意类型都可以支持空值

包括空值的任何算术表达式都等于空

字符串和null进行连接运算,得到也是null.

安全等于<=>

1.可作为普通运算符的=

2.也可以用于判断是否是NULL 如:where salary is NULL/(is not NULL) ->where salary

<=>NULL

定义字段别名:
sql 复制代码
改变列的标题头
用于表示计算结果的含义
作为列的别名
如果别名中使用特殊字符,或者是强制大小写敏感,或有空格时,都可以通过为别名添加加双引号实现。
    SELECT last_name as "姓名", salary "薪水"
    FROM employees;
重复记录:
sql 复制代码
缺省情况下查询显示所有行,包括重复行
    SELECT department_id      部门id
    FROM employees;           员工表
    
使用DISTINCT关键字可从查询结果中清除重复行
    SELECT DISTINCT department_id
    FROM employees;

1.6 多表关联查询

sql 复制代码
1. inner join:代表选择的是两个表的交差部分。
 内连接就是表间的主键与外键相连,只取得键值一致的,可以获取双方表中的数据连接方式。语法如下:
 SELECT 列名1,列名2... FROM 表1 INNER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;
 
2. left join:代表选择的是前面一个表的全部。
左连接是以左表为标准,只查询在左边表中存在的数据,当然需要两个表中的键值一致。语法如下:
SELECT 列名1 FROM 表1 LEFT OUTER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;

3. right join:代表选择的是后面一个表的全部
同理,右连接将会以右边作为基准,进行检索。语法如下:
SELECT 列名1 FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;
联合查询

说明:一般情况下,我们会将 IN 或者 OR 语句 改写成 UNION ALL,来提高性能

UNION 去重复

UNION ALL 不去重复

1.7 SQL函数

聚合函数

聚合函数对一组值进行运算,并返回单个值。也叫组合函数。

COUNT(*|列名) 统计行数

AVG(数值类型列名) 平均值

SUM (数值类型列名) 求和

MAX(列名) 最大值

MIN(列名) 最小值

除了COUNT()以外,聚合函数都会忽略NULL值。

相关推荐
xcLeigh7 分钟前
KingbaseES 的卢智能运维体架构深度拆解
运维·数据库·人工智能·ai·架构·ffmpeg·智能体
龙仔72517 分钟前
RustDesk 完整笔记
运维·笔记·rust·远程工具·rustdesk
HJX_072437 分钟前
嵌入式软件C语言八股文复习笔记5——编译、链接与底层硬核机制
c语言·开发语言·笔记
weixin_397574091 小时前
按行业定制分析视角
大数据·数据库·人工智能·企业数据治理·数据驱动决策·本体语义·企业经营分析
鹿角片ljp1 小时前
Redis 深度复习:从入门到面试通关
数据库·redis·面试
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 监控指标 Metrics 阅读笔记
java·spring boot·笔记
Ming_studying1 小时前
Python + SQLite FTS5 构建本地文档全文搜索器:增量索引、中文检索与高亮
jvm·数据库·python·sqlite
云和恩墨2 小时前
从静态备份到极速恢复:zData S重构多元数据库时代的“第二存储”底座
数据库·重构
噜~噜~噜~2 小时前
操作系统笔记-1.1.3 操作系统的特征
笔记·操作系统
吴声子夜歌2 小时前
MongoDB 8.0——存储
数据库·mongodb