HELP 幫助用戶瞭解數據庫中各類對象的結構
SHOW 幫助用戶瞭解某種對象的定義,即返回其DDL語句
EXPLAIN 返回一個SQL語句經優化處理後的執行步驟,注意並未真正執行
FALLBACK 對數據加以保護的一種方式,是冗餘的備份
RENAME 對錶重命名
NULLIFZERO 對數據做累計處理時,忽略零值
ZEROIFNULL 對數據做累計處理時,將空值做零處理
WITH...BY 對詳細數據記錄做分類統計(Sub-Total)時有用
MODIFY USER/DATABASE 對用戶/數據庫對象做動態修改而無需數據庫重組
HELP 命令 參數 說明
HELP DATABASE databasename; 能夠顯示一個指定數據庫所包含的全部對象
HELP USER username; 顯示某個用戶中所包含對象的信息
HELP TABLE tablename; 顯示某張表的信息
HELP VIEW viewname; 顯示某個視圖的信息
HELP MACRO macroname; 顯示某個宏的信息
HELP COLUMN table or viewname.*; 顯示錶/視圖的各列的信息
HELP COLUMN table or viewname.colname . . ., colname; 顯示錶/視圖某幾列的信息
HELP INDEX tablename; 顯示某個表中的全部索引定義
HELP STATISTICS tablename; 顯示錶的統計
HELP CONSTRAINT table or viewname.constraintname; 顯示定義在某個表/視圖上的約束定義
HELP JOIN INDEX join_indexname; 顯示鏈接索引的定義
HELP TRIGGER triggername; 顯示觸發器的信息
HELP PROCEDURE procedurename; 顯示存儲過程的信息
HELP PROCEDURE procedurename ATTRIBUTES;
HELP 'SQL'; 獲得全部SQL命令的列表信息
HELP 'SQL sqlcommand'; 獲得某個特定SQL命令的使用方法
如要知道這些數據庫對象是用什麼樣的DDL命令建立的,則要使用SHOW命令:
SHOW命令 參數
SHOW TABLE Tablename ;
SHOW VIEW Viewname;
SHOW MACRO Macroname;
SHOW INDEX Tablename;
SHOW JOIN INDEX join_indexname;
SHOW TRIGGER Triggername;
SHOW PROCEDURE Procedurename;
EXPLAIN命令:利用EXPLAIN命令,能夠了解Teradata執行一個SQL交易請求的詳細過程和計劃,這對於更進一步地理解Teradata的查詢處理機制有很大的幫助。另外一方面,對於複雜SQL交易的調試來講,這也是不可缺乏的一個工具。
利用EXPLAIN解釋一個SQL交易的方法很簡單,就是在原來SQL語句的前面加上EXPLAIN便可,其它徹底不變。
在LIKE結構的字符串中,'%'和'_'能夠做爲通配符使用,可是若是須要匹配這些字符自己(好比查找95%),即把它們做爲通常字符時使用,咱們能夠經過定義ESCAPE字符來達到這個目的,緊跟在ESCAPE字符後的’%’和’_’做爲通常字符看待。
例:
LIKE ''%A%�A__'' ESCAPE ''A''
在這個表達式中,將字母A定義爲ESCAPE字符,其中:
! 第一個%爲通配符;
! 第一個A和其後的%聯合表示字符%;
! 第三個%爲通配符;
! 第二個A和其後的A聯合表示字符A;
! 第四個A和其後的’_’聯合表示字符_;
! 最後一個’_’爲通配符。
對於表達式的操做數若是是字符,ANSI標準中是區分大小寫的,若是不要區分大小寫,可使用UPPER函數將其轉換成大寫字母來進行匹配。Teradata缺省不區分大小寫,若是要區分,可使用其擴展參數CASESPECIFIC。
NULL的使用
NULL的說明:
! NULL顯示沒有數據的字段
! NULL表示不存在或未發現的值
! NULL既不是數字類型也不是字符類型
! 具備NULL值的字段能夠被壓縮,不佔任何空間
NULL也能夠參與運算,其運算規則爲:
! NULL在算術運算中產生的結果爲NULL(空)
! NULL在比較運算中產生的結果爲False
! UNKNOWN DATA, MISSING DATA和NULL是一樣的含義
! 當進行升序排列時,NULL在數字列排列在負數前,在字符列排列在空格
前。
宏
CREATE MACRO macroname AS ( . . . ); 定義宏
EXECUTE macroname; 執行宏語句
SHOW MACRO macroname; 顯示宏定義
REPLACE MACRO macroname AS ( . . . ); 改變宏定義
DROP MACRO macroname; 從字典中刪除宏定義
EXPLAIN EXEC macroname; 顯示宏執行的解釋
EXISTS在子查詢中的使用
EXISTS可使用在子查詢中,用來表示查詢至少返回一行。若是前面加上否認詞NOT,則表示查詢時無記錄存在。EXISTS能夠代替IN,而NOT EXISTS能夠代替NOT IN。
CHARACTERS函數
CHARACTERS函數也是Teradata的擴展,用於計算VARCHAR型數據字段的實際字符串長度。CHARACTERS函數能夠簡寫成CHARACTER、CHARS或者CHAR。
TRIM函數
ANSI標準的TRIM函數用於去除字符數據中前頭或後端的空格或者二進制數據(BYTE與VARBYTE)中前頭或後端的零。在Teradata缺省模式下,TRIM (<expression>)只能去除後端的空格或二進制零。
SELECT CAST (salary_amount AS FORMAT ''$$$,$$9.99'');
SELECT (1000/salary_amount) * 100
(FORMAT 'ZZ9%')
(TITLE 'Increase Percentage')
FROM employee
WHERE employee_number = 1004;
SELECT (CAST (1000/salary_amount) * 100 AS FORMAT 'ZZ9%'
TITLE 'Increase Percentage') FROM ...
FORMAT短語中可使用的格式化字符主要爲:
$ 美圓標識符
9 數字位
Z 將數字中的前綴零去除
, 在指定位置插入逗號
. 指定小數點位置
- 在指定位置插入連字號
/ 在指定位置插入斜線
% 在指定位置插入百分號
X 字符數據,每一個X表明一個字符
G 圖形數據.一個G表明一個邏輯字符(雙字節)
B 在指定位置插入空格
對日期的格式化處理
在Teradata中,日期數據的缺省輸出格式是:YY/MM/DD,這和ANSI標準是同樣的。而ANSI標準建議的日期顯示格式是:YYYY-MM-DD。
其它一些經常使用的日期顯示格式列舉以下,其中的B表示空格。
YYYY/MM/DD'
YYYY-MM-DD'
YYYY.DDD'
DBMMMBYYYY'
MMBDD,BYYYY'
YYYYBMMMBDD'
YY/MM/DD'
D-MM-YY'
YBDDD'
MM'
下面是一些對日期進行格式化的例子。
句法 結果
FORMAT 'YYYY/MM/DD' 1996/03/27
FORMAT 'DDbMMMbYYYY' 27 Mar 1996
FORMAT 'mmmBdd,Byyyy' Mar 27, 1996
FORMAT 'DD.MM.YYYY' 27.03.1996
FORMAT 'MM/DD/YY' 03/27/96
FORMAT 'MMM.DD.YY' Mar.27.96
FORMAT 'yy -- mm -- dd' 96 -- 03 -- 27
FORMAT 'DDDYY' 08696
SELECT last_name,first_name,hire_date (FORMAT 'mmmBdd,Byyyy')
FROM employee
ORDER BY last_name;
利用FORMAT短語,能夠將字符字段或表達式進行截取處理,這種處理隻影響顯示格式,而不會影響數據的內部存儲格式。
Teradata的屬性函數
屬性函數 返回信息說明
TYPE 數據類型
TITLE 標題短語
FORMAT 格式短語
NAMED NAMED子句
CHARACTERS 字符個數
Teradata DDL容許在建立表時指定表的物理屬性,包括:
A. SET 不容許記錄重複,例:CREATE SET TABLE table1 ...
B. MULTISET 容許記錄重複,例:CREATE MULTISET TABLE table1 ...
C. 數據保護要結合FALLBACK和JOURNAL (流水或日誌)。
FALLBACK是Teradata的一種數據保護機制,數據表的每一條記錄都同時存放兩份,並且位於不一樣的AMP所控制的存儲單元中;當數據發生問題或者AMP失敗時,能夠利用存放在其餘AMP上的數據保證對數據表的訪問。
- FALLBACK 使用FALLBACK保護機制
- NO FALLBACK 不使用FALLBACK保護機制
日誌有BEFORE和AFTER兩種,分別保存了一條記錄變化先後的狀態。當系統出錯時,能夠利用日誌進行恢復。
D. 存儲空間選項
DATABLOCKSIZE用來指定數據塊大小,最小的數據塊爲6144字節,最大的數據塊是32256字節。
FREESPACE用來定義在每一個磁盤柱面上保留的空間(0-75%)。
例:
CREATE MULTISET TABLE table_1
, FALLBACK, NO JOURNAL
, FREESPACE = 10 PERCENT
, DATABLOCKSIZE = 16384 BYTES
(field1 INTEGER);
雖然TD的DDL裏有primary key,可是實際上存儲在TD數據字典裏的只有index:
A. 沒有在CREATE TABLE時指定PI
IF 定義了PK,THEN PK = UPI
ELSE IF 存在定義爲UNIQUE的字段,
THEN 第一個NIQUE的字段爲UPI
ELSE 表中定義的第一個字段做爲NUPI
B. CREATE TABLE時指定了PI
IF 定義了PK,THEN PK做爲USI
AND爲每個定義爲UNIQUE的字段創建一個USI
新建一張表TB1,表結構與TB2同樣,不須要數據。
Create table TB1 as TB2 with no data;
使用子查詢建立表,並選擇所需的列。
CREATE TABLE emp1 AS(SELECT employee_number, department_number, salary_amount FROM employee) WITH NO DATA;
往TB1表中裝入TB2表的數據(也能夠是有選擇性的,需指定字段)
INSERT INTO TB1 SELECT * from TB2;
交易完整性
在Teradata中,系統將保證一個交易的完整。怎樣纔算是一個交易呢,在Teradata中,根據其所處方式的不一樣在處理時也有所不一樣。在 Teradata缺省模式下,以分號結束的每一個SQL語句都是一個完整的交易,也可使用BT (Begin Transaction)和ET (End Transaction)來顯示地定義一個交易。下面看一個例子:
例:
缺省方式
.LOGON
INSERT row1; (txn #1)
INSERT row2; (txn #2)
.LOGOFF
用BT和ET顯示定義交易
.LOGON
BT;
INSERT row1; (txn #1)
INSERT row2;
COMMIT WORK;
ET;
.LOGOFF
第一部分中有兩個SQL語句,用分號結束,表示兩個交易,任何一個失敗不會影響另外一個的執行。而第二部分用BT和ET顯示地規定:在BT和ET之間的全部 SQL是一個交易,只有最後的COMMIT WORK執行成功後,纔會真正地更新數據庫。執行過程當中任何一個SQL語句失敗,都會使整個交易失敗,系統將自動進行恢復(Rollback)處理。
在ANSI方式下,必須進行顯示地提交才能完成一個交易。
利用WITH BY進行數據小計
WITH BY的主要特色包括:
A. 它爲明細數據表建立分類小計。
B. 跟GROUP BY不一樣的是,WITH BY沒有剔除明細記錄,而是在明細記錄後面按照分類增長小計行。
C. 能夠容許多於一個字段進行小計,即小計當中能夠嵌套小計。
D. 輸出結果將根據BY後面的全部字段自動進行排序。
E. 它是Teradata的一個擴展特性。
舉例:
1. WITH BY, WITH和ORDER BY的聯合使用:
SELECT last_name AS NAME
,salary_amount AS SALARY
,department_number AS DEPT
FROM employee
WITH SUM (SALARY) BY DEPT
WITH SUM (SALARY) (TITLE 'GRAND TOTAL')
ORDER BY NAME;
結果以下:
NAME SALARY DEPT
Kanieski 29250.00 301
Stein 29450.00 301
-------------
Sum (SALARY) 58700.00
Johnson 36300.00 401
Trader 37850.00 401
-------------
Sum (SALARY) 74150.00
Ryan 31200.00 sql