问:

  有两张表A和B,结构相同,数据量一致,比如都有x,y和z列且都有n行,x为主键,完全相等,如何把表B的y列的数据赋值给A的y列?

  我写的是1 update A set A.y=B.y where A.x=B.x报错原因是表B未定义。 

答:

update A set A.y=(select y from B where B.x = A.x)where exists (select 1 from B WHERE A.X= B.x);问题出处:http://zhidao.baidu.com/question/1114834213179197459.html

关于exists的用法,参考本园一位前辈的文章,摘抄如下:

  1.EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False

  2.EXISTS 指定一个子查询,检测 的存在。

  3.EXISTS(包括 NOT EXISTS )子句的返回值是一个BOOL值。 EXISTS内部有一个子查询语句(SELECT ... FROM...), 我将其称为EXIST的内查询语句。其内查询语句返回一个结果集。

  4.EXISTS子句根据其内查询语句的结果集空或者非空,返回一个布尔值。

  5.一种通俗的可以理解为:将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。
  6.分析器会先看语句的第一个词,当它发现第一个词是SELECT关键字的时候,它会跳到FROM关键字,然后通过FROM关键字找到表名并把表装入内存。接着是找WHERE关键字,如果找不到则返回到 SELECT找字段解析,如果找到WHERE,则分析其中的条件,完成后再回到SELECT分析字段。最后形成一张我们要的虚表。
WHERE关键字后面的是条件表达式。条件表达式计算完成后,会有一个返回值,即非0或0,非0即为真(true),0即为假(false)。同理WHERE后面的条件也有一个返回值,真或假,来确定接下来执不执行SELECT。
  分析器先找到关键字SELECT,然后跳到FROM关键字将STUDENT表导入内存,并通过指针找到第一条记录,接着找到WHERE关键字计算它的条件表达式,如果为真那么把这条记录装到一个虚表当中,指针再指向下一条记录。如果为假那么指针直接指向下一条记录,而不进行其它操作。一直检索完整个表,并把检索出来的虚拟表返回给用户。EXISTS是条件表达式的一部分,它也有一个返回值(true或false)。

  7.在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,可以通过使用 EXISTS 条件句防止插入重复记录。

1 INSERT INTO TableIn (ANAME,ASEX)
2 SELECT top 1 '张三', '男' FROM TableIn
3 WHERE not exists (select * from TableIn where TableIn.AID = 7)

  8.EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

另外还有关于与ANY等函数的比较问题,具体参见:

SQL中EXISTS的用法

 

转载于:https://www.cnblogs.com/yw0219/p/5981097.html

Oracle-批量修改语句及相关知识点相关推荐

  1. oracle 批量修改表结构,关于Oracle批量修改表结构相关内容的整理

    从各地搜集而来,以备不时之需,随时增改 1.给表加注释 COMMENT ON TABLE land.landsellmend IS '补办出让'; 2.查看表的COMMENT SELECT * FRO ...

  2. oracle 表改表空间,Oracle批量修改用户表table的表空间

    由于开发人员把ess 项目下的大部分对象放到user 表空间中,用imp/exp 导入正式库后,ess用户的对象还是在users 表空间中.为了把ESS 的对象放到ess 默认的表空间ess中,我按如 ...

  3. oracle表修改语句,Oracle的常用修改表及字段的语句

    单行注释:-- 多行注释:/* */ Oracle中修改表结构 增加字段 ALTER TABLE table_name ADD column_name data_type; 删除字段 ALTET TA ...

  4. oracle 批量插入语句

    假如有一个表数据结构为 t_user(id,username,password,realname); 使用多条语句批量插入,适用于mysql,sqlserver,oracle insert into ...

  5. oracle批量修改多张表的数据,Oracle批量修改用户表table的表空间

    一.修改用户表table的表空间 1.修改用户表table的表空间:alter table 表名 move tablespace 新表空间名; 2.查询所有用户表:select * from user ...

  6. oracle 修改用户信息表,Oracle批量修改用户表table的表空间 | 学步园

    一.修改用户表table的表空间 1.修改用户表table的表空间:alter table 表名 move tablespace 新表空间名; 2.查询所有用户表:select * from user ...

  7. Oracle 批量update语句,Oracle之update语句优化研究 批量更新

    update (select YP.DEALLOCATE_BUDGET_, YP.REMAIN_BUDGET_ from MP_YEAR_PLAN YP where YP.YEAR_PLAN_ID_ ...

  8. oracle序列修改语句

    select ss.*,concat( concat( 'alter sequence '||ss.sequence_name||' increment by '||ss.incrementNum|| ...

  9. mybatis oracle批量修改

    2019独角兽企业重金招聘Python工程师标准>>> <update id="batchUpdateOrder" parameterType=" ...

最新文章

  1. 反向代理服务器的工作原理
  2. pandas判断日期是否是闰年(is_leap_year)实战: 数据列转化为日期(时间)格式、判断pandas的日期数据列是否是闰年
  3. 《全球人工智能发展报告(2018)》发布:一览全球AI领域竞争态势
  4. python教程第四版pdf下载-Python参考手册 第4版高清中文PDF下载
  5. lvm创建逻辑卷简单过程
  6. Apache Kafka-通过设置Consumer Group实现广播模式
  7. Redis中的Sentinel 连接使用
  8. [渝粤教育] 西南科技大学 英语语法1 在线考试复习资料
  9. Pycharm社区版安装教程(永久免费,随时升级)
  10. 根据数组中的某个键值大小进行排序,仅支持二维数组
  11. 视觉SLAM笔记(32) 2D-2D: 对极几何
  12. java让日志生成日期文件夹_SpringBoot按日期和文件大小生成日志文件到对应日期文件夹...
  13. 张家口以太坊智能合约开发实战pdf_以太坊2.0:实现可扩展性之路漫长而曲折
  14. Java基础学习总结(166)——Google 13 条代码审查标准
  15. caffe安装_【开源框架】caffe图像分类从模型自定义到测试
  16. 如何让Ubuntu 14重启后,保存屏幕亮度的设置
  17. ubuntu软件安装、卸载
  18. 《linux核心应用命令速查》连载六:batch:在系统负载水平允许的时候执行命令
  19. 仓鼠吃豆子 C语言编程,动态规划之仓鼠吃豆子
  20. 02_菜鸟也能懂的 - 音视频基础知识。

热门文章

  1. vuex中的getters
  2. linux终端xwindow,如何从命令行重新启动X Window Server?
  3. python自关联_Django之Mode的外键自关联和引用未定义的Model方法
  4. python ui自动化_pythonUI自动化整理
  5. python替换字符的操作_Python 字符串操作(string替换、删除、截取、复制、)
  6. oracle 查看并行数据库,Oracle数据库并行查询出错的解决方法
  7. ai如何旋转画布_「AI教程」使用AI制作3D立体文字效果
  8. stm32f103r6最小系统原理图_STM32的最小系统板卡
  9. java 前端页面传过来的值怎么防止篡改_反爬虫,到底是怎么回事儿?
  10. 不用写一行代码,这款 高颜值 可视化神器,值得try一try!