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
推薦閱讀: