欢迎光临
我们一直在努力

Oracle常用命令零基础到深入完整教程

本文从零基础入门到高阶实战,循序渐进讲解Oracle开发、运维日常用到的核心命令,涵盖基础查询、条件筛选、分组统计、多表关联、DDL结构操作、DML数据操作、事务控制、高阶函数、性能优化等核心内容,所有命令均适配企业实际开发场景,零基础可直接对照学习、复用实操。

一、零基础入门:Oracle基础核心命令

本章节适合完全零基础用户,掌握Oracle最基础的连接、查询、数据筛选语法,是所有操作的核心基石。

1.1 数据库基础连接与查看命令

用于本地/服务器连接数据库、查看基础信息,是操作Oracle的第一步。

— 1. 命令行连接数据库(服务器终端使用)

sqlplus 用户名/密码@IP:端口/数据库实例名

— 2. 查看当前登录用户

SELECT USER FROM DUAL;

— 3. 查看数据库版本

SELECT * FROM V$VERSION;

— 4. 查看当前系统时间(Oracle无直接now(),固定用法)

SELECT SYSDATE FROM DUAL;

— 5. 退出数据库连接

EXIT;

知识点:DUAL是Oracle虚拟表,专门用于查询常量、系统函数、系统参数,无需查询真实业务表。

1.2 基础查询语句(核心SELECT)

SELECT是Oracle最常用的核心命令,用于查询表数据,语法通用且高频使用。

— 查询表所有字段(*代表全部字段)

SELECT * FROM 表名;

— 查询指定字段(企业开发优先用指定字段,禁止滥用*)

SELECT 字段1,字段2,字段3 FROM 表名;

— 字段别名展示(AS可省略,别名支持中文)

SELECT a 编号,b 名称,SYSDATE 当前时间 FROM 表名;

— 去重查询

DISTINCT SELECT DISTINCT a,b,c FROM 表名;

1.3 基础条件筛选 WHERE

用于精准过滤数据,支持比较、模糊、区间、空值判断,日常查询必备。

— 等值查询

SELECT * FROM 表名 WHERE a = '1001';

— 区间查询(大于、小于、区间范围)

SELECT * FROM 表名 WHERE num > 10 AND num < 100;

SELECT * FROM 表名 WHERE num BETWEEN 10 AND 100;

— 模糊查询 %匹配任意字符,_匹配单个字符

SELECT * FROM 表名 WHERE name LIKE '%张三%';

— 空值、非空查询(重点:Oracle空值必须用IS判断,不能用=)

SELECT * FROM 表名 WHERE age IS NULL;

SELECT * FROM 表名 WHERE age IS NOT NULL;

— 枚举查询 IN

SELECT * FROM 表名 WHERE a IN ('01','02','03');

1.4 排序与分页(基础数据整理)

— 排序:ASC升序(默认)、DESC降序

SELECT * FROM 表名 ORDER BY create_time DESC;

— Oracle基础分页(ROWNUM 伪列分页,11g及以下通用),查询11-20条数据

SELECT * FROM ( SELECT 字段1,字段2,ROWNUM rn FROM 表名 WHERE ROWNUM <= 20 ) WHERE rn > 10;

二、进阶实操:日常开发高频核心命令

掌握基础后,本章节聚焦企业开发最常用的分组统计、多表查询、数据增删改、事务控制,覆盖80%日常业务场景。

2.1 分组统计 GROUP BY(重点)

核心规则:SELECT后只能写分组字段、聚合函数,多余字段需通过高阶语法处理(后文深入讲解)。

— 基础分组:按a、b分组,统计数量、总和

SELECT a,b, COUNT(*) 数据总数, SUM(amount) 总金额, MAX(create_time) 最新时间, MIN(score) 最低分数 FROM 业务表 GROUP BY a,b;

— 分组后条件过滤(HAVING,分组后过滤,WHERE分组前过滤), 只展示总金额大于1000的分组

SELECT a,b,SUM(amount) 总金额 FROM 业务表 GROUP BY a,b HAVING SUM(amount) > 1000;

2.2 多表关联查询(双表/多表)

Oracle四大关联方式:内连接、左连接、右连接、全连接,开发最常用左连接。

— 1. 内连接 INNER JOIN:只查询两张表匹配的数据

SELECT t1.*,t2.name FROM 表1 t1 INNER JOIN 表2 t2 ON t1.a = t2.a;

— 2. 左连接 LEFT JOIN:左表数据全部保留,右表匹配不到显示空(开发首选)

SELECT t1.a,t1.b,t2.d,t2.f FROM 表1 t1 LEFT JOIN 表2 t2 ON t1.a = t2.a AND t1.b = t2.b;

— 3. 右连接 RIGHT JOIN、全连接 FULL JOIN

SELECT * FROM 表1 t1 RIGHT JOIN 表2 t2 ON t1.a = t2.a;

SELECT * FROM 表1 t1 FULL JOIN 表2 t2 ON t1.a = t2.a;

2.3 数据增删改 DML命令

所有修改数据的操作,必须搭配事务控制,避免数据异常。

— 1. 新增数据

INSERT INTO 表名(字段1,字段2,字段3) VALUES ('值1','值2',SYSDATE);

— 2. 批量新增(查询结果插入新表)

INSERT INTO 新表(字段1,字段2) SELECT 字段1,字段2 FROM 旧表;

— 3. 修改数据(务必加WHERE条件,否则全表更新)

UPDATE 表名 SET 字段1='新值',字段2=100 WHERE a='1001';

— 4. 删除数据

DELETE FROM 表名 WHERE a='1001'; — 条件删除

TRUNCATE TABLE 表名; — 清空全表,不可回滚、速度极快

2.4 事务控制命令(重中之重)

Oracle默认事务未自动提交,增删改必须手动提交,否则数据不生效。

COMMIT; — 提交事务,数据永久生效

ROLLBACK; — 回滚事务,撤销所有未提交的增删改操作

开发规范:测试环境先执行SQL,确认无误后COMMIT;操作失误立即ROLLBACK回滚。

2.5 表结构操作 DDL命令

— 1. 查询表结构

DESC 表名;

— 2. 新增字段

ALTER TABLE 表名 ADD 新字段 VARCHAR2(50);

— 3. 修改字段类型/长度

ALTER TABLE 表名 MODIFY 字段 NUMBER(10);

— 4. 删除字段

ALTER TABLE 表名 DROP COLUMN 字段名;

— 5. 重命名表

RENAME 旧表名 TO 新表名;

— 6. 创建索引(优化查询速度)

CREATE INDEX 索引名 ON 表名(字段1,字段2);

三、深入进阶:企业高阶实战命令

针对开发中复杂场景:分组取最新数据、多表合并去重、字段拼接、数据判重、窗口函数高阶用法,解决日常疑难问题。

3.1 分组取最新一条数据(高频业务场景)

解决需求:按a、b、c分组,每组保留最新一条数据,带出d、f、g、h多余字段(解决分组多余字段报错问题)。

— 单表分组取最新(通用最优写法)

SELECT a,b,c,d,f,g,h FROM ( SELECT a,b,c,d,f,g,h, ROW_NUMBER() OVER(PARTITION BY a,b,c ORDER BY create_time DESC) rn FROM 业务表 ) t WHERE rn = 1;

3.2 两张表合并分组取最新数据

合并两张结构相同的表数据,统一分组、取每组最新记录,企业报表、数据汇总高频使用。 合并两张表所有数据,UNION ALL性能远优于UNION

SELECT a,b,c,d,f,g,h FROM ( SELECT a,b,c,d,f,g,h, ROW_NUMBER() OVER(PARTITION BY a,b,c ORDER BY create_time DESC) rn FROM (

SELECT a,b,c,d,f,g,h,create_time FROM 表1 UNION ALL SELECT a,b,c,d,f,g,h,create_time FROM 表2 ) all_data ) t WHERE rn = 1;

3.3 分组多余字段终极解决方案

解决ORA-00979:不是GROUP BY表达式报错,两种高阶写法:

— 写法1:KEEP函数(Oracle独有,单层查询,性能高)

SELECT a,b,c, MAX(d) KEEP(DENSE_RANK LAST ORDER BY create_time) d, MAX(f) KEEP(DENSE_RANK LAST ORDER BY create_time) f FROM 业务表 GROUP BY a,b,c;

— 写法2:LISTAGG 分组字段拼接(多值合并为字符串)

SELECT a,b,c, LISTAGG(d,',') WITHIN GROUP(ORDER BY create_time) d拼接内容 FROM 业务表 GROUP BY a,b,c;

3.4 常用高阶函数

— 1. 空值替换 NVL(核心常用)

SELECT NVL(字段,0) 字段 FROM 表名; — 空值转为0

— 2. 条件判断 CASE WHEN

SELECT 字段, CASE WHEN score >=90 THEN '优秀' WHEN score >=60 THEN '及格' ELSE '不及格' END 等级 FROM 表名;

— 3. 时间格式化

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') 当前时间 FROM DUAL;

— 4. 字符串转日期

SELECT TO_DATE('2026-06-14','YYYY-MM-DD') 转换日期 FROM DUAL;

四、性能优化与运维常用命令

深入开发必备,解决查询卡顿、慢SQL排查、索引优化、数据统计问题。

4.1 慢SQL排查

— 查看执行计划(分析SQL性能瓶颈,必备优化命令) EXPLAIN PLAN FOR 你的SQL语句; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());

4.2 索引运维命令

— 查看表所有索引

SELECT * FROM USER_INDEXES WHERE TABLE_NAME='表名';

— 删除索引

DROP INDEX 索引名;

4.3 数据统计与排查

— 统计表数据量

SELECT COUNT(*) FROM 表名;

— 查询重复数据(按a,b,c判重)

SELECT a,b,c,COUNT(*) 重复次数 FROM 表名 GROUP BY a,b,c HAVING COUNT(*) > 1;

五、高频报错避坑总结

  • ORA-00979:GROUP BY 表达式错误,SELECT字段必须是分组字段或聚合函数,用窗口函数/KEEP函数解决

  • ORA-01489:LISTAGG拼接超长,改用XMLAGG函数

  • 空值查询无效:禁止使用=NULL,必须用IS NULL/IS NOT NULL

  • 全表更新/删除:增删改务必加WHERE条件,操作前先SELECT校验数据

  • 事务未提交:DML操作后必须执行COMMIT,否则他人无法查询到最新数据

六、学习总结

1. 零基础核心:掌握SELECT查询、WHERE筛选、增删改、事务,满足基础数据查询和维护;

2. 进阶核心:精通GROUP BY分组、多表JOIN关联、事务控制、常用函数,覆盖日常80%业务开发;

3. 深入核心:掌握窗口函数分组取最新、多表合并查询、SQL性能优化,解决复杂业务场景和性能问题;

4. 开发规范:优先使用指定字段查询、左连接、事务手动提交,拒绝全表操作、滥用*、不规范分组。

赞(0)
未经允许不得转载:171主机测评 » Oracle常用命令零基础到深入完整教程
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址