iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >第一部分 数据处理基础
  • 737
分享到

第一部分 数据处理基础

2024-04-02 19:04:59 737人浏览 八月长安
摘要

 第一章 SQL基础回顾    在INSERT语句中省略字段名的做法,非常少见,也有很大的风险,除非有什么特殊的理由,不然就别这么做,别把你的sql语句搞得太脆弱,因为无法预知

 第一章 SQL基础回顾

    在INSERT语句中省略字段名的做法,非常少见,也有很大的风险,除非有什么特殊的理由,不然就别这么做,别把你的sql语句搞得太脆弱,因为无法预知在何时表的结构会发生变化。举例来说,如果将来有人重建表,而且表中的字段排序顺序发生变化,碰巧你的INSERT语句通过字段类型和其他约束性检查,你就在没有错误提示的情况下,把数据写入了表中错误的字段,那将是长灾难。所以, 强烈建议在写INSERT语句时,一定要指定字段名。

    查看表的表述: 

desc 表名;


    如果用DELETE语句来删除所有行,则oracle会完整地把删除行为记入日志,以便如果是误操作,我们还有机会将数据回滚。但正应为要记日志,所以需要花一定的时间,有时达不到我们希望的速度。

    作为补充,Oracle提供了一个TRUNCATE(截断)语句来删除表中的所有数据。可以用下面的语句来截断HR.EMPLOYEES表:

   

 truncate table hr.employee;


    TRUNCATE语句不带WHERE子句或其他限制条件。TRUNCATE语句的处理是按DDL(Data Definition Language,数据定义语言)的方式,因此同时也隐含了数据库的一些操作,如隐式地提交其他open事务

Oracel对空字符串的非标准处理

    SQL标准做法是用空或零长度的字符串来代表NULL值,而Oracle并非如此。其中历史的、地域的原因我们无需深究,但一定要记住,Oracle对NULL的规定和用法。对于几乎所有的其他数据库,SQL都把空字符串当做一个独立的、已知的值。

    有编程背景的人会发现一些类似的规定,一个0长度的字符串只有一个字符串终结符(\0)作为其内容。相反,一个加密的字符串没有确定的状态……即使是一个终结符。我们不能把0长度和未知状态的字符串进行互换,这类似于Oracle如何对待NULL。

    在SQL中涉及NULL值的使用诀窍,也是每天必须面对的功课,这经常让人不知所措。每个SQL表达式的结果都是三个值选一:“真”、“假”或“空”。在各种比较、逻辑操作和判断中都是如此。但为避免偶尔的遗忘,我们还是要一再强调:NULL不跟任何值相等,任何值不跟NULL相等,NULL不等于NULL。

    

    Oracel默认用二进制的排序方法。

    有时候,我们希望看见两个字段值相同的排在一起,忽略大小写。用这个NLS环境变量可以达到目的:

    

alert session set NLS_SORT = 'BINARY_CI';


    

    Oracle支持区分大小写和不区分大小写两种排序方式。有个环境变量NLS_SORT进行区分大小写和不区分大小写的控制。默认的排序操作区分大小写,即NLS_SORT=BINARY。如果我们希望排序不区分大小写的方式,则需把环境变量NLS_SORT设置为BINARY_CI。

    顾名思义,NLS_SORT仅仅影响排序结果,并不对其他大小写操作构成影响。即使把NLS_SORT设置为BINARY_CI,以不区分大小写的方式比较数据的操作仍然延续了Oracle默认的方式。

    小技巧:比较传统的方式不是使用NLS环境变量,而是用UPPER和LOWER函数把要比较的字段名,文字都转换成大写或小写后再比较。这种方式的不足之处在于,使用函数后,标准的索引就不能使用了,优化器无法工作,应对的方式是使用基于功能的索引(function-based index)。

    

    通过对会话的环境变量的设置,引导Oracle用自然语言的方式进行比较,虽然表中都是这种形式的Simth而非全小写,但NLS_COMP环境变量可以控制Oracle对字符的比较方式,设置为LINGUISTIC,可以用自然语言的方式比较,符合人类的思维习惯。

    

alert session set NLS_COMP = 'LINGUISTIC';
    select first_name,last_name from hr.employee where last_name = 'simth';


-----------------------<  查询结果>-------------------------

William                    SMITH

Lindsey                    Smith

-----------------------</查询结果>--------------------------

    MERGE 语句的功能是将新数据插入一个表中。记录是否存在,由主(PRIMARY) 键进行判断。如果主键不存在于表中,则插入该行。如果主键匹配表中已有的行,则通过匹配键的其他详细信息更新该行。

    在示例中,假设要把NEW_COUNTRIES表中一些国家的信息添加到HR.COUNTIES表中:

   

 merge into hr.countries c
    using
    (select country_id,country_name
        from hr.new_countries) nc
    on (c.country_id=nc.country_id)
    when matched then
        update set c.country_name = nc.country_name
    when not matched then
        insert (c.country_id,c.country_name)
        values (nc.country_id,nc.country_name);


    

    ON子句后面跟着另两个子句,当键值相匹配时,执行“WHEN MATCHED CLAUSE”子句内容,当键值不匹配时,执行“WHEN NOT MATCHED”子句,会把新的记录插入目标表中。

    match和not-match子句都可以包含更多的筛选条件,当满足删除条件时,也可以删除记录:

    

merge into hr.countries c 
    using
        (select country_id,country_name,region_id
        from hr.new_countries) nc
    on(c.country_id = nc.country_id)
    when matched then
        update set c.country_name = nc.country_name,
            c.region_id = nc.region_id
        delete where nc.region_id = 4
    when not matched then
        insert (c.country_id,c.country_name,c.region_id)
        values (nc.country_id,nc.country_name,nc.region_id)
        where (nc.region_id !=4);


    在这个修改后的版本中,除了REGION_ID的新值是4的行,其他根据COUNTRY_ID匹配的HR.CONTRIES的行都会修改COUNTR_NAME的值,而REGION_ID是4的行最终会删除。没有匹配上的行,除了REGION_ID的值是4的行,其他行都会被插入HR.COUNTRIES中,而REGION_ID的值是4的行会被忽略。

 看完记得点赞哦O(∩_∩)O!   

                                          2015-03-17 23:40


您可能感兴趣的文档:

--结束END--

本文标题: 第一部分 数据处理基础

本文链接: https://www.lsjlt.com/news/42715.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle怎么查询当前用户所有的表
    要查询当前用户拥有的所有表,可以使用以下 sql 命令:select * from user_tables; 如何查询当前用户拥有的所有表 要查询当前用户拥有的所有表,可以使...
    99+
    2024-05-14
    oracle
  • oracle怎么备份表中数据
    oracle 表数据备份的方法包括:导出数据 (exp):将表数据导出到外部文件。导入数据 (imp):将导出文件中的数据导入表中。用户管理的备份 (umr):允许用户控制备份和恢复过程...
    99+
    2024-05-14
    oracle
  • oracle怎么做到数据实时备份
    oracle 实时备份通过持续保持数据库和事务日志的副本来实现数据保护,提供快速恢复。实现机制主要包括归档重做日志和 asm 卷管理系统。它最小化数据丢失、加快恢复时间、消除手动备份任务...
    99+
    2024-05-14
    oracle 数据丢失
  • oracle怎么查询所有的表空间
    要查询 oracle 中的所有表空间,可以使用 sql 语句 "select tablespace_name from dba_tablespaces",其中 dba_tabl...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限设置
    答案:要创建 oracle 新用户,请执行以下步骤:以具有 create user 权限的用户身份登录;在 sql*plus 窗口中输入 create user identified ...
    99+
    2024-05-14
    oracle
  • oracle怎么建立新用户
    在 oracle 数据库中创建用户的方法:使用 sql*plus 连接数据库;使用 create user 语法创建新用户;根据用户需要授予权限;注销并重新登录以使更改生效。 如何在 ...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限密码
    本教程详细介绍了如何使用 oracle 创建一个新用户并授予其权限:创建新用户并设置密码。授予对特定表的读写权限。授予创建序列的权限。根据需要授予其他权限。 如何使用 Oracle 创...
    99+
    2024-05-14
    oracle
  • oracle怎么查询时间段内的数据记录表
    在 oracle 数据库中查询指定时间段内的数据记录表,可以使用 between 操作符,用于比较日期或时间的范围。语法:select * from table_name wh...
    99+
    2024-05-14
    oracle
  • oracle怎么查看表的分区
    问题:如何查看 oracle 表的分区?步骤:查询数据字典视图 all_tab_partitions,指定表名。结果显示分区名称、上边界值和下边界值。 如何查看 Oracle 表的分区...
    99+
    2024-05-14
    oracle
  • oracle怎么导入dump文件
    要导入 dump 文件,请先停止 oracle 服务,然后使用 impdp 命令。步骤包括:停止 oracle 数据库服务。导航到 oracle 数据泵工具目录。使用 impdp 命令导...
    99+
    2024-05-14
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作