zoukankan      html  css  js  c++  java
  • 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来处理

  • 相关阅读:
    XAML语言
    Sqlite 数据库插入标示字段 获取新Id 及利用索引优化查询
    提高C#编程水平的50个要点 ——学生的迷茫
    734条高频词组笔记
    C#读取ini配置文件
    MD5加密
    SQL Server 2000 及 2005 端口修改
    Java控制台程序20例
    Tomcat 6.0+ SQL Server 2005连接池的配
    阿里巴巴离职DBA 35岁总结的职业生涯
  • 原文地址:https://www.cnblogs.com/iwangzhengchao/p/14199215.html
Copyright © 2011-2022 走看看