You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SELECT语句向表中插入数据的SQL实现及建议咨询

SQL插入语句优化与正确性建议

正确性检查

  • 字段匹配:你的语句中插入字段和SELECT返回字段的顺序、数据类型完全匹配,这部分没问题。但userid生成逻辑里的substr(FIRST_NAME,1,1)||''||substr(LAST_NAME,1,7)存在冗余,空字符串拼接毫无意义,直接写成substr(FIRST_NAME,1,1)||substr(LAST_NAME,1,7)即可,结果完全一致。
  • ID唯一性验证:如果ID是表的主键或带有唯一约束,必须确保表中不存在3、4这两个ID值,否则执行时会触发唯一性冲突报错。

优化建议

  • 替换UNION为UNION ALL:你插入的两条数据ID明确不同,不存在重复可能,用UNION ALL可以跳过数据库的重复数据校验步骤,提升执行效率,插入数据量越多,效率差异越明显。
  • 简化多数据行插入写法:Oracle中插入多条固定值数据,没必要拆成多个SELECT再拼接,改成子查询聚合的方式结构更清晰,维护更方便,示例如下:
INSERT into HR.my_employees
(ID,LAST_NAME,FIRST_NAME,userid,SALARY)
SELECT 
    id, last_name, first_name, 
    substr(first_name,1,1)||substr(last_name,1,7) AS userid, 
    salary
FROM (
    SELECT 3 AS id, 'Biri' AS last_name, 'Ben' AS first_name, 1100 AS salary FROM dual
    UNION ALL
    SELECT 4 AS id, 'Newman' AS last_name, 'Chad' AS first_name, 750 AS salary FROM dual
);

如果使用Oracle 12c及以上版本,还能采用更简洁的写法:

INSERT into HR.my_employees
(ID,LAST_NAME,FIRST_NAME,userid,SALARY)
SELECT 
    id, last_name, first_name, 
    substr(first_name,1,1)||substr(last_name,1,7) AS userid, 
    salary
FROM (
    VALUES 
        (3, 'Biri', 'Ben', 1100),
        (4, 'Newman', 'Chad', 750)
) t(id, last_name, first_name, salary);
  • 统一字段大小写:Oracle中未用双引号定义的字段默认是大写,你语句里使用了小写的userid、salary,虽然Oracle不区分大小写,但建议和表结构定义的写法保持一致,避免潜在问题。

内容的提问来源于stack exchange,提问作者Jony_Junior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:40:27