1. 程式人生 > >db2中create table as的建表方式

db2中create table as的建表方式

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.插資料過來
insert into tt select t1.col1,t2.col2 from t1,t2 where t1.col1=t2.col2;
這是一個比較笨的方法,沒什麼好說的!今天總結了其他2中方法,現在分享給大家。


還有一種就是通過遊標load進另外一個表中(採用遊標,資料不需落地)
DECLARE mycursor CURSOR FOR SELECT col1, col2  FROM t2;
LOAD FROM mycursor OF CURSOR INSERT INTO t3;