Oracle-批量修改语句及相关知识点
问:
有两张表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-批量修改语句及相关知识点相关推荐
- oracle 批量修改表结构,关于Oracle批量修改表结构相关内容的整理
从各地搜集而来,以备不时之需,随时增改 1.给表加注释 COMMENT ON TABLE land.landsellmend IS '补办出让'; 2.查看表的COMMENT SELECT * FRO ...
- oracle 表改表空间,Oracle批量修改用户表table的表空间
由于开发人员把ess 项目下的大部分对象放到user 表空间中,用imp/exp 导入正式库后,ess用户的对象还是在users 表空间中.为了把ESS 的对象放到ess 默认的表空间ess中,我按如 ...
- oracle表修改语句,Oracle的常用修改表及字段的语句
单行注释:-- 多行注释:/* */ Oracle中修改表结构 增加字段 ALTER TABLE table_name ADD column_name data_type; 删除字段 ALTET TA ...
- oracle 批量插入语句
假如有一个表数据结构为 t_user(id,username,password,realname); 使用多条语句批量插入,适用于mysql,sqlserver,oracle insert into ...
- oracle批量修改多张表的数据,Oracle批量修改用户表table的表空间
一.修改用户表table的表空间 1.修改用户表table的表空间:alter table 表名 move tablespace 新表空间名; 2.查询所有用户表:select * from user ...
- oracle 修改用户信息表,Oracle批量修改用户表table的表空间 | 学步园
一.修改用户表table的表空间 1.修改用户表table的表空间:alter table 表名 move tablespace 新表空间名; 2.查询所有用户表:select * from user ...
- Oracle 批量update语句,Oracle之update语句优化研究 批量更新
update (select YP.DEALLOCATE_BUDGET_, YP.REMAIN_BUDGET_ from MP_YEAR_PLAN YP where YP.YEAR_PLAN_ID_ ...
- oracle序列修改语句
select ss.*,concat( concat( 'alter sequence '||ss.sequence_name||' increment by '||ss.incrementNum|| ...
- mybatis oracle批量修改
2019独角兽企业重金招聘Python工程师标准>>> <update id="batchUpdateOrder" parameterType=" ...
最新文章
- 反向代理服务器的工作原理
- pandas判断日期是否是闰年(is_leap_year)实战: 数据列转化为日期(时间)格式、判断pandas的日期数据列是否是闰年
- 《全球人工智能发展报告(2018)》发布:一览全球AI领域竞争态势
- python教程第四版pdf下载-Python参考手册 第4版高清中文PDF下载
- lvm创建逻辑卷简单过程
- Apache Kafka-通过设置Consumer Group实现广播模式
- Redis中的Sentinel 连接使用
- [渝粤教育] 西南科技大学 英语语法1 在线考试复习资料
- Pycharm社区版安装教程(永久免费,随时升级)
- 根据数组中的某个键值大小进行排序,仅支持二维数组
- 视觉SLAM笔记(32) 2D-2D: 对极几何
- java让日志生成日期文件夹_SpringBoot按日期和文件大小生成日志文件到对应日期文件夹...
- 张家口以太坊智能合约开发实战pdf_以太坊2.0:实现可扩展性之路漫长而曲折
- Java基础学习总结(166)——Google 13 条代码审查标准
- caffe安装_【开源框架】caffe图像分类从模型自定义到测试
- 如何让Ubuntu 14重启后,保存屏幕亮度的设置
- ubuntu软件安装、卸载
- 《linux核心应用命令速查》连载六:batch:在系统负载水平允许的时候执行命令
- 仓鼠吃豆子 C语言编程,动态规划之仓鼠吃豆子
- 02_菜鸟也能懂的 - 音视频基础知识。
热门文章
- vuex中的getters
- linux终端xwindow,如何从命令行重新启动X Window Server?
- python自关联_Django之Mode的外键自关联和引用未定义的Model方法
- python ui自动化_pythonUI自动化整理
- python替换字符的操作_Python 字符串操作(string替换、删除、截取、复制、)
- oracle 查看并行数据库,Oracle数据库并行查询出错的解决方法
- ai如何旋转画布_「AI教程」使用AI制作3D立体文字效果
- stm32f103r6最小系统原理图_STM32的最小系统板卡
- java 前端页面传过来的值怎么防止篡改_反爬虫,到底是怎么回事儿?
- 不用写一行代码,这款 高颜值 可视化神器,值得try一try!