在向大家详细介绍Oracle数据比较之前,首先让大家了解下Oracle两张表,然后全面介绍Oracle数据比较。两张表的Oracle数据比较可以用用手动方法比较,或者通过SQL语句来比较,两种方法各有所长。
在某些情况下,我们会需要比较两张表的数据是否一样。
假设有两张表A与表B它们的字段相同,但是当中的数据可能不同,而且有些字段的数据还有可能为空。
方法一(手动):
把需要比较的两张表的数据按照某种规则排序后导出为xls,这里我直接用PL/SQL Developer导出。然后用把xls文件转换成txt文件,这里我用的是batconv转换公式。现在我们就有了两个txt文件。然后用beyond compare文件比较器比较内容。◆优点:数据差异一目了然◆缺点:比较费时。
方法二(通过Sql语句来比较):
创建表的语句:
当中除id不为空,其它三项均可能为空。
在oracle 情况下如果两张表的某个字段都为null则其通过A.*=B.*是比较不出来的。通过上面这个sql语句我们就可以找在A表中存在,但在B表中不存在的数据反过来可以查询在B表中存在,但在A表中不存在的数据。若两个查询都为空,则说明两张表的相应字段完全相同。

若这两张表在不同的数据库,则要通过建立DBLink。◆优点:Oracle数据比较快,特别是在数据量比较大的数据优势更加明显,◆缺点:比较时不能很快看出两张表的差异。因为查询的只是当中的某一张表。
【编辑推荐】
oracle 数据库时间比较,请高手指点一下!
1. 你用30补充日的信息,如果是二月怎么办,就报错了。2. 当前时间不需要这么复杂TO_DATE(to_char(TRUNC(SYSDATE),yyyy/mm/dd), yyyy/mm/dd)TRUNC(SYSDATE)即可3. 个人理解,你的年、月 字段 应该是数字类型吧,那么一个先转换(如果是字符,则不需转换):TO_DATE(to_char(_year) || / || to_char(_month) || /30, yyyy/mm/dd)我给你一个思路:当前日期 - (某年某月 第一日 + 1月 - 1日)其中:某年某月 第一日 + 1月 即下一月的第一天; 再 -1日就是某年某月的最后一天:select * from M_PLAN_INFO D WHERE TRUNC(SYSDATE) - (add_months(TO_DATE(to_char(_year) || / || to_char(_month) || /30, yyyy/mm/dd),1) - 1 ) > 30
IT是什么职业?
IT(Information Technology,即信息技术)的基本概念和所指范围。 IT实际上有三个层次:第一层是硬件,主要指数据存储、处理和传输的主机和网络通信设备;第二层是指软件,包括可用来搜集、存储、检索、分析、应用、评估信息的各种软件,它包括我们通常所指的ERP(企业资源计划)、CRM(客户关系管理)、SCM(供应链管理)等商用管理软件,也包括用来加强流程管理的WF(工作流)管理软件、辅助分析的DW/DM(数据仓库和数据挖掘)软件等;第三层是指应用,指搜集、存储、检索、分析、应用、评估使用各种信息,包括应用ERP、CRM、SCM等软件直接辅助决策,也包括利用其它决策分析模型或借助DW/DM等技术手段来进一步提高分析的质量,辅助决策者作决策(强调一点,只是辅助而不是替代人决策)。 有些人理解的IT把前二层合二为一,统指信息的存储、处理和传输,后者则为信息的应用;也有人把后二层合二为一,则划分为前硬后软。 通常第三层还没有得到足够的重视,但事实上却是唯有当信息得到有效应用时IT的价值才能得到充分发挥,也才真正实现了信息化的目标。 信息化本身不是目标,它只是在当前时代背景下一种实现目标比较好的一种手段。 卡尔的IT是指什么呢?在那篇文章里面他并没有明确提出,不过他提到信息技术的核心功能--数据存储、处理和传输。 从他推理的逻辑来看,即从蒸汽机、铁路、电报电话、电力等基础设施建设推过来的,还用摩尔定律来佐证主机和光纤的发展。 如果他就此打住,只从这一点出发,他的逻辑论证是非常严谨的,后面对《IT不再重要》发表不管支持与反对评论的人,在这一点上都是基本认同的(除了那些硬件和网络厂商外),笔者也认同这一点。 整个文章里他对物化的IT基础设施建设部分关注很多,基本没有关注应用层面。 但后面他讲到大众化趋势时,又提到“信息技术极易复制”,则把IT又推到了商业软件,这里已经迈出了“危险”的一步。 在2004年他出版同名书时开篇就定义了他研究、类比过来的IT,“我用的‘IT’是指通常意义上的,即所有被用来以数字形式存储、处理和传输信息的硬件和软件,特别强调的是,我只是指技术本身,我指的‘IT’并不包括技术中流动的信息和那些使用技术的人才技能”,所以他所指的IT是指前二层。 如果就这此打住,可能还是不会有太大争议(这次又加上那些难受的软件厂商)。 客观地分析软件本身的特征,的确不具备核心竞争力的四个判断标准中的三个即:稀缺性、不易复制性、不易替代性,卡尔本人也没有否认而且是在强调IT具备核心竞争力的第四个判断标准,即有价值。 但他偏偏又把题目定成了“IT不再重要”,几欲把整个IT一棍子打死! 可惜他在IT这一概念上是经常含混不清:一会儿指主机网络,一会儿又跑到软件,在他后来出版的书里甚至经常“一不小心”就迈到了第三层,完全违背了他在书开头所界定的IT范围,如论述信息技术的应用、对CIO发出的诘问等。 有很多读者、包括哈佛商业评论的编辑当时就指出了这一点。 后面其它很多人也因为这一点来攻击他,甚至有人说卡尔干脆就不懂IT,有可能是真的,因为他毕竟本来就不是做IT的。 这也给我们搞研究的人也给予很大的启示和警醒,对自己不太熟悉的领域套用其它方法来研究时要特别小心,否则会闹出很多笑话。 这里笔者要强调一点,经常有软件厂商(国内外的都有)宣称上了信息化就能如何如何,就能加强企业核心竞争力(反正多是现在流行什么就跟什么,“与时俱进”)。 不知道他们是有意还是无意,且不按核心竞争力判断的四个标准来推断,试反问几个简单的问题:如果上了信息化就能如何,有多少上了信息化的企业已经亏损甚至倒闭?尤其是那些宣称有几十万家客户使用他们软件的软件企业该问问自己。 如果上了信息化就能如何,那么我们假设入库、出库、销售、库存等信息全是准确的,就能自动提高销售、降低库存吗?如果说没有上信息化之前,老板可能还可因为看不见而糊涂但幸福地过过日子,那么现在呢?只是痛苦地知道有如此多的库存在仓库里呆了如此长的时间,如此多的商品长时间占据着柜台却没有带来任何销售额更不要说利润!分析一下软件厂商们宣传“信息技术是企业的核心竞争力”的现象,结论只有两个:要么这些企业不懂什么是核心竞争力(我想应该大多数还是懂的,既希望他们懂又希望他们不懂,希望结果是懂是因为至少软件企业还能懂一些管理理念而不是埋头纯粹一技术性公司,希望结果是不懂是因为这样可以少被别人攻击没有职业道德,不知者不为过嘛),要么是另有所图。 一般企业客户与IT企业之间存在严重的信息不对称问题。 IT企业与企业客户之间的博弈,最后的结果往往会是次优选择,即所谓的“柠檬效应”。 在这点上,除了IT企业和从业人员要提高自身的职业操守外,政府或行业必须加强对信息化建设的培训教育,提高企业对信息化建设的认识,引进管理咨询公司、监理公司等来改变这一博弈结局,以达到新的平衡,促进IT业更健康的发展。 信息技术本身只是一个工具,就象一柄利剑或一枝好笔,买了它并不能一定保证你武功增进多少、字写漂亮多少,还需要你不断地去练习如何舞剑、如何写字,信息化建设也需要你不断地提升运用信息的能力,这才是真正核心也是最难的地方。 功夫全在题外!信息化(数字化)目的并不是上系统拿几个数字,它只是基础,其核心在一个“化”字,把各种资源相关的信息整合起来后进行“合理化”、“优化”的配置。 譬如用历史信息来辅助做销售预测、采购计划、生产计划、配送计划、库存计划,并按照这些计划下达指令并根据实际运行情况滚动修正计划。 美国哈林顿(Joseph Harrington)博士提出的计算机集成制造(Computer Integrated Manufacturing,CIM)包含两个基本观点:一是企业生产的各个环节包括市场分析、产品设计、加工制造、经营管理和售后服务等是一个不可分割的整体,必须紧密相连、统一考虑;二是整个运作过程实质上是一个数据的采集、传递和加工处理过程,最终产品可以看作是数据的物质表现。 如果上了信息系统却不用它来辅助决策,还是按照原来的运作方式运作,则信息系统的作用可能只是限于解放某些岗位的某些工作,如统计报表等,且同时还会增加另外一些岗位的工作。 大量经验表明,如果不用信息系统收集上来的数据,要实现用来辅助决策的准确、及时、完整的信息根本不可能,信息系统只有用它才可能逐步提高其准确性、及时性和完整性。 按照核心竞争力的评价标准,要构造核心竞争力,本质上只有整合能力才是,而且越外显的能力越容易被模仿。 冰山一角,露在外面的越少越不容易被模仿,越能构成核心竞争力。 就象哈佛商业评论编辑Hal Varian(加利福尼亚大学伯克利分校信息管理与系统系主任)指出的那样:“卡尔说IT正在商品化、不再提供竞争优势,这一点他是对的。 但知道如何有效使用IT还是一种非常稀缺的技能。 ”“提供竞争优势的不是IT本身,而是那些知道如何有效利用它的人。 ”“公司在花成千上万的钱在数据存储和获取客户交易数据上,但一大堆数据就躺在那儿、没有经过分析、没有使用,但是,在那些训练有素的分析人员手上同样的数据却能产生巨大的回报!”这是一个数据丰富的时代,但同时是一个知识贫乏的时代! 波士顿大学管理学院信息系统管理学教授托马斯·H.达文波特要把“过去的40年,更确切地描述为‘数据时代’,而不是‘信息时代’”,“将数据转化为某种更有用的东西,需要相当多的人力投入和智慧,但大多数组织仅仅从技术的角度来看待这一问题。 拥有一个数据库或数据挖掘系统,与拥有其它技术一样,是必要的,但对于高质量的信息和知识而言,则是不够的”。 所以这里我们有必要明确一下一些经常混淆的基本概念。 数据(Data)=事实的记录,如上季度甲系列产品在华东地区销售额为120万。 信息=(Information)=数据+ 意义,如上季度甲系列产品华东地区销售额比去年同期减少了25 %。 智能(Intelligence)=信息+理解(understanding)与推理(reasoning),如分析原因是华东地区销售单位不行,或甲系列产品进入了衰退期,还是公司整体营销活动落后,竞争者强力促销导致?或是其它原因。 知识(Knowledge) =解决问题的技能(skill),针对这一问题公司应对的策略是什么? 智慧(Wisdom) =知识的选择(Selection) 应对的行动方案可能有多种,但(战略)选择哪个*智慧。 行动则又会产生新的交易数据。 数据、信息、智能、知识、智慧、行动与管理活动的关系见下图,事实上它们之间存在多重循环关系。 图1 数据、信息、智能、知识、智慧、行动与管理活动之间的关系 同样的高速公路、同样的高档车,开车的人不同将会开出完全不同的水平,这时更关键的因素--开车的本事就显得至关重要了。 在初级阶段,竞争比较粗放,可能主要是看谁能修好道,买好车。 到后面,大家硬件基础设施差不多,竞争日趋白热化,这个时候人的作用就突显出来了,光有好道好车还不行,还得有舒马赫这样的顶级选手才能赢得比赛。 企业经营与赛车还不太一样,赛车有人制定规则,规定只能跑一样的道,企业之间的竞争是八仙过海各显神通,有钱的就可以买高档的服务器、小型机,没有钱的就只能买PC服务器;有钱的就可以用光纤宽带,没有钱的则只能用ADSL甚至拨号;有钱的可以花几千万去买SAP、Oracle,没有钱的则只能用用金蝶、用友,甚至只有一些基本功能的小的进销存或财务软件;有钱的可以请五大帮他们制定符合未来趋势的战略并进行培训,没有钱的则只能*企业家自己摸着石头过河……的确,这是一场不太公平的竞争。 但网络经济来了,用卡尔的话说,就是IT技术已经变得“大众化”,已变成商品。 更何况ASP模式的出现,将极大的降低了企业信息化的门槛,昂贵的服务器、网络、软件费用的门槛被一下子降低了。 好比虽然你有私家的宝马、奔驰,可以很快地到达你想要到的地方。 但我也可以坐出租车差不多也能实现同样的效果,再差点儿我有公共汽车、地铁,只要很低的成本也能基本实现我的目标。 但同样的宽带、同样一套系统软件,但使用的人一样,效果却完全不一样,君不见同样是使用SAP、Oracle或者金蝶、用友,有很成功的,也有很失败的?还是那句话,功夫在诗外!
谁可以给我全部的SQL查询语句?
一、 简单查询简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。 它们分别说明所查询列、查询的表或视图、以及搜索条件等。 例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 SELECT nickname,emailFROM testtableWHERE(一) 选择列表选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。 1、选择所有列例如,下面语句显示testtable表中所有列的数据:SELECT *FROM testtable2、选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 例如:SELECT nickname,emailFROM testtable3、更改列标题在选择列表中,可重新指定列标题。 定义格式为:列标题=列名列名 列标题如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:SELECT 昵称=nickname,电子邮件=emailFROM testtable(二) FROM子句FROM子句指定SELECT语句查询及与查询相关的表或视图。 在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。 在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。 例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:SELECT username, usertable,citytableWHERE =在FROM子句中可用以下两种格式为表或视图指定别名:表名 as 别名表名 别名例如上面语句可用表的别名格式表示为:SELECT username, usertable a,citytable bWHERE =不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 例如:SELECT _fname+_lnameFROM authors a,titleauthor ta(SELECT title_id,titleFROM titlesWHERE ytd_sales>) AS tWHERE _id=_idAND _id=_id此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 (三) 使用WHERE子句设置查询条件WHERE子句设置查询条件,过滤掉不需要的数据行。 例如下面语句查询年龄大于20的数据:SELECT *FROM usertableWHERE age>20WHERE子句可包括各种条件运算符:比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<范围运算符(表达式值是否在指定的范围):BETWEEN…AND…NOT BETWEEN…AND…列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……)NOT IN (项1,项2……)模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=302、列表运算符例:country IN (Germany,China)3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。 可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。 可使用以下通配字符:百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 [^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 例如:限制以Publishing结尾,使用LIKE %Publishing限制以A开头:LIKE [A]%限制以A开头外:LIKE [^A]%4、空值判断符例WHERE age IS NULL5、逻辑运算符:优先级为NOT、AND、OR(四)查询结果排序使用ORDER BY子句对查询返回的结果按一列或多列排序。 ORDER BY子句的语法格式为:ORDER BY {column_name [ASC|DESC]} [,…n]其中ASC表示升序,为默认值,DESC为降序。 ORDER BY不能按ntext、text和image数据类型进行排序。 例如:SELECT *FROM usertableORDER BY age desc,userid ASC另外,可以根据表达式进行排序。 二、 联合查询UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。 UNION的语法格式为:select_statementUNION [ALL] selectstatement[UNION [ALL] selectstatement][…n]其中selectstatement为待联合的SELECT查询语句。 ALL选项表示将所有行合并到结果集合中。 不指定该项时,被联合查询结果集合中的重复行将只保留一行。 联合查询时,查询结果的列标题为第一个查询语句的列标题。 因此,要定义列标题必须在第一个查询语句中定义。 要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。 在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。 在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。 例如:查询1 UNION (查询2 UNION 查询3)三、连接查询通过连接运算符可以实现多个表查询。 连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。 当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。 连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。 为不同实体创建新的表,尔后通过连接进行查询。 连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。 所以,在Transact-SQL中推荐使用这种方法。 SQL-92标准所定义的FROM子句的连接语法格式为:FROM join_table join_type join_table[ON (join_condition)]其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。 join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。 内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。 根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。 外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。 与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。 交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。 无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。 例如:SELECT _id,_id,_infoFROM pub_info AS p1 INNER JOIN pub_info AS p2ON DATALENGTH(_info)=DATALENGTH(_info)(一)内连接内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。 内连接分三种:1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。 2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。 这些运算符包括>、>=、<=、<、!>、!<和><>。 3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。 例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:SELECT *FROM authors AS a INNER JOIN publishers AS pON =又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):SELECT a.*,_id,_name, authors AS a INNER JOIN publishers AS pON =(二)外连接内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。 而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。 如下面使用左外连接将论坛内容和作者信息连接起来:SELECT a.*,b.* FROM luntan LEFT JOIN usertable as bON =下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:SELECT a.*,b.*FROM city as a FULL OUTER JOIN user as bON =(三)交叉连接交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。 SELECT type,pub_nameFROM titles CROSS JOIN publishersORDER BY type
发表评论