相关文章推荐
首发于 DataCode
Teradata SQL基础:从已有表创建新表

Teradata SQL基础:从已有表创建新表

数据库中很多时候,需要从已有表来建新的表,或者从已经存在表的部分列创建新的表。

各个数据库语言稍微有点区别,为避免混淆,整理如下。


DB2和Mysql中,从已有表创建新表格式如下:

CREATE TABLE TABLENAME LIKE ...

从已经有表的部分列创建新表格式如下:

CREATE TALBLE TABLENAME... AS SELECT ...


Teradata的使用方法如下:

1.使用已有表创建空表

Teradata从基于已存在表创建新表格式为 CREATE TALBE AS 。如果不需要源表数据,使用 WITHE NO DATA 选项。

例如:

CREATE TABLE dept1 AS department WITH NO DATA; 

这样dept1和表department有相同的结构定义。

2.使用子查询创建空表

使用子查询,可以限制创建目标表的行和列。

CREATE TABLE emp1 AS
(SELECT employee_number
,department_number
,salary_amount
FROM employee) WITH NO DATA;

这样新表emp1有3个列:employee_number,department_number,salary_amount。

使用子查询创建表,有一些限制:

  • 不允许使用 ORDER BY 子句。
  • 所有列或表达式都必须有名字,缺省的或赋予的

允许使用下列内容:

  • 连接(Join)表达式(包括外连接)
  • OLAP 函数
  • 嵌套子查询

使用子查询创建新表时,也可以更改列名。
例如:

CREATE TABLE emp1 AS
(SELECT employee_number AS emp
,department_number AS dept
,salary_amount AS sal
FROM employee) WITH NO DATA;

也可以对列的属性进行修改,这里不做深入讨论。

3.使用已有的表创建有数据的表

创建有源表数据的新表,只需要将参数WITH NO DATA 改成WITH DATA,
就可以复制源表的数据流。

CREATE TABLE dept1 AS department WITH DATA;

当然也可以用子查询选中部分列。甚至,子查询中也可以使用表关联。

4.子查询中使用连接

子查询中使用多个表关联,就可以得到多个表的数据了。

例如:

CREATE TABLE dept3 AS
SELECT d.department_number
 
推荐文章