T-SQL 手冊

 


--語 句 功 能

--數據操作
SELECT --從數據庫表中檢索數據行和列
INSERT --向數據庫表添加新數據行
DELETE --從數據庫表中刪除數據行
UPDATE --更新數據庫表中的數據

--數據定義
CREATE TABLE --創建一個數據庫表
DROP TABLE --從數據庫中刪除表
ALTER TABLE --修改數據庫表結構
CREATE VIEW --創建一個視圖
DROP VIEW --從數據庫中刪除視圖
CREATE INDEX --爲數據庫表創建一個索引
DROP INDEX --從數據庫中刪除索引
CREATE PROCEDURE --創建一個存儲過程
DROP PROCEDURE --從數據庫中刪除存儲過程
CREATE TRIGGER --創建一個觸發器
DROP TRIGGER --從數據庫中刪除觸發器
CREATE SCHEMA --向數據庫添加一個新模式
DROP SCHEMA --從數據庫中刪除一個模式
CREATE DOMAIN --創建一個數據值域
ALTER DOMAIN --改變域定義
DROP DOMAIN --從數據庫中刪除一個域

--數據控制
GRANT --授予用戶訪問權限
DENY --拒絕用戶訪問
REVOKE --解除用戶訪問權限

--事務控制
COMMIT --結束當前事務
ROLLBACK --中止當前事務
SET TRANSACTION --定義當前事務數據訪問特徵

--程序化SQL
DECLARE --爲查詢設定遊標
EXPLAN --爲查詢描述數據訪問計劃
OPEN --檢索查詢結果打開一個遊標
FETCH --檢索一行查詢結果
CLOSE --關閉遊標
PREPARE --爲動態執行準備SQL 語句
EXECUTE --動態地執行SQL 語句
DESCRIBE --描述準備好的查詢

 

---局部變量
declare @id char(10)
set @id = '10010001'
select @id = '10010001'
---全局變量
---必須以@@開頭

--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --打印字符串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'

--CASE
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end

--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印變量x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --打印變量c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end

--WAITFOR
--例 等待1 小時2 分零3 秒後才執行SELECT 語句
waitfor delay ’01:02:03’
select * from employee
--例 等到晚上11 點零8 分後才執行SELECT 語句
waitfor time ’23:08:00’
select * from employee

--PRINT
print 'job id 1 expects the default'

--RAISERROR
raiserror  ('job id 1 expects the default level of 10.',16,1)


***SELECT***

select *(列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的範圍 第一個字母爲a-z之間或A-Z之間的字母)
stockname like '[^F-M]%' --------- (^排除指定範圍)
--------- 只能在使用like關鍵字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stockssx = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
order by 1,2 --------- by列號
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查詢
--------- 除非能確保內層select只返回一個行的值,
--------- 否則應在外層where子句中用一個in限定符
select distinct column_name form table_name --------- distinct指定檢索獨有的列值,不重複
select stocknumber ,stocknumber + 10 = stocknumber + 10 from table_name
select stockname , stocknumber = count(*) from table_name group by stockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having選定指定的組

select *
from table1, table2
where
table1.id = table2.id  -------- 內連接
table1.id *= table2.id -------- 左外部連接,table1中有的而table2中沒有得以null表示
table1.id =* table2.id -------- 右外部連接

select *
from table1 as t1
inner (left/right outer)
join table2 as t2
on t1.id = t2.id

select stockname from table1
union [all] ----- union合併查詢結果集,all-保留重複行
select stockname from table2

***insert***

insert into table_name (Stock_name,Stock_number)
values (xxx,xxxx)
select Stockname , Stocknumber from Stock_table2---插入查詢結果

***update***

update table_name
set Stockname = xxx
Stockname = default
Stockname = null
Stocknumber = Stocknumber  + 4
[where Stockid = 3]

***delete***

delete from table_name where Stockid = 3
truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------------- 完全刪除表

***alter table*** --- 修改數據庫表結構

sp_help table_name ---- 顯示錶已有特徵
alter table database.owner.table_name add column_name char(2) null .....
alter table table_name add constraint de_p_name default 'name' for p_name
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ......... ----- 實現刪除列的方法(創建新表)
alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束

***function(/*常用函數*/)***

----統計函數----
AVG --求平均值
COUNT --統計數目
MAX --求最大值
MIN --求最小值
SUM --求和

--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id

--MAX
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)

--STDEV()
--STDEV()函數返回表達式中所有數據的標準差

--STDEVP()
--STDEVP()函數返回總體標準差

--VAR()
--VAR()函數返回表達式中所有值的統計變異數

--VARP()
--VARP()函數返回總體變異數

----算術函數----

/***三角函數***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的餘弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的餘切

/***反三角函數***/
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回餘弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度轉換爲角度返回與表達式相同的數據類型可爲
--INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression) --把角度轉換爲弧度返回與表達式相同的數據類型可爲
--INTEGER/MONEY/REAL/FLOAT 類型
EXP(float_expression) --返回表達式的指數值
LOG(float_expression) --返回表達式的自然對數值
LOG10(float_expression)--返回表達式的以10 爲底的對數值
SQRT(float_expression) --返回表達式的平方根

/***取近似值函數***/
CEILING(numeric_expression) --返回>=表達式的最小整數返回的數據類型與表達式相同可爲
--INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression) --返回<=表達式的最小整數返回的數據類型與表達式相同可爲
--INTEGER/MONEY/REAL/FLOAT 類型
ROUND(numeric_expression) --返回以integer_expression 爲精度的四捨五入值返回的數據
--類型與表達式相同可爲INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression) --返回表達式的絕對值返回的數據類型與表達式相同可爲
--INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression) --測試參數的正負號返回0 零值1 正數或-1 負數返回的數據類型
--與表達式相同可爲INTEGER/MONEY/REAL/FLOAT 類型
PI() --返回值爲π 即3.1415926535897936
RAND([integer_expression]) --用任選的[integer_expression]做種子值得出0-1 間的隨機浮點數

----字符串函數----
ASCII() --函數返回字符表達式最左端字符的ASCII 碼值
CHAR() --函數用於將ASCII 碼轉換爲字符
--如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值
LOWER() --函數把字符串全部轉換爲小寫
UPPER() --函數把字符串全部轉換爲大寫
STR() --函數把數值型數據轉換爲字符型數據
LTRIM() --函數把字符串頭部的空格去掉
RTRIM() --函數把字符串尾部的空格去掉
LEFT(<int_exp>) ,RIGHT(<int_exp>) ,SUBSTRING(expression , start , length) --函數返回部分字符串
CHARINDEX(),PATINDEX() --函數返回字符串中某個指定的子串出現的開始位置
SOUNDEX() --函數返回一個四位字符碼
--SOUNDEX函數可用來查找聲音相似的字符串但SOUNDEX函數對數字和漢字均只返回0 值
DIFFERENCE() --函數返回由SOUNDEX 函數返回的兩個字符表達式的值的差異
--0 兩個SOUNDEX 函數返回值的第一個字符不同
--1 兩個SOUNDEX 函數返回值的第一個字符相同
--2 兩個SOUNDEX 函數返回值的第一二個字符相同
--3 兩個SOUNDEX 函數返回值的第一二三個字符相同
--4 兩個SOUNDEX 函數返回值完全相同

QUOTENAME() --函數返回被特定字符括起來的字符串
/*select quotename('abc', '{') quotename('abc')
運行結果如下
----------------------------------{
{abc} [abc]*/

REPLICATE() --函數返回一個重複character_expression 指定次數的字符串
/*select replicate('abc', 3) replicate( 'abc', -2)
運行結果如下
----------- -----------
abcabcabc NULL*/

REVERSE() --函數將指定的字符串的字符排列順序顛倒
REPLACE() --函數返回被替換了指定子串的字符串
/*select replace('abc123g', '123', 'def')
運行結果如下
----------- -----------
abcdefg*/

SPACE(<int_exp>) --函數返回一個有指定長度的空白字符串
STUFF() --函數用另一子串替換字符串指定位置長度的子串
/*下例通過在第一個字符串 (abcdef) 中刪除從第二個位置(字符 b)開始的三個字符,然後在刪除的起始位置插入第二個字符串,創建並返回一個字符串。 
select stuff('abcdef', 2, 3, 'ijklmn')
運行結果如下
----------- -----------
aijklmnef*/

----數據類型轉換函數----
CAST() 函數語法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函數語法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])

select cast(100+99 as char) convert(varchar(12), getdate())
運行結果如下
------------------------------ ------------
199 Jan 15 2000

----日期函數----
DAY() --函數返回date_expression 中的日期值
MONTH() --函數返回date_expression 中的月份值
YEAR() --函數返回date_expression 中的年份值
DATEADD(<datepart> ,<number> ,<date>)
--函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
--函數返回兩個指定日期在datepart 方面的不同之處
DATENAME(<datepart> , <date>) --函數以字符串的形式返回日期的指定部分
DATEPART(<datepart> , <date>) --函數以整數值的形式返回日期的指定部分
GETDATE() --函數以DATETIME 的缺省格式返回系統當前的日期和時間

----系統函數----
APP_NAME() --函數返回當前執行的應用程序的名稱
COALESCE() --函數返回衆多表達式中第一個非NULL 表達式的值
COL_LENGTH(<'table_name'>, <'column_name'>) --函數返回表中指定字段的長度值
COL_NAME(<table_id>, <column_id>) --函數返回表中指定字段的名稱即列名
DATALENGTH() --函數返回數據表達式的數據的實際長度
DB_ID(['database_name']) --函數返回數據庫的編號
DB_NAME(database_id) --函數返回數據庫的名稱
HOST_ID() --函數返回服務器端計算機的名稱
HOST_NAME() --函數返回服務器端計算機的名稱
IDENTITY(<data_type>[, seed increment]) [AS column_name])
--IDENTITY() 函數只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函數判斷所給定的表達式是否爲合理日期
ISNULL(<check_expression>, <replacement_value>) --函數將表達式中的NULL 值用指定值替換
ISNUMERIC() --函數判斷所給定的表達式是否爲合理的數值
NEWID() --函數返回一個UNIQUEIDENTIFIER 類型的數值
NULLIF(<expression1>, <expression2>)
--NULLIF 函數在expression1 與expression2 相等時返回NULL 值若不相等時則返回expression1 的值

----系統存儲過程----
sp_help table_name --顯示對象信息
sp_helptext procedure_name --查看源代碼
sp_rename olDname, newName --重命名
sp_configure --更改設置
sp_depends trigger_name --查看依賴的表名
sp_executesql --執行sql存儲過程
如:exec sp_executesql @sql_string, N'@parameter varchar(20), @Counts int out ', @parameter, @Counts out

@@ROWCOUNT--最後執行的 Transact-SQL 語句執行後所影響的記錄數
@@IDENTITY--最後插入的標識值
@@ERROR--最後執行的 Transact-SQL 語句的錯誤代碼

----自定義存儲過程----
--建立存儲過程
if exists (select name from sysobjects where name = 'salequa' and type = 'p')
 drop procedure salequa--查找存儲過程是否存在
go
create procedure salequa
@stor_id char(4) ,@sum smallint output
with ENCRYPTION--加密存儲過程源碼
as
begin
 select ord_num, ord_date, payterms, title_id, qty from  sales where  stor_id=@stor_id
 select @sum=sum(qty) from sales where stor_id=@stor_id
end
go
--修改存儲過程
alter procedure oakland_authors
as
begin
 select ord_num, ord_date from sales where stor_id=@stor_id
 select @sum=sum(qty) from sales where stor_id=@stor_id
end
--執行存儲過程
declare @totalqua smallint
execute salequa '7131',@totalqua output
if @totalqua<=50 
 select '銷售信息'='銷售等級爲3 銷售量爲'+rtrim(cast(@totalqua as varchar(20)))
--刪除存儲過程
drop procedure salequa

----觸發器----
--注意事項:
--1.CREATE TRIGGER語句必須是批處理的第一個語句
--2.表的所有者具有創建觸發器的缺省權限 表的所有者不能把該權限傳給其它用戶  
--3.觸發器是數據庫對象 所以其命名必須符合命名規則  
--4.儘管在觸發器的 SQL 語句中可以參照其它數據庫中的對象,但是,觸發器只能創建在當前數據庫中  
--5.雖然觸發器可以參照視圖或臨時表,但不能在視圖或臨時表上創建觸發器,而只能在基表或在創建視圖的表上創建觸發器  
--6.一個觸發器只能對應一個表,這是由觸發器的機制決定的

--建立觸發器
create trigger updateVoteSum
on voteDetails
for update
as
begin
 --當用戶投票後,voteTitle 表中的總票數 voteSum 加一
 update voteTitle
 set voteSum=voteSum+1
 where voteId=(select top 1 voteId from inserted)
end

--inserted,deleted
--兩個只讀臨時邏輯表,存儲在內存中,爲系統管理
--inserted:存儲  向原表插入了的數據集
--deleted: 存儲  從原表中刪除了的數據集
--更新操作: 先將原表中的相應內容去掉,然後插入新值,此時,
--在deleted表中存放了舊值,在inserted表中存放了新值

--INSTEAD OF 觸發器
--相應的操作並不被執行,而僅運行 INSTEAD OF 觸發器的 SQL 語句
--用途:使不可被修改的視圖能夠支持修改;可以執行批處理的某一部分而放棄執行其餘部分

create trigger upsaledata
on saledata
for update
as
begin
 --14 表示第2、第3或第4列數據項被修改時,將開始執行以下語句*/
 if ((columns_updated() & 14) > 0)
end
--修改觸發器
alter trigger upsaledata
on saledata
for update
as
begin
 if ((columns_updated() & 2) > 0)
end
--刪除觸發器
drop trigger upsaledata

---臨時表---

--局部臨時表 #test123
--存儲在TempDB數據庫中,只能被創建它的連接所使用,系統自動在表名後加隨機標識符。
create table #test123 (test_id  smallint, test_name  char(10))

--全局臨時表 ##test2
--存儲在TempDB數據庫中,可以被其它連接所共享。
create table ##test2 (test_id  smallint, test_name  char(10))

--表變量 @test321
--存儲在內存中,性能上比臨時表好
--在批處理結束時自動被系統刪除
--注意,在連接多個表時,要爲此表變量指定別名.
declare @test321 table (test_id  smallint, test_name  char(10))


----sql中的保留字----

action
add
aggregate
all
alter
after
and
as
asc
avg
avg_row_length
auto_increment
between
bigint
bit
binary
blob
bool
both
by
cascade
case
char
character
change
check
checksum
column
columns
comment
constraint
create
cross
current_date
current_time
current_timestamp
data database
databases date
datetime
day day_hour
day_minute
day_second
dayofmonth
dayofweek
dayofyear
dec
decimal
default
delayed
delay_key_write
delete desc
describe
distinct
distinctrow
double
drop
end
else
escape
escaped
enclosed
enum
explain
exists
fields
file
first
float
float4
float8
flush
foreign
from
for
full
function
global
grant
grants
group
having
heap
high_priority
hour
hour_minute
hour_second
hosts
identified
ignore
in
index
infile
inner
insert
insert_id
int
integer
interval
int1
int2
int3
int4
int8
into
if
is
isam
join
key
keys
kill
last_insert_id
leading
left
length
like
lines
limit
load
local
lock
logs
long
longblob
longtext
low_priority
max
max_rows
match
mediumblob
mediumtext
mediumint
middleint
min_rows
minute
minute_second
modify
month
monthname
myisam
natural
numeric
no
not
null
on
optimize
option
optionally
or
order
outer
outfile
pack_keys
partial
password
precision
primary
procedure
process
processlist
privileges
read
real
references
reload
regexp
rename
replace
restrict
returns
revoke
rlike
row
rows
second
select
set
show
shutdown
smallint
soname
sql_big_tables
sql_big_selects
sql_low_priority_updates
sql_log_off
sql_log_update
sql_select_limit
sql_small_result
sql_big_result
sql_warnings
straight_join
starting
status
string
table
tables
temporary
terminated
text
then
time
timestamp
tinyblob
tinytext
tinyint
trailing
to
type
use
using
unique
unlock
unsigned
update
usage
values
varchar
variables
varying
varbinary
with
write
when
where
year
year_month
zerofill

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章