常用sql使用技巧

2021-07-06 04:18:34 字數 4285 閱讀 2441

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文解...