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值。

相关推荐
nongcunqq1 小时前
abap 操作 excel
java·数据库·excel
rain bye bye2 小时前
calibre LVS 跑不起来 就将setup 的LVS Option connect下的 connect all nets by name 打开。
服务器·数据库·lvs
冻咸鱼2 小时前
MySQL的配置
mysql·配置
遇印记3 小时前
大二java学习笔记:二维数组
java·笔记·学习
阿里云大数据AI技术3 小时前
云栖实录|MaxCompute全新升级:AI时代的原生数据仓库
大数据·数据库·云原生
不剪发的Tony老师3 小时前
Valentina Studio:一款跨平台的数据库管理工具
数据库·sql
weixin_307779134 小时前
在 Microsoft Azure 上部署 ClickHouse 数据仓库:托管服务与自行部署的全面指南
开发语言·数据库·数据仓库·云计算·azure
六元七角八分4 小时前
pom.xml
xml·数据库
虚行4 小时前
Mysql 数据同步中间件 对比
数据库·mysql·中间件
奥尔特星云大使4 小时前
mysql读写分离中间件Atlas安装部署及使用
数据库·mysql·中间件·读写分离·atlas