• question from asktom


    1. Finding the number of rows in each table by a single sql

     1 SQL> select table_name, num_rows from user_tables;
     2 
     3 TABLE_NAME                       NUM_ROWS
     4 ------------------------------ ----------
     5 DEPT                                    4
     6 EMP                                    14
     7 BONUS                                   0
     8 SALGRADE                                5
     9 EMPLOYEE                                0
    10 
    11 SQL> 

    2. IN (vs) EXISTS and NOT IN (vs) NOT EXISTS

    IN (vs) EXISTS:
    in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大;如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in;

    NOT IN (vs) NOT EXISTS:
    尽量不要使用not in(它会调用子查询),而尽量使用not exists(它会调用关联子查询)。如果子查询中返回的任意一条记录含有空值,则查询将不返回任何记录。如果子查询字段有非空限制,这时可以使用not in,并且可以通过提示让它用hasg_aj或merge_aj连接。

    如果查询语句使用了not in,那么对内外表都进行全表扫描,没有用到索引;而not exists的子查询依然能用到表上的索引。所以无论哪个表大,用not exists都比not in 要快。


    exists (sql 返回结果集为真)
    not exists (sql 不返回结果集为真)
    in引导的子句只能返回一个字段,exist引导的子句可以返回多个字段。

    oracle中在可为null的字段上做逻辑关系运算要格外小心,如 <>,>,=,<,任何与null的运算结果都返回false,因此对于可能为null的字段运算判断要用 is null 来判断,或者使用函数nvl、decode处理后在判断,比如:where 字段名 is null 或者where nvl(字段名,0) = 0; -- 假设字段类型是数字

    Oracle中的空字符串基本上是被当成空NULL来处理

  • 相关阅读:
    通过CMMI5的国内企业有几个?这个认证是不是很牛啊?
    CNUTCon 全球运维技术大会2017
    新浪微博基于Docker的混合云架构与应用实践-DockerInfo
    k8s~为服务添加ingress的实现
    springboot~HttpPut开启application/x-www-form-urlencoded
    K8s~为pod添加sidecar进行日志收集
    k8s~部署EFK框架
    springboot~Transactional注解的注意事项
    CentOS 6.4 快速安装Nginx笔记
    去掉NSString中的HTML标签
  • 原文地址:https://www.cnblogs.com/iwangzhengchao/p/14199215.html
Copyright © 2020-2023  润新知