让你1小时学会Oralce,熟悉SqlServe,但没用过Oracle,应该如何快速掌握Oracle语法?

一、引言:刚毕业只会SQL Server,不会Oracle怎么办?

对于很多刚毕业的学生来说,只要是软件方向的应该基本上都学过SQL Server,可能很多没有接触过Oracle,虽然Oracle数据库的许多概念确实非常相似,但魔鬼藏在细节中,在具体实现上存在诸多差异,这些差异可能会导致原本在SQL Server上运行良好的SQL语句在Oracle中无法工作。让初次接触Oracle的你无从下手。

本文将从实际应用角度出发,结合实际工作经验,重点介绍两种数据库在常见操作上的语法差异,帮助SQL Server用户快速掌握Oracle的核心语法。我们将从最基本的查询语句开始,一直深入到递归函数等高级特性,让你在1小时内建立起Oracle语法的整体认知框架。

另外本次只是Sql语法的讲解,默认数据库客户端和服务器环境已经搭建完成,如果不会网上有很多安装教程,如果有需要可以留言,后续我会再单独写下数据库的安装和配置。

二、相同的部分

两者都支持常见的数值类型,如整数类型(SqlServer 的 int ,Oracle 的 NUMBER )、字符类型(SqlServer 的 varchar ,Oracle 的 varchar2 )、日期类型(SqlServer 的 datetime ,Oracle 的 date )。这些基本数据类型为数据库的存储和处理提供了基础。

同时基础语法也都一样,相同部分不做过多介绍。

三、不同部分重点介绍

分页查询

分页查询是日常开发中最常用的操作之一,也是两种数据库差异最大的地方之一:

1、SQL Server使用TOP关键字实现简单分页:

   SELECT TOP 10 * FROM Orders ORDER BY CreateDate DESC

 2、Oracle则需要使用ROWNUM伪列,且需要三层嵌套查询实现标准分页

   SELECT * FROM (
     SELECT temp.*, ROWNUM RN FROM (
       SELECT * FROM Orders ORDER BY CreateDate DESC
     ) temp WHERE ROWNUM <= 10
   ) WHERE RN >= 1

 自增列

自增列的实现也完全不同

1、SQL Server使用IDENTITY属性:

   CREATE TABLE Users (
     ID INT IDENTITY(1,1) PRIMARY KEY,
     Name VARCHAR(50)
   )

使用的时候直接 insert into 表名(字段2,,字段3),其中字段1为自增列会自动进行插入,不需要sql中写出来

2、Oracle需要使用SEQUENCE序列对象 :

   CREATE SEQUENCE seq_user START WITH 1 INCREMENT BY 1;
   
   CREATE TABLE Users (
     ID NUMBER PRIMARY KEY,
     Name VARCHAR2(50)
   );
   --使用的时候需要主动用seq_user.NEXTVAL方式进行调用,需要写到sql中
   INSERT INTO Users VALUES (seq_user.NEXTVAL, '张三');

日期函数

日期函数是日常使用频率极高的功能,两种数据库的实现差异明显:

1、获取当前时间

这种方式一定要牢牢记住,在实际工作中会有大量的实际需求用到这一函数。另外这里重点强调下oracle函数的 dual函数,这是一个空函数,目的是为了执行一个方法的时候需要保持语法一致性,所以衍生了这么一个函数。

SQL Server:  SELECT GETDATE()
Oracle:      SELECT SYSDATE FROM dual

dual函数的使用场景

--其主要作用是在需要返回单行单列结果,却又无需从实际数据表中获取数据时发挥功能
--执行简单计算
SELECT 1 + 2 AS result FROM DUAL; -- 输出:3
--调用系统函数
SELECT SYSDATE FROM DUAL;         -- 返回当前日期和时间
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL; -- 格式化日期
SELECT LENGTH('Hello') FROM DUAL; -- 计算字符串长度,输出:5

2、日期加减

日期加减差异也很大

SQL Server直接使用加减:
     SELECT DATEADD(DAY, 1, GETDATE()) -- 加1天

Oracle对日期的加减更灵活 
     SELECT SYSDATE + 1 FROM dual; -- 加1天
     SELECT SYSDATE + 1/24 FROM dual; -- 加1小时
     SELECT ADD_MONTHS(SYSDATE, 1) FROM dual; -- 加1个月

3、 日期格式化

日期格式化使用函数不一样

SQL Server:  CONVERT(VARCHAR, GETDATE(), 120)
Oracle:      TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')

字符串处理 

1、字符串拼接

    常规方式直接拼接

  • SQL Server使用+SELECT 'A' + 'B'
  • Oracle使用||SELECT 'A' || 'B' FROM dual

   使用函数拼接 

  • SQL Server的CONCAT可以连接多个字符串:SELECT CONCAT('A','B','C')
  • Oracle的CONCAT只能连接两个字符串,多个需要嵌套,如下
  •      SELECT CONCAT(CONCAT('A','B'),'C') FROM dual

 2、字符串替换

  • SQL Server: SELECT REPLACE('ABCDEF','CD','XX')
  • Oracle除了REPLACE外,还提供更强大的REGEXP_REPLACE
  •      SELECT REGEXP_REPLACE('ABCDEF','[AC]','X') FROM dual
         -- 结果: XBXDEF

 四、高级查询技巧

递归查询在组织架构树形菜单等场景下非常有用:

1、SQL Server使用公用表表达式(CTE):

   WITH TreeCTE AS (
     SELECT * FROM Catalog WHERE ID = 1
     UNION ALL
     SELECT c.* FROM Catalog c
     JOIN TreeCTE t ON c.ParentID = t.ID
   )
   SELECT * FROM TreeCTE

2、Oracle使用CONNECT BY语法 

   SELECT * FROM Catalog
   START WITH ID = 1
   CONNECT BY PRIOR ID = ParentID

方向控制:
• 向下查询(父→子): CONNECT BY PRIOR ID = ParentID
• 向上查询(子→父): CONNECT BY PRIOR ParentID = ID

五、高效开发工具

高效的开发工具使你事倍功半

  • SQL Server:安装客户端后自带官网工具
  • Oracle:第三方强大IDE,基本上都使用PL/SQL Developer 

 PL/SQL Developer 是专为 Oracle 数据库开发打造的高效集成工具,以 “简捷操作 + 强大功能” 著称。它支持 PL/SQL 代码的编写、调试与优化,具备智能代码补全、语法高亮及快速错误定位功能,能大幅提升开发效率;同时集成可视化数据库对象管理、SQL 窗口调试、报表生成等模块,可轻松完成表结构设计、存储过程调试及数据导入导出等操作,且兼容多版本 Oracle 数据库,以轻量化界面与专业级开发能力,成为 Oracle 开发者的核心工具之一。

六、总结

本文只是初步简单介绍了Oracle和SlqServer的一些语法差别,也是实际工作中会遇到的,后续会继续分享更多的Oracle知识,希望能帮助初学者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI、少年郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值