like用法
select first_name,last_name from employee where last_name like all('%e%','%s%');
select first_name,last_name from employee where last_name like any/some('%e%','%s%');
[@more@]
teradata預設不區分大小寫,如果要區分,可以使用其擴充套件引數casespecific
select first_name,last_name from employee where last_name(casespecific) like '%ra%';
萬用字元作為一般字元使用
例:like "%a%%aaa__" escape"a"
在這個表示式中,講字母a定義為escape字元,其中:
第乙個%為萬用字元:
第乙個a和其後的%聯合表示字元%
第三個%為萬用字元
第二個a和其後的a聯合表示字元a;
第四個和其後的'_'聯合表示字元_
最後乙個'_'為萬用字元
null的使用
當進行公升序排列時,null在數字列排列在負數前,在字元排列在空格前
優先順序和括號
邏輯運算子的預設優先順序順序從高到低為:not.and.or
notnot既可以否定操作符,也可以否定條件表示式
否定操作符:
select first_name,last_name,employee_number from employee where department_number not =301;
否定條件:
select first_name,last_name,employee_number from employee where not(department_number=301);
字元型資料
在ansi標準中關於字元型資料定義了兩類:chae和varchar,teradata除了上述兩類基本字元資料外,還擴充套件了long varchar型別,它等同於varchar(64000),是最長的字串
char(size)固定長度的字串最大長度:64000位元組
varchar(size)
char varying(size)
character varying(size) 這三個是可變長度字串,最大長度:64000位元組
long varchar 等同於varchar(64000)
二進位制資料
二進位制資料型別是teradata的擴充套件,ansi標準沒有此型別
byte(size) 固定長度的二進位制串預設值:(1)最大值:64000位元組
varbyte(size) 可變長的二進位制串預設值:(1)最大值:64000位元組
數字型資料
在ansi標準中關於數字型資料定義了四類:smallint.integer.float.decimal,teradata還擴充套件了byteint和date
smallint 整數 範圍:-32768~32767
integer 整數 範圍:-2147483648~2147483647
decimal(size,dec) 小數 最大:18位
numeric(precision,dec) decimal的同義詞
float 表示浮點數
float[(precision)] 通float
real 同float
double precision 雙精度浮點數
byteint 有符號整數 範圍-128~127
date 特殊整數,格式為yymmdd或yyymmdd表示日期
圖形資料
graphic[(n)] 固定長度的圖形字串預設長度:1
vargraphic(n) 可變長的圖形字串
long vargraphic 可變長的圖形字串
算術運算子
**(求冪)
mod(取模)
系統變數
date當前系統日期
time系統時間
user當前登陸的使用者
database當前預設的資料庫
字元常量.數字常量和計算模式
字元文字在ansi方式下區分大小寫,而在teradata預設模式下不區分大小寫
數字型常量最多可以包含15個數字,數字前面的零是無意義的
計算模式是指在sql的select語句中直接進行數學計算,如下:
select 2*2593;
日期計算
例:2023年3月31日的表達方式
year=(1997-1900)*10000=970000
month=(3*100)=300
day=31
date=970331
於日期有關的資料函式
1.extract
ansi標準中extract函式允許選取日期和時間中任意段或任意間隔的值,teradata中extract函式支援日期資料中選取年.月.日.從時間資料中選取小時.分鐘和秒
select date; 96/11/07
select extract(year from date); 1996
select extract(month from date+30); 12
sleect extract(day from date+2); 09
select time; 14:52:32
select extract(hour from time); 14
select extract(second from time+30); invalid time
2.add_months
利用cast作資料轉換
ansi標準中利用cast函式將一種資料型別轉換成另一種資料型別
select cast(salary_amount as integer) from employee;
select cast(salary_amount as dec(6,0)) from employee;
select cast(last_name as char(5)) from employee where department_number=401;
teradata也可以利用cast函式來完成上面的操作,另外,它也作了擴充.為了完成上面相同的操作,也可以使用下面的表達方式
select salary_amount(integer);
select salary_amount(dec(6,0));
select last_name(char(5));
teradata對cast函式本身也作了擴充套件,比如為了將顯示結果以大寫表示,可以使用下面的sql語句
select cast(last_name as char(5) uppercase) from employee where department_number=401;
簡單的巨集
巨集(macro)的基本特徵是:
可以包含一條或多條sql語句
可以包含多個betq語句
可以包含註解
儲存在資料字典中
巨集的定義
create macro birthday_list as
(select last_name,first_name,birthdate from employee where department_number=201 order by birthdate;
);巨集的執行
exec birthday_list;
巨集的刪除
drop macro birthday_list;
巨集的顯示和改變
show macro birthday_list
使用replace macro命令可以改變巨集的定義
子查詢基本子查詢
複雜子查詢
在子查詢中可以使用一些限制符,如下所示:
=any 等於 in
not=all 等於 not in
=some 等於 in
exists在子查詢中的使用
exists可以使用在自查詢中,用來表示查詢至少返回一行.如果前面加上否定詞not,則表示查詢時無記錄存在.exists可以代替in,而not exists可以代替not in
select 'yes' where exists(select department_number from department where department_number not in(select department_number from employee));
select true where exists(select * from employee where department_number=600);
常用SQL優化技巧
作為程式設計師經常和資料庫打交道的時候還是非常頻繁的,掌握住一些sql的優化技巧還是非常有必要的。下面列出一些常用的sql優化技巧,感興趣的朋友可以了解一下。1 注意萬用字元中like的使用 以下寫法會造成全表的掃瞄,例如 select id,name from userinfo where nam...
sql常用的優化技巧
一,通過變數的方式來設定引數 好 stringsql select from people p where p.id 壞 stringsql select from people p where p.id id 資料庫的sql文解析和執行計畫會儲存在快取中,但是sql文只要有變化,就得重新解析。wh...
常用SQL語句優化技巧
除了建立索引之外,保持良好的sql語句編寫習慣將會降低sql效能問題發生。通過變數的方式來設定引數 好 stringsql select from people p where p.id 壞 stringsql select from people p where p.id id 資料庫的sql文解...