`
gapele
  • 浏览: 56696 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oracle中有update…from结构吗?

阅读更多

很多熟悉SQL server的朋友在接触到oracle的时候经常犯的一个错误就是总以为oracle中也会有update from这种结构。请你死了这条心吧,在oracle中的update语句中不存在from语句。

 

前面我们简单介绍过Oracle的update语句。这里我们重点介绍如果基于别的表来更新当前表的update语法。

我们知道在oracle中的例子数据库中有名为scott的schema,里面有一个表是emp,我们就拿这里表来举例

 

先建立一个结构一模一样的表emp1,并为其插入部分数据

create table emp1
as
select * from emp where deptno = 20;

update掉emp1中的部分数据
update emp1
set sal = sal + 100,
comm = nvl(comm,0) + 50

 

然后我们试着使用emp1中数据来更新emp中sal 和 comm这两列数据。
我们可以这么写
Update emp
Set(sal,comm) = (select sal,comm. From emp1 where emp.empno = emp1.empno)
Where exists (select 1 from emp1 where emp1.empno = emp.empno)

 

请你尤其注意这里的where子句,你可以尝试不写where子句来执行以下这句话,你将会使得emp中的很多值变成空。
这是因为在oracle的update语句中如果不写where子句,oracle将会默认的把所有的值全部更新,即使你这里使用了子查询并且某在值并不能在子查询里找到,你就会想当然的以为,oracle或许将会跳过这些值吧,你错了,oracle将会把该行的值更新为空。

我们还还可以这么写:

 

update (select a.sal asal,b.sal bsal,a.comm acomm,b.comm bcomm from emp a,emp1 b where a.empno = b.empno)
set asal = bsal,
acomm = bcomm;

 

这里的表是一个类视图。
当然你执行时可能会遇到如下错误:

ERROR 位于第 2 行:
ORA-01779: 无法修改与非键值保存表对应的列
这是因为新建的表emp1还没有主键的缘故

下面增加一个主键

alter table emp1
add constraint pk_emp1 primary key (empno);

执行之后

在执行前面的语句就能成功。

这里我们总结一下:

在oracle中不存在update from结构,所以遇到需要从另外一个表来更新本表的值的问题的时候,有两种解决的办法:

一种是使用子查询,使用子查询时一定要注意where条件(一般后面接exists子句),除非两个表是一一对应的,否则where条件必不可少,遗漏掉where条件时可能会导致插入大量空值。

另外一种是类视图的更新方法,这也是oracle所独有的。先把对应的数据全部抽取出来,然后更新表一样更新数据,这里需要注意的是,必须保证表的数据唯一型。

分享到:
评论

相关推荐

    update语句的优化-oracle .pdf

    在本篇文档中,作者详细总结了在实际项目中针对Oracle数据库的update语句优化的四种方案。以下是对这四种方案的知识点进行详细的阐述: 1. 标准update语法优化: 当面对单表更新或较简单的SQL语句时,可以直接使用...

    ORACLE_多表关联_UPDATE_语句

    Oracle数据库中的多表关联UPDATE语句是用于在一个表中更新数据时,依据另一个表的条件进行操作的关键技术。这在处理复杂的数据同步或修正场景时非常有用。在本例中,我们将探讨如何利用多表关联来更新数据,并通过...

    ORACLE UPDATE 语句语法与性能分析看法

    ### ORACLE UPDATE 语句语法与性能分析 ...在实践中,应根据具体的应用场景灵活选择和调整`UPDATE`语句的语法结构,并结合Oracle提供的性能分析工具,不断优化和改进数据更新操作,以达到最佳的系统性能表现。

    oracle常用问题解答

    **问题**: Oracle中的ROWID是什么样的结构? **解答**: ROWID是一种特殊的伪列,用于标识表中的每一行。ROWID包含了行所在的表空间、数据块号和行号等信息。 - **示例**: 获取ROWID的结构: ```sql SELECT ROWID ...

    oracle初学者必知的100个问题

    在Oracle中创建触发器使用CREATE TRIGGER语句,基本语法为CREATE TRIGGER trigger_name BEFORE/AFTER INSERT/UPDATE/DELETE ON table_name FOR EACH ROW; 17. 如何管理用户权限? 通过GRANT语句赋予用户权限,...

    sql server的 update from 语句的深究

    如果我们的数据库设计只包含一个表`Ttest`来表示层级关系(即`Ttest.parentId = Ttest.id`),我们可以修改上面的`UPDATE`语句,将`FROM`子句中的表也设定为`Ttest`,但需要为其中一个实例赋予别名以区分它们: ...

    ORACLE 多表查询与数据修改

    ### ORACLE 多表查询与数据修改 ...通过本次实验的学习,您可以更加熟练地掌握Oracle数据库中的多表查询技巧,以及基本的INSERT、UPDATE和DELETE操作。这对于日常的数据库管理和开发工作都是非常有用的技能。

    oracle PLSQL结构控制语句

    Oracle PL/SQL 结构控制语句是 PL/SQL 语言中的一种基本结构,用于控制程序的逻辑流程。结构控制语句可以分为两种:分支结构和循环结构。在本篇文章中,我们将详细介绍 Oracle PL/SQL 结构控制语句的使用方法和示例...

    ORACLE批量更新四种方法.txt ORACLE批量更新四种方法.txt

    使用PL/SQL语言中的游标和循环结构,逐条记录地读取并更新数据。 ```plsql declare l_varID varchar2(20); l_varSubName varchar2(30); cursor mycur is select T2.Id, T2.Subobject_Name from T2; begin open ...

    Beginning Oracle Database 11g Administration From Novice to Professional

    4. **数据库架构**:理解Oracle的物理和逻辑结构,如表空间、数据文件、重做日志、控制文件等,有助于管理和优化数据库性能。此外,还要熟悉体系结构中的其他组件,如实例、进程和内存结构。 5. **安全性管理**:...

    最全的Oracle中文使用手册

    Oracle是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据重要地位。Oracle数据库提供了丰富的功能,包括数据存储、查询、事务处理、安全性等。在本文中,我们将深入探讨Oracle的使用,特别是通过...

    表结构和数据

    本篇文章将深入探讨“表结构和数据”这一主题,主要涉及SQL和Oracle数据库的相关知识点。 首先,我们要理解什么是表结构。在数据库中,表是一种基本的数据组织形式,类似于电子表格。表由一系列行和列组成,每一行...

    oracle实验二视图

    本实验涵盖了 Oracle 中的视图概念、创建视图、显示视图的内容、从数据字典视图中选择视图的名字和文本、使用视图查询数据、创建带有条件的视图、显示视图的结构和内容、更新视图、创建复杂视图等内容,为读者提供了...

    oracle异库同表名的两个数据库中数据合并或数据表结构的修改

    ### Oracle异库同表名的两个数据库中数据合并或数据表结构的修改 在Oracle数据库管理与维护过程中,经常会遇到需要处理多个不同数据库之间数据同步、数据合并以及表结构更改等问题。本文将针对“Oracle异库同表名的...

    更改Oracle表中字段的顺序的终极方法

    在Oracle中,改变表结构尤其是字段的顺序并非一件简单的事情。由于Oracle并不支持直接调整字段顺序的功能,因此大多数情况下,人们会选择备份数据、删除原表然后根据新需求重建表的方式。这种方式虽然能够解决问题,...

    Oracle SQL(SQL for Oracle)

    Oracle SQL,全称为结构化查询语言在Oracle数据库环境中的应用,是数据库管理员和开发人员用于检索、更新和管理Oracle数据库的核心工具。Oracle SQL是SQL标准的扩展,它提供了许多特有的功能,以满足企业级数据库...

    oracle中的权限

    - `ALTER TABLE`:允许修改已有表的结构。 - `DROP TABLE`:允许删除表。 - `SELECT`:允许查询任何表的数据。 - `INSERT`:允许向任何表插入数据。 - `UPDATE`:允许更新任何表的数据。 - `DELETE`:允许从...

    Oracle查询语句大全-精华版

    Oracle 查询语句大全是 Oracle 数据库管理系统中最基本也是最重要的组成部分,用于管理和维护数据库。本文将详细介绍 Oracle 查询语句的使用方法和实践操作。 一、创建用户和授权 在 Oracle 中,创建用户和授权是...

    Oracle体系结构.pptx

    Oracle数据库是世界上最流行的数据库管理系统之一,它在企业级应用中占据着重要的地位。本文将深入探讨Oracle体系结构,包括其核心组件、工作流程以及处理查询和事务的方式。 首先,连接到Oracle Server涉及用户...

    根据update语句自动生成select语句

    在数据库管理中,UPDATE语句用于修改已存在的数据记录,而SELECT语句则用于查询数据。在某些场景下,我们可能需要从UPDATE语句转换为SELECT语句,以验证更新操作将影响哪些行或者理解更新逻辑。这在调试、数据分析或...

Global site tag (gtag.js) - Google Analytics