在oracle中选择语句

时间:2012-05-24 07:02:52

标签: oracle select

我需要从表格中选择50个字段。但是第20个字段必须除以100.如果不是这样,我可以简单地从表中编写select *。在这种情况下,我怎么能选择而不必写所有列。

明确提及所有列是一个好习惯,但是当我想快速查看数据以进行简短分析时,我更喜欢像 选择*(1-19个字段)      ,第20场/ 100      ,*(21-50个字段) 从表。

在oracle中这可能吗?

5 个答案:

答案 0 :(得分:2)

开发SQL的最佳工具之一是具有列编辑模式的体面文本编辑器。 SQL Developer提供了一个增强请求,但同时Notepad ++是一个不错的选择。

对于这样的任务,您可以通过DESC获取表或视图的列名,使用基于列的编辑器添加对齐的逗号,并修改您需要的一列。

如果您需要,例如,在大多数列上应用计数并添加列名称,这也很方便。

以下示例大约需要45秒:

select
          OWNER                                                        ,
          count(TABLE_NAME               ) c_TABLE_NAME                ,
          count(TABLESPACE_NAME          ) c_TABLESPACE_NAME           ,
          count(CLUSTER_NAME             ) c_CLUSTER_NAME              ,
          count(IOT_NAME                 ) c_IOT_NAME                  ,
          count(STATUS                   ) c_STATUS                    ,
          count(PCT_FREE                 ) c_PCT_FREE                  ,
          count(PCT_USED                 ) c_PCT_USED                  ,
          count(INI_TRANS                ) c_INI_TRANS                 ,
          count(MAX_TRANS                ) c_MAX_TRANS                 ,
          count(INITIAL_EXTENT           ) c_INITIAL_EXTENT            ,
          count(NEXT_EXTENT              ) c_NEXT_EXTENT               ,
          count(MIN_EXTENTS              ) c_MIN_EXTENTS               ,
          count(MAX_EXTENTS              ) c_MAX_EXTENTS               ,
          count(PCT_INCREASE             ) c_PCT_INCREASE              ,
          count(FREELISTS                ) c_FREELISTS                 ,
          count(FREELIST_GROUPS          ) c_FREELIST_GROUPS           ,
          count(LOGGING                  ) c_LOGGING                   ,
          count(BACKED_UP                ) c_BACKED_UP                 ,
          count(NUM_ROWS                 ) c_NUM_ROWS                  ,
          count(BLOCKS                   ) c_BLOCKS                    ,
          count(EMPTY_BLOCKS             ) c_EMPTY_BLOCKS              ,
          count(AVG_SPACE                ) c_AVG_SPACE                 ,
          count(CHAIN_CNT                ) c_CHAIN_CNT                 ,
          count(AVG_ROW_LEN              ) c_AVG_ROW_LEN               ,
          count(AVG_SPACE_FREELIST_BLOCKS) c_AVG_SPACE_FREELIST_BLOCKS ,
          count(NUM_FREELIST_BLOCKS      ) c_NUM_FREELIST_BLOCKS       ,
          count(DEGREE                   ) c_DEGREE                    ,
          count(INSTANCES                ) c_INSTANCES                 ,
          count(CACHE                    ) c_CACHE                     ,
          count(TABLE_LOCK               ) c_TABLE_LOCK                ,
          count(SAMPLE_SIZE              ) c_SAMPLE_SIZE               ,
          count(LAST_ANALYZED            ) c_LAST_ANALYZED             ,
          count(PARTITIONED              ) c_PARTITIONED               ,
          count(IOT_TYPE                 ) c_IOT_TYPE                  ,
          count(TEMPORARY                ) c_TEMPORARY                 ,
          count(SECONDARY                ) c_SECONDARY                 ,
          count(NESTED                   ) c_NESTED                    ,
          count(BUFFER_POOL              ) c_BUFFER_POOL               ,
          count(ROW_MOVEMENT             ) c_ROW_MOVEMENT              ,
          count(GLOBAL_STATS             ) c_GLOBAL_STATS              ,
          count(USER_STATS               ) c_USER_STATS                ,
          count(DURATION                 ) c_DURATION                  ,
          count(SKIP_CORRUPT             ) c_SKIP_CORRUPT              ,
          count(MONITORING               ) c_MONITORING                ,
          count(CLUSTER_OWNER            ) c_CLUSTER_OWNER             ,
          count(DEPENDENCIES             ) c_DEPENDENCIES              ,
          count(COMPRESSION              ) c_COMPRESSION               ,
          count(DROPPED                  ) c_DROPPED
from     dba_tables
group by owner

答案 1 :(得分:1)

不,如果输入所有列太多工作,请使用SQLDEVELOPER等工具,它允许您将表拖到编辑区域,并为您提供完整的选择语句。

此外,最好明确说明列名。如果由于某种原因,表格发生了变化并且列被删除,则查询将停止工作。

答案 2 :(得分:1)

数据字典是你的朋友:

select column_name || ','
from all_tab_columns
where table_name = 'SOME_TABLE'
and owner = 'SOME_OWNER'
order by column_id;

在IDE中运行它并将结果复制/粘贴到您的代码中。当然需要修改以满足您的输出需求。

不要偷懒,我知道选择*会很诱人,但明确指定列要好得多。上面的代码比手写出每一列更容易让人痛苦。

答案 3 :(得分:1)

您当然不希望在要显式列出列名的生产代码中执行此操作。而且您可能想要将计算放在函数中或将整个查询放在视图中。但是,如果您只是进行一些快速的分析,您可以轻松地将计算列放在列列表的开头(或结尾),如下所示

SELECT column20/100 computed_col20, a.*
  FROM table_name a

答案 4 :(得分:0)

你可以写下每一列的名称,在第20栏中写下“column / 20”。可能看起来很多工作,但我没有看到任何其他方式。