当前位置:首页 > 问答 > 正文

数据库里那些常用的SQL语句,平时操作中经常会用到的一些技巧和方法

基础查询与操作

  1. 查询数据
    SELECT * FROM 表名 WHERE 条件; —— 查全部数据
    SELECT 列1,列2 FROM 表名 ORDER BY 列1 DESC; —— 选特定列并倒序排列
    SELECT DISTINCT 列名 FROM 表名; —— 去重查询

  2. 插入数据
    INSERT INTO 表名 (列1,列2) VALUES (值1,值2); —— 插入单条
    INSERT INTO 表名 SELECT ... FROM 另一表; —— 从其他表导入数据

  3. 更新与删除
    UPDATE 表名 SET 列1=新值 WHERE 条件; —— 更新指定行
    DELETE FROM 表名 WHERE 条件; —— 删除数据(注意加条件避免全表删除)

关联查询技巧

  1. 多表关联

    • 内连接:SELECT * FROM 表A INNER JOIN 表B ON A.id=B.id; —— 只返回匹配的行
    • 左连接:SELECT * FROM 表A LEFT JOIN 表B ON A.id=B.id; —— 保留左表全部数据
    • 实际案例:查询订单时连带用户信息,常用左连接避免丢失订单数据
  2. 联合查询
    SELECT 列 FROM 表A UNION SELECT 列 FROM 表B; —— 合并结果并去重

    数据库里那些常用的SQL语句,平时操作中经常会用到的一些技巧和方法

数据统计与分组

  1. 聚合函数
    COUNT()统计行数,SUM()求和,AVG()求平均值,MAX()/MIN()找最值
    示例:SELECT COUNT(*) FROM 订单表 WHERE 日期>'2023-01-01';

  2. 分组筛选
    GROUP BY 分组后,用 HAVING 过滤分组结果(与WHERE区别:WHERE在分组前过滤)
    示例:SELECT 部门,AVG(工资) FROM 员工表 GROUP BY 部门 HAVING AVG(工资)>5000;

子查询与条件优化

  1. 子查询应用

    • 在WHERE中:SELECT 姓名 FROM 员工 WHERE 部门ID IN (SELECT ID FROM 部门 WHERE 名称='销售');
    • 在SELECT中:SELECT 订单号,(SELECT 姓名 FROM 客户 WHERE ID=订单.客户ID) AS 客户名 FROM 订单;
  2. 条件简化技巧

    数据库里那些常用的SQL语句,平时操作中经常会用到的一些技巧和方法

    • BETWEEN替代范围:WHERE 年龄 BETWEEN 20 AND 30
    • IN替代多个OR:WHERE 城市 IN ('北京','上海')
    • 模糊查询:WHERE 姓名 LIKE '张%'(%代表任意字符)

日期处理

  1. 常用函数
    • NOW()获取当前时间
    • DATE_FORMAT(日期列,'%Y-%m-%d') 格式化日期
    • DATEDIFF(日期1,日期2) 计算日期差
      示例:SELECT * FROM 日志 WHERE DATE(创建时间)='2023-10-01';

分页查询
LIMIT 实现分页(MySQL用法):
SELECT * FROM 产品表 ORDER BY 价格 DESC LIMIT 10 OFFSET 20; —— 跳过20条取10条(即第3页)

数据操作注意事项

  1. 事务处理
    重要操作加事务保证数据安全:

    BEGIN;  
    UPDATE 账户 SET 余额=余额-100 WHERE 用户ID=1;  
    UPDATE 账户 SET 余额=余额+100 WHERE 用户ID=2;  
    COMMIT;  

    出错时可用ROLLBACK回滚

  2. 性能优化点

    数据库里那些常用的SQL语句,平时操作中经常会用到的一些技巧和方法

    • 查询时尽量不用SELECT *,只取需要的列
    • 频繁查询的列建立索引(但注意索引会降低写入速度)
    • 避免在WHERE中对字段进行函数计算(如WHERE YEAR(日期)=2023会导致索引失效)

实用小技巧

  1. 快速备份表
    CREATE TABLE 新表名 AS SELECT * FROM 原表;

  2. 数据去重保留一条
    使用窗口函数(如MySQL的ROW_NUMBER())或分组后删除重复项

  3. 处理空值
    COALESCE(列名, 默认值) 将NULL转为默认值

  4. 条件判断
    CASE WHEN 条件 THEN 结果1 ELSE 结果2 END 实现类似编程中的if-else逻辑

这些语句和技巧覆盖了日常80%的数据库操作场景,实际使用时需结合具体数据库类型调整语法细节(如SQL Server的分页用TOP,Oracle用ROWNUM),重点注意操作前备份数据,尤其执行UPDATE或DELETE时先写SELECT确认条件范围。

(综合参考:《SQL必知必会》第5版、MySQL 8.0官方手册、Stack Overflow常见问题整理)

备用