当前位置: 首页 > news >正文

SQL通用增删改查

零、文章目录

SQL通用增删改查

1、DML基础概念

(1)定义与作用
  • DML(Data Manipulation Language)用于操作数据库中的数据,核心功能包括数据的插入、更新、删除。
  • 与 DQL(查询)不同,DML 直接修改数据存储。
(2)主要操作类型
  • INSERT:向表中插入新数据
  • UPDATE:修改已有数据
  • DELETE:删除指定数据

2、数据增删改

(1)插入数据(INSERT)
-- 指定列插入 
INSERT INTO 表名 (1,2) 
VALUES (1,2);-- 全列插入(需按表结构顺序)
INSERT INTO 表名 
VALUES (1,2,3);-- 批量插入 
INSERT INTO 表名 (1,2)
VALUES (值A1, 值A2),(值B1, 值B2);
  • 注意事项:
    • 未指定列时默认插入所有字段,需确保值顺序与表结构一致
    • 批量插入可提升性能,但需注意单次操作的数据量限制
(2)更新数据(UPDATE)
UPDATE 表名 
SET1=新值1,2=新值2 
WHERE 条件;  -- 无WHERE则更新全表 -- 示例:带计算表达式 
UPDATE products 
SET price = price * 0.9 
WHERE category = '清仓区';
  • 关键点:
    • WHERE子句必须谨慎使用,避免误改全表数据
    • 支持通过子查询更新多表关联数据(如 UPDATE ... FROM ... 语法)
(3)删除数据(DELETE)
DELETE FROM 表名 
WHERE 条件;  -- 无WHERE则清空表 -- 清空表(DDL操作,不可回滚)
TRUNCATE TABLE 表名;
  • 区别对比:
操作可回滚性性能触发器触发
DELETE较慢
TRUNCATE极快
(4)事务控制(TRANSACTION)
  • DML 操作需配合事务语句保证原子性:
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;  -- 或 ROLLBACK 回滚
(5)注意事项
  • 更新/删除前通过 SELECT 验证条件准确性
  • 生产环境禁止无 WHERE 的 UPDATE/DELETE 操作
  • 重要数据操作前备份表(如 CREATE TABLE backup AS SELECT * FROM target

3、DQL 基础概念

(1)定义与作用
  • DQL(Data Query Language)用于从数据库中检索数据,核心语句是 SELECT
  • 它是 SQL 四大子语言之一(与 DDL、DML、DCL 并列),不修改数据,仅提供查询结果。
(2)通用语法结构
SELECT [DISTINCT]1,2, 聚合函数(...)  
FROM 表名 
[WHERE 条件] 
[GROUP BY 分组列] 
[HAVING 分组后条件] 
[ORDER BY 排序列 [ASC|DESC]] 
[OFFSET 分页参数];
(3)执行顺序
  • 非编写顺序:FROMWHEREGROUP BYHAVINGSELECTORDER BYOFFSET

4、数据查询

(1)基础查询(SELECT)
  • 查询指定列:SELECT name, age FROM employees;
  • 查询所有列:SELECT * FROM employees;(谨慎使用,可能影响性能)
  • 别名设置:SELECT salary AS 月薪 FROM employees;
  • 去重:SELECT DISTINCT department FROM employees;
(2)条件筛选(WHERE)
  • 运算符:=, >, <, BETWEEN, IN, LIKE, IS NULL
    示例:
SELECT * FROM employees 
WHERE age > 30 AND department = 'Sales';
  • 模糊查询:
    • LIKE '张%':以“张”开头的字符串
    • LIKE '%X':以“X”结尾的字符串(如身份证号)
(3)聚合函数与分组(GROUP BY)
聚合函数作用示例
COUNT()统计行数SELECT COUNT(*) FROM employees;
SUM()计算数值列总和SELECT SUM(salary) FROM employees;
AVG()计算平均值SELECT AVG(age) FROM employees;
MAX()/MIN()获取最大/最小值SELECT MAX(salary) FROM employees;
  • 分组统计:
SELECT department, AVG(salary) AS avg_salary 
FROM employees
GROUP BY department 
HAVING AVG(salary) > 10000;  -- HAVING 筛选分组结果 
  • WHERE vs HAVING:
    • WHERE:在分组前过滤,不可用聚合函数
    • HAVING:在分组后过滤,可用聚合函数
(4)排序与分页(ORDER BY)
  • 排序(ORDER BY):
SELECT * FROM employees 
ORDER BY salary DESC, name ASC; -- 先按薪资降序,再按姓名升序
  • 分页标准 SQL:OFFSET 起始行 FETCH NEXT 条数 ROWS ONLY
(5)多表连接查询(JOIN)
连接类型语法示例作用
内连接(INNER JOIN)SELECT * FROM A INNER JOIN B ON A.id=B.id返回两表匹配的行
左连接(LEFT JOIN)SELECT * FROM A LEFT JOIN B ON A.id=B.id返回左表全部 + 右表匹配行
右连接(RIGHT JOIN)SELECT * FROM A RIGHT JOIN B ON A.id=B.id返回右表全部 + 左表匹配行
全连接(FULL JOIN)SELECT * FROM A FULL JOIN B ON A.id=B.id返回两表所有行(MySQL 需用 UNION 模拟)
(6)子查询
  • 嵌套在 WHERE/FROM/SELECT 中的查询
SELECT name 
FROM employees 
WHERE salary > (SELECT AVG(salary) FROM employees); 
(7)联合查询(UNION)
  • UNION:合并多个查询结果(自动去重)
  • UNION ALL:保留重复结果
SELECT city FROM table1 
UNION 
SELECT city FROM table2;
http://www.dtcms.com/a/290218.html

相关文章:

  • windows安装运行triton出现的问题
  • 【每天一个知识点】非参聚类(Nonparametric Clustering)
  • 【深度学习笔记 Ⅱ】11 学习率衰减
  • I2S音频的时钟
  • 第11天 |openGauss逻辑结构:数据库管理
  • 音视频学习(四十二):H264帧间压缩技术
  • CCLink IE转ModbusTCP网关与三菱PLC通讯无纸记录器
  • 大腾智能国产3D CAD软件正式上架华为云云商店
  • OR条件拆分:避免索引失效的查询重构技巧
  • Kafka 如何优雅实现 Varint 和 ZigZag 编码
  • 代码随想录算法训练营第二十七天
  • LLMs之Grok系列:Grok-4的简介、安装和使用方法、案例应用之详细攻略
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现打架检测(C#代码,UI界面版)
  • Go-通俗易懂垃圾回收及运行过程
  • 每日面试题11:JVM
  • Ubuntu 22.04 安装 Jdk 8和 Tomcat (安装包形式)
  • Three.js 从零入门:构建你的第一个 Web 3D 世界
  • 破除扫描边界Photoneo MotionCam-3D Color 解锁动态世界新维度
  • 计算机网络第四章(3)——网络层《IPV4(子网划分、子网掩码)》
  • datasophon下dolphinscheduler执行脚本出错
  • 突破密度瓶颈:PCIe 8xCAN 多通道接口技术解析
  • react 录音功能
  • ODB安装与使用
  • 部署zabbix企业级分布式监控
  • 智慧场景:定制开发开源AI智能名片S2B2C商城小程序赋能零售新体验
  • SLAM实战——13章代码学习及回环检测的补充
  • STM32-第九节-ADC模数转换
  • ❗量化模型构建回测框架
  • 【2025/07/21】GitHub 今日热门项目
  • 【HTTP缓存机制深度解析:从ETag到实践策略】