我需要從表中選擇50個字段。但是第20場必須除以100.如果情況並非如此,我可以簡單地從表中選擇*。在這種情況下,我可以如何選擇而不必寫出所有列。oracle中的select語句
這是一個很好的做法,明確提到的所有列,但是當我想爲一個短期分析的數據的快速瀏覽,我寧願像 SELECT *的東西(1-19場) ,20場/ 100 ,*(21-50字段) 。
這在oracle中可能嗎?
我需要從表中選擇50個字段。但是第20場必須除以100.如果情況並非如此,我可以簡單地從表中選擇*。在這種情況下,我可以如何選擇而不必寫出所有列。oracle中的select語句
這是一個很好的做法,明確提到的所有列,但是當我想爲一個短期分析的數據的快速瀏覽,我寧願像 SELECT *的東西(1-19場) ,20場/ 100 ,*(21-50字段) 。
這在oracle中可能嗎?
你肯定不想在生產代碼中這樣做,你希望顯式列出列名。你可能想要把計算放在一個函數中,或者把整個查詢放在一個視圖中。但是,如果你只是做了一些分析,你可以很容易地把計算列放在列表的開頭(或結尾),像這樣
SELECT column20/100 computed_col20, a.*
FROM table_name a
你可以寫每列的名字,在第20列寫「column/20」。可能看起來很多工作,但我沒有看到任何其他方式。
不,如果輸入所有列的工作太多,可以使用SQLDEVELOPER這樣的工具,這樣可以將表格拖入編輯區域,併爲您提供完整的select語句。
另外,最好明確指定列名。如果由於某種原因表格發生變化並且某列丟失,則您的查詢將停止工作。
關於顯式列名的需求的好處。 – APC
您可以在開發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
數據字典是你的朋友:
select column_name || ','
from all_tab_columns
where table_name = 'SOME_TABLE'
and owner = 'SOME_OWNER'
order by column_id;
運行在你的IDE和複製/粘貼結果到你的代碼。根據需要進行修改以滿足您的輸出需求。
不要懶惰,我知道它傾向於說select *,但它明顯更好地指定列。上面的代碼會比用手寫出每一列更不痛苦。
如果你有任何合理的方法可以在別的地方做「分20場」程序,你可能應該這樣做。 – zebediah49
你關心保留列的順序嗎? –
@Bo。不,我不需要保存訂單。 – chemicalkt