DML(Data Manipulation Language)
数据库操作语言:
- SELECT
- UPDATE
- DELETE
- INSERT INTO
SELECT
基本查询
- 查询表中所有的列:
SELECT A.xx, B.xx FROM 表1 AS A, 表2 AS B [WHERE表达式] [GROUP BY xx] [ORDER BY xx] [HAVING表达式] [LIMIT 行数];
| WHERE表达式操作符 | 说明 |
|---|---|
| = | 等于 |
| > | 大于 |
| < | 小于 |
| !=或<> | 不等于 |
| BETWEEN m AND n | 大于等于m,小于等于n |
| NOT | 不符合条件 |
| IS NULL | 是NULL |
| AND | 复合条件查询,条件同时成立 |
| OR | 符合条件查询,有一个条件成立即可 |
| IN | 在范围内 |
| REGEX | 正则匹配,后接匹配模式 |
| LIKE | 模糊查询,一般和通配符一起使用 |
| 通配符 | 说明 |
|---|---|
| _ | 代表1位字符 |
| % | 代表多位(>=1)字符 |
| [ ] | 代表匹配方括号中任意1个字符 |
多表查询
- 多表连接查询:
SELECT 表1.列1,表2.列2 FROM 表1 JOIN 表2 ON 表1.列1=表2.列2;
| 连接方式 | 说明 |
|---|---|
| INNER JOIN | 同JOIN,只返回两个表中联结字段相等的记录 |
| LEFT JOIN | 返回左表中所有记录和右表中联接字段相等的记录 |
| RIGHT JOIN | 返回右表中所有记录和左表中联接字段相等的记录 |
| FULL JOIN | 返回左表和右表中的所有记录,即LEFT JOIN和RIGHT JOIN的并集 |
HAVING和WHERE的区别:
1.HAVING是筛选组,一般和GROUP BY一起使用;
2.WHERE是筛选记录
- 合并多个SELECT语句的结果集(列数和数据类型需相同):
SELECT 列名 FROM 表1 UNION SELECT 列名 FROM 表2;
合计函数
- 返回某数值列的平均值(不含值为NULL的行):
SELECT AVG(列名) FROM 表名 WHERE 条件; - 返回某列某个值的数目(不含值为NULL的行):
SELECT COUNT(列名) FROM 表名 WHERE 条件; - 返回某列某个值的所有数目(含值为NULL的行):
SELECT COUNT(*) FROM 表名 WHERE 条件; - 返回某列的第一条数据:
SELECT FIRST(列名) FROM 表名 WHERE 条件; - 返回某列的最后一条数据:
SELECT LAST(列名) FROM 表名 WHERE 条件; - 返回某列中的最大值:
SELECT MAX(列名) FROM 表名 WHERE 条件; - 返回某列中的最小值:
SELECT MIN(列名) FROM 表名 WHERE 条件; - 返回某数值列的总和:
SELECT SUM(列名) FROM 表名 WHERE 条件;
子查询嵌套
- 内层语句返回一个集合,在集合内才执行外层查询语句
SELECT xx FROM 表名 WHERE xx IN (SELECT内层语句); - 内层语句返回一个真假值,为真才执行外层查询语句:
SELECT xx FROM 表名 WHERE EXISTS (SELECT内层语句); - 满足内层查询语句结果中的任意一个,就执行外层查询语句:
SELECT xx FROM 表名 WHERE xx 条件 ANY (SELECT内层语句); - 满足内层查询语句结果中的所有,才执行外层查询语句:
SELECT xx FROM 表名 WHERE xx 条件 ALL (SELECT内层语句);
分组查询
- 分组查询(常与合计函数一起使用):
SELECT 列名, 合计函数(列名)... FROM 表名 WHERE 条件 GROUP BY 列名 HAVING 条件;
其他函数
- 查询时将字段转换为大写:
SELECT UCASE(列名) FROM 表名; - 查询时将字段转换为小写:
SELECT LCASE(列名) FROM 表名; - 返回文本字段值的长度:
SELECT LEN(列名) FROM 表名; - 返回数值四舍五入后的结果:
SELECT ROUND(列名, 保留的小数位数) FROM 表名; - 拼接字段(拼接内容均使用半角逗号隔开):
SELECT Concat(列名1, 列名2...) FROM 表名 - 去掉字符串右侧空格:
SELECT RTRIM(列名) FROM 表名 - 去掉字符串左侧空格:
SELECT LTRIM(列名) FROM 表名 - 去掉字符串两边的空格:
SELECT TRIM(列名) FROM 表名
UPDATE
基本用法
- 更新指定列的值:
UPDATE [LOW_PRIORITY] [IGNORE] 表名 SET 字段1=值1,字段2=值2... [WHERE表达式] [ORDER BY...] [LIMIT 行数];
DELETE
基本用法
- 按条件删除:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM 表名 [WHERE表达式] [ORDER BY...] [LIMIT 行数]; - 清空表:
TRUNCATE [TABLE] 表名;
DELETE和TRUNCATE的区别:
1.TRUNCATE后表的AUTO_INCREMENT计数器会重新设置为该列的初始值;
2.参与索引或者视图的表,不能使用TRUNCATE,应该使用DELETE;
3.TRUNCATE使用的系统和事务日志资源更少,TRUNCATE记录页的释放,DELETE逐条记录
INSERT INTO
基本用法
- 按列插入值:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] 表名 [字段名, ...] VALUES ([值 | DEFAULT]), (...) [ON DUPLICATE KEY UPDATE 字段名=表达式, ...]; - 将从表2中检索出的数据插入到表1中:
INSERT INTO 表名1(列名1, 列名2...) SELECT 列名1, 列名2... FROM 表名2 - 从表2复制数据到表1:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] 表名 [字段名, ...] SELECT语句 [ON DUPLICATE KEY UPDATE 字段名=表达式, ...]; - 插入数据同时设置值:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] 表名 SET 字段名={值|DEFAULT}, ... [ON DUPLICATE KEY UPDATE 字段名=表达式, ...];
[LOW_PRIORITY | DELAYED | HIGH_PRIORITY]
1.LOW_PRIORITY:应用于多用户访问数据库的情况,可降低优先级;
2.DELAYED:用于指定MySQL服务器把待插入的行数据放到一个缓冲器重,待到插入数据的表空闲时,才真正在表中插入行;
3.HIGH_PRIORITY:指定操作是优先执行的
本文详细介绍了SQL的DML语句,包括SELECT的基本查询、多表查询、子查询、分组查询和聚合函数;UPDATE的基本用法;DELETE的条件删除和清空表操作;以及INSERT INTO的多种插入数据方式。通过这些内容,读者可以全面理解如何在数据库中进行数据操纵。
505

被折叠的 条评论
为什么被折叠?



