db2中create table as的建表方式
阿新 • • 發佈:2019-01-23
DB2沒有類似oracle的create table as select來定義表的方式,所以DB2中把SELECT查詢出來的結果定義為別的表比較麻煩!
DB2定義表的3種方式:
首先建立一個例子表,再插入幾條語句。
create table t1(col1 varchar(10)); create table t2 (col1 varchar(10),col2 varchar(20)); insert into t1 values ('1'); insert into t2 values ('1','ZXT'); describe select t1.col1,t2.col2 from t1,t2 where t1.col1=t2.col2;
一:按照常規的形式定義
首先describe sql,得到DDL,可以如下進行(describe select t1.col1,t2.col2 from t1,t2where t1.col1=t2.col2;)
然後根據DDL來建立table,最後把資料insert 過去。
二:彙總表方式
需要3個步驟:
1.建立彙總表
create table tt as
(
select t1.col1,t2.col2 from t1,t2 where t1.col1=t2.col2
)data initially deferred
refresh deferred;
2.重新整理資料
refresh table tt;
3.把彙總表改成一般的表
alter table tt drop materialized query;
這個方法比較常用,好使沒啥好說的,而且可以一次性就把資料重新整理過去!
三:只定義表結構的形式
需要2個步驟:
1.建立表---只定義表結構
create table tt as
(
select t1.col1,t2.col2 from t1,t2 where t1.col1=t2.col2
) definition only;
注:此步驟只定義了表結構,類似於oracle 的create XX as 語句
2.插資料過來
這是一個比較笨的方法,沒什麼好說的!今天總結了其他2中方法,現在分享給大家。insert into tt select t1.col1,t2.col2 from t1,t2 where t1.col1=t2.col2;
還有一種就是通過遊標load進另外一個表中(採用遊標,資料不需落地)
DECLARE mycursor CURSOR FOR SELECT col1, col2 FROM t2;
LOAD FROM mycursor OF CURSOR INSERT INTO t3;