teradata 一些基本命令

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

相關文章
相關標籤/搜索