我要查询29张表的记录数的SQL怎么写?
如,有表a,表b,表c,表d,表e....:
执行SQL后的结果为:
table_name     count
a               20
b               21
c               22
d               23
e               24
......请问这样的SQL怎么写?

解决方案 »

  1.   

    union all 连接29 个表?? 有点夸张
      

  2.   


    --你的那些表应该都是某个用户下的吧
    select TABLE_NAME, SUM(NUM_ROWS) from all_tables where owner='SCOTT'
    GROUP BY TABLE_NAME
      

  3.   

    Columns ed with an asterisk (*) are populated only if you collect statistics on the table with the ANALYZE statement or the DBMS_STATS package.
    NUM_ROWS就是这种类型的,也就是说这个值取决于你是否分析过表,即使分析过,这个值也是分析时刻的数据.并不是一个实时数据
      

  4.   


    select table_name,sum(num_rows) from all_tables where table_name in('A','B','C'....)
    GROUP BY table_name
      

  5.   


    记得收集表的信息
    analyze table tbname  compute statistics
      

  6.   

    SELECT table_name,num_rows FROM All_Tables  WHERE OWNER='YY0A' ORDER BY num_rows DESC;
      

  7.   


    我想问的是
       查到:num_rows 是number of records,但是3 楼 7楼中为什么会有:sum(num_rows)?还有:   all_tables 在数据库中是视图, 源码中对应的是  sys.tab$.rowcnt  且没有别名, 那么在all_tables 中应该是rowcnt啊, 为什么会是:num_rows?  下面是:selecte × from all_tables where rownum<2 的前20个字段的字段名,但是在源代码中都没有,他们是怎么来的?OWNER
    TABLE_NAME
    TABLESPACE_NAME
    CLUSTER_NAME
    IOT_NAME
    STATUS
    PCT_FREE
    PCT_USED
    INI_TRANS
    MAX_TRANS
    INITIAL_EXTENT
    NEXT_EXTENT
    MIN_EXTENTS
    MAX_EXTENTS
    PCT_INCREASE
    FREELISTS
    FREELIST_GROUPS
    LOGGING YES
    BACKED_UP
    NUM_ROWS
      

  8.   

    通过分析表的方式是可行的。需要首先分析一,然后在user_tables视图中取值。
    但是一个SQL语句是不能完成的!!
    也可以写一个存储过程,然后将所有表统计后写入临时表。
    如果仅仅为了查看每个表的数据量,可以生成一个脚本
    select 'select count(*) from '||table_name||';' from user_tables where table_name in ('a','b'........)
    然后复制脚本,批量执行就行了。
      

  9.   

    select table_name,num_rows from all_tables;
    上面的句子就可以查出所有表中的每个表中有多少条记录数
    比如:表名t_arg    记录数20000
    正如这样,不知道你要的是不是这样的结果。