SQL常用语句(DML)

本文详细介绍了SQL的DML语句,包括SELECT的基本查询、多表查询、子查询、分组查询和聚合函数;UPDATE的基本用法;DELETE的条件删除和清空表操作;以及INSERT INTO的多种插入数据方式。通过这些内容,读者可以全面理解如何在数据库中进行数据操纵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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:指定操作是优先执行的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值