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_amountFROM 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 salFROM 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, d.department_name, e.last_name AS mgr_nameFROM department d INNER JOIN employee eON e.employee_number = d.manager_employee_number ) WITH DATA;

也可以對子查詢中的列使用計算函數,或者表達式運算(比如兩個欄位相減),甚至約束,得到更豐富的結果。

更多數據科學方面內容,請關注個人微信公眾號:DataCode


推薦閱讀:

TAG:SQL | 數據科學 | SQL語句 |