版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
工程數(shù)據(jù)管理西安工程大學(xué)機(jī)電工程學(xué)院西安工程大學(xué)機(jī)電工程學(xué)院工程數(shù)據(jù)管理工程數(shù)據(jù)管理西安工程大學(xué)機(jī)電工程學(xué)院第10章用戶自定義函數(shù)的應(yīng)用與程序設(shè)計函數(shù)在程序的應(yīng)用設(shè)計中是必不可少的,在SQL語言中提供了大量功能強(qiáng)大的內(nèi)置函數(shù),這些函數(shù)的使用大大的提高了SQL語句操縱信息的能力,使得SQL語句的使用有了更大的靈活性,以前我們學(xué)過的函數(shù)有,聚合函數(shù),“print”函數(shù),同時也用過“raiserror”函數(shù)等等,另外還有很多函數(shù),如,日期函數(shù)、刪除空格函數(shù)、獲取子串函數(shù)等,不能全部講完,現(xiàn)在下來我們看一下常用函數(shù)的應(yīng)用。聚合函數(shù)我們以前碰到過,像sum()、avg()、min()等,就不做具體介紹了??匆韵潞瘮?shù):1、day(date),month(date),year(date),如selectyear('78-9-28'),另外兩個格式一樣。2、getdate()如selectgetdate()得到當(dāng)時的具體日期3、Str(number)將一數(shù)值型的數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù)。Str(459)返回“459”。Str(459.001)返回"459.001“4、刪除空格函數(shù)LTRIM(expression),刪除字符串左側(cè)的空格。如selectLTRIM('你好')RTRIM
(expression),刪除字符串右側(cè)的空格。5、獲取子串函數(shù)工程數(shù)據(jù)管理西安工程大學(xué)機(jī)電工程學(xué)院第10章用戶自定義函數(shù)的應(yīng)用與程序設(shè)計1)left函數(shù):返回從字符串最左邊起到第Num個字符的部分子串。具體如下:Left(expression,Num)如:usemy_db1GoSelectleft((selectdzfromstu_infowherexh=960811),4)Go2)right函數(shù):返回從字符串最右邊起到第Num個字符的部分子串。具體如下:right(expression,Num)如:usemy_db1GoSelectright((selectdzfromstu_infowherexh=960811),4)Go3)substring函數(shù):返回的子串是從字符左邊第start個字符起Num個字符的部分。Substring(expression,start,Num)如:selectSubstring('我是中華人民共和國公民',3,4)下來再看一下數(shù)據(jù)函數(shù),主要有以下幾種:工程數(shù)據(jù)管理西安工程大學(xué)機(jī)電工程學(xué)院第10章用戶自定義函數(shù)的應(yīng)用與程序設(shè)計Sin()正弦函數(shù),Cos()余弦函數(shù),返回以弧度表示角的對應(yīng)值。Tan()正切函數(shù),Cot()余切函數(shù),Asin()反正弦函數(shù),Acos()反余弦函數(shù),返回弧度表示的角。Atan()反余切函數(shù),Exp()表達(dá)式的指數(shù)值,Log()對數(shù)函數(shù)Log10()以10為底的對數(shù)Sqrt()表達(dá)式的平方根Abs()表達(dá)式的絕對值Pi()π值有時在函數(shù)里要用到運算符,使得表達(dá)式更加的方便靈活。所以再看一下有哪些運算符工程數(shù)據(jù)管理西安工程大學(xué)機(jī)電工程學(xué)院第10章用戶自定義函數(shù)的應(yīng)用與程序設(shè)計運算符1、算術(shù)運算符SQL支持的算術(shù)運算符有:+:加或正號+在有時也叫做連接符,在字符串里也經(jīng)常用到。-:減或負(fù)號*:乘法/:除法%:取模,返回的是余數(shù)2、賦值運算符:即等號(=)3、位運算符可以在任意兩個整型數(shù)據(jù)或二進(jìn)制數(shù)據(jù)之間執(zhí)行位操作。主要有以下幾個&,也就是按位and︱,按位or^,按位互斥,表示按位異或~,按位not,表示按位取反4、比較運算符=,>,<,>=,<=,<>,!=,!>,!<,!=工程數(shù)據(jù)管理西安工程大學(xué)機(jī)電工程學(xué)院第10章用戶自定義函數(shù)的應(yīng)用與程序設(shè)計為了更加適應(yīng)實際的應(yīng)用,有時系統(tǒng)自帶的函數(shù)無法滿足客戶的需求,這時就要我們自己創(chuàng)建一個函數(shù),即要求用戶自定義一個函數(shù),如,我們要求出1+2+3+……+100的值,此時如何讓系統(tǒng)計算出這個值,就要我們自定義一個函數(shù)。在SQL中,為了加快開發(fā)速度,可以將一個或多個SQL語句組成的子程序定義成函數(shù),而不是限制用戶只能使用自帶的函數(shù),它允許用戶自定義函數(shù),以便補(bǔ)充和擴(kuò)展系統(tǒng)不支持的一些函數(shù)。用戶定義函數(shù)采用0個或更多輸入?yún)?shù)并返回標(biāo)量值或表,函數(shù)最多可以有1024個輸入?yún)?shù),當(dāng)函數(shù)的參數(shù)有默認(rèn)值時,調(diào)用該函數(shù)必須指定默認(rèn)的default關(guān)鍵字才能獲取默認(rèn)值,用戶定義的函數(shù)不支持輸出參數(shù)。不像存儲過程,輸入與輸出參數(shù)都支持。與任何函數(shù)一樣,用戶定義的函數(shù)是可返回值的例程。根據(jù)返回值的類型,可分為三類:A、返回可更新數(shù)據(jù)表的函數(shù),如果用戶定義的函數(shù)包含單個select語句且該語句可更新,則該函數(shù)返回的表格式結(jié)果也可以更新。(內(nèi)嵌表值函數(shù))B、返回不可更新的表的函數(shù):如果用戶定義函數(shù)不止一個select語句,或包含一個不可更新的select語句,則該函數(shù)返回的表格式結(jié)果也不可更新。(多語句表值函數(shù))C、返回標(biāo)量值的函數(shù):標(biāo)量函數(shù)返回在return子句中定義的類型的單個數(shù)據(jù)值。可以使用所有標(biāo)量數(shù)據(jù)類型。(標(biāo)量函數(shù))工程數(shù)據(jù)管理西安工程大學(xué)機(jī)電工程學(xué)院第10章用戶自定義函數(shù)的應(yīng)用與程序設(shè)計用戶自定義函數(shù)的創(chuàng)建一個是用企業(yè)管理器;另一個是用查詢分析器。這個和存儲過程的創(chuàng)建一樣,雖然是在企業(yè)管理器里創(chuàng)建,但也要編SQL語句,所以像這種類型,一般我們都有查詢分析器處理。下來看一下具體的操作:一:企業(yè)管理器二:查詢分析器,具體語法:Createfunctionfunc_name------自定義的函數(shù)名(@parameter_nameparameter_type[=default])------自定義函數(shù)的參數(shù),參數(shù)的數(shù)據(jù)類型,有默認(rèn)值時寫出=默認(rèn)值Returns
parameter_type------------返回參數(shù)值的類型AsBeginSQL_expression--------------具體函數(shù)內(nèi)容Returnscalar_expression--------------返回值的表達(dá)式end工程數(shù)據(jù)管理西安工程大學(xué)機(jī)電工程學(xué)院第10章用戶自定義函數(shù)的應(yīng)用與程序設(shè)計創(chuàng)建方法知道了,現(xiàn)在根據(jù)上面學(xué)過的有三種自定義函數(shù)(標(biāo)量函數(shù)、內(nèi)嵌表值函數(shù)、多語句表值函數(shù)),分別介紹如何創(chuàng)建函數(shù):如:要給學(xué)生成績表所在庫創(chuàng)建一個函數(shù),函數(shù)名為my_func1,來實現(xiàn)數(shù)學(xué)成績在80分以上的,返回字符串‘良’,否則‘差’Usemy_db1GoCreatefunctionmy_func1(@mathcjnumeric(4,1))returnsnvarchar(5)---------------返回值只有單個數(shù)據(jù)值,所以這個函數(shù)是標(biāo)量函數(shù)。BeginDeclare@returnstrnvarchar(5)If@mathcj>80Set@returnstr='良'ElseSet@returnstr='差'Return@returnstrEnd以上自定義的函數(shù)創(chuàng)建完了,下來看一下函數(shù)的使用工程數(shù)據(jù)管理西安工程大學(xué)機(jī)電工程學(xué)院第10章用戶自定義函數(shù)的應(yīng)用與程序設(shè)計Usemy_db1Goselectxh,mathcj,dbo.my_func1(mathcj)as'良或差'fromstu_cj下面這個例子就是把查詢結(jié)果插入到一個新表,但我們這個是用函數(shù)的查詢結(jié)果,以前的是直接把列名插入。現(xiàn)在相當(dāng)于再復(fù)習(xí)一下。Usemy_db1Goselectxh,mathcj,dbo.my_func1(mathcj)as'良或差'intonew_Tfromstu_cjwhereyear=1996-------------只把學(xué)年為1996年的信息查出插入新表Usemy_db1GoInsertnew_T1(xh,mathcj,良或差)selectxh,mathcj,dbo.my_func1(mathcj)as'良或差'fromstu_cjWhereyear=1998
上面這個例子就是把查詢結(jié)果插入到另一個表,這種方法叫做“插入查詢結(jié)果集”因為是自定義函數(shù),所以要識別用戶,就要把DBO加上這個是查詢結(jié)果工程數(shù)據(jù)管理西安工程大學(xué)機(jī)電工程學(xué)院第10章用戶自定義函數(shù)的應(yīng)用與程序設(shè)計再看一個例子:declare@sint,@iintset@s=0set@i=1while@i<101beginset@s=@s+@iset@i=@i+1endprint'和是'+str(@s)這個函數(shù)可以看出來是做什么的嗎?這是用while語句求1+2+3+……+100之和。工程數(shù)據(jù)管管理西安工程大大學(xué)機(jī)電工工程學(xué)院第10章用用戶自定定義函數(shù)的的應(yīng)用與程程序設(shè)計再看一個例例子,現(xiàn)在在要創(chuàng)建如如下一個函函數(shù),函數(shù)數(shù)名為my_func3,其其中變量@X與@Y為浮點型型數(shù)據(jù),且且函數(shù)返回回值A(chǔ)也為為浮點型。。A=(X--Y)/2,當(dāng)X>YA=(X+Y)/2,當(dāng)X<YA=1,當(dāng)當(dāng)X=YCreatefunctionmy_func3(@Xfloat,@Yfloat)Returnsfloat--------這這也是一個個標(biāo)量函數(shù)數(shù)AsBeginDeclare@AfloatIf@X>@Yset@A=(@X-@Y)/2If@X<@Yset@A=(@X+@Y)/2If@X=@Yset@A=1Return@Aend工程數(shù)據(jù)管管理西安工程大大學(xué)機(jī)電工工程學(xué)院第10章用用戶自定定義函數(shù)的的應(yīng)用與程程序設(shè)計再看一個例例子:Usemy_db1GoCreatefunctionmy_func6(@sushenvarchar(10))ReturnstableAsReturn(selectxh,xm,dzfromstu_infowheresushe=@sushe)現(xiàn)在調(diào)用一一下這個函函數(shù),找出出sushe為機(jī)電電樓3號樓樓的學(xué)生信信息select*fromdbo.my_func6('機(jī)機(jī)電樓3號號樓')上面的例子子可以看出出Return子句句中只有一一條單獨的的select語句句,這個語語句的結(jié)果果構(gòu)成了內(nèi)內(nèi)嵌表值函函數(shù)返回的的表,所以以這個例子子就是內(nèi)嵌嵌表值函數(shù)數(shù)的例子工程數(shù)據(jù)管管理西安工程大大學(xué)機(jī)電工工程學(xué)院第10章用用戶自定定義函數(shù)的的應(yīng)用與程程序設(shè)計再看一個例例子:Usemy_db1GoCreatefunctionmy_func7(@sushenvarchar(10))Returns@T_ttable(xhint,xmnvarchar(5),dznvarchar(20))Asbegininsert@T_tselectxh,xm,dzfromstu_infowheresushe=@susheReturnEnd函數(shù)的調(diào)用用:select*fromdbo.my_func7('紫紫荊公寓8號樓')以上的例子子就是多語語句表值函函數(shù)的例子子,它和內(nèi)內(nèi)嵌表值函函數(shù)類似,,但不同的的是,它由由begin和end限定函數(shù)數(shù)體,并且且在returns子句里必必須定義表表的名稱和和表的格式式。工程數(shù)據(jù)管管理西安工程大大學(xué)機(jī)電工工程學(xué)院第10章用用戶自定定義函數(shù)的的應(yīng)用與程程序設(shè)計自定義函數(shù)數(shù)創(chuàng)建完后后,我們也也可以進(jìn)行行修改和刪刪除,具體體的語法::修改語法:alterfunctionfunc_nameSQL_state-----------這和和創(chuàng)建函數(shù)數(shù)的參數(shù)的的意義一樣樣。刪除珸法::dropfunctionfunc_name工程數(shù)據(jù)管管理西安工程大大學(xué)機(jī)電工工程學(xué)院第10章用用戶自定定義函數(shù)的的應(yīng)用與程程序設(shè)計最后,我們們再看一下下在SQL中SQL語句的控控制。即就就是我們平平常如何編編程SQL語言。下來再看以以下具體的的SQL語語言:1)數(shù)據(jù)庫庫定義:createdatabasedatabase_name2)表定義義:要求:1、、NOTNULL字段(學(xué)學(xué)號,姓名名,性別))2、檢查約約束:性別別(‘男’’或‘女’’)3、包含外外鍵關(guān)系((注意建表表順序)工程數(shù)據(jù)管管理西安工程大大學(xué)機(jī)電工工程學(xué)院第10章用用戶自定定義函數(shù)的的應(yīng)用與程程序設(shè)計usemy_db1goCreatetableT_xsxx(xhintnotnullprimarykey,Xmchar(10)notnull,Xbchar(10)notnullconstraintxb_chkcheck(xb='男'orxb='女女'),Csrqdatetimenull,Sfzhchar(8)null)usemy_db1GoCreatetableT_xscj(xmchar(10)notnullprimarykey,Xhintnotnullforeignkey(xh)referencesT_xsxx,Mathcjnumeric(4,1)null,Huaxuecjnumeric(4,1)null,Engcjnumeric(4,1)null,Phycjnumeric(4,1)null,Yearint)工程數(shù)據(jù)管管理西安工程大大學(xué)機(jī)電工工程學(xué)院第10章用用戶自定定義函數(shù)的的應(yīng)用與程程序設(shè)計createtabletable1_name(列名1類類型constraintconstr_name[null或或notnull][primarykey]列名2類類型[[null或notnull]列名3類類型[[null或notnull]foreignkey(列名名n,列名名..)referencestable2_name….)一般創(chuàng)建表表都是按物物理表來創(chuàng)創(chuàng)建。工程數(shù)據(jù)管管理西安工程大大學(xué)機(jī)電工工程學(xué)院第10章用用戶自定定義函數(shù)的的應(yīng)用與程程序設(shè)計3)修改表表:altertabletable_name----SQL里的的參數(shù)和創(chuàng)創(chuàng)建表一樣樣4)刪除表表:droptabletable_name5)插入數(shù)數(shù)據(jù):insert[into]table_name(列列名1,列列名2…)values(值1)------括號里里值的順序序和上面的的一樣insert[[into]]table_name(列名1,列名名2…)values(值2)------括號里里值的順順序和上上面的一一樣6)修改改數(shù)據(jù)::updatetable_namesetcol_name=new_expression………where…7)刪除除數(shù)據(jù)::deletefromtable_namewhere…………8)查詢詢語句::select…from…….[where]…以上是簡簡單的且且是必須須要知道道的SQL語句句,當(dāng)然然在實際際當(dāng)中,,還有一一些復(fù)雜雜的SQL語句句,還要要借助于于流程控控制語句句。1、begin…..end像前面我我們在創(chuàng)創(chuàng)建函數(shù)數(shù)時用到到的。2、if….else3、goto語語句,這這個語句句可改變變流程執(zhí)執(zhí)行的順順序,可可將執(zhí)行行流程轉(zhuǎn)轉(zhuǎn)移到標(biāo)標(biāo)號處繼繼續(xù)執(zhí)行行流程。。如,將將流程跳跳轉(zhuǎn)到標(biāo)標(biāo)號為label處執(zhí)執(zhí)行程序序,則gotolabel。此處處注意的的是,在在label語語句處必必須是label:(必須須有冒號號,且冒冒號后跟跟SQL句,label:begin…end或或其它))工程數(shù)據(jù)據(jù)管理西安工程程大學(xué)機(jī)機(jī)電工程程學(xué)院第10章章用戶戶自定義義函數(shù)的的應(yīng)用與與程序設(shè)設(shè)計4、while、break和coninue語語句While:是是一種控控制結(jié)構(gòu)構(gòu),用于于重復(fù)執(zhí)執(zhí)行一條條語句或或語句塊塊的條件件。當(dāng)條條件成立立(也就就是說條條件是TRUE)是重重復(fù)執(zhí)行行。While布布爾表達(dá)式式SQL語語句break------break語語句可停止while語語句,從while循環(huán)環(huán)中退出。SQL語句句continue--------continue語句跳跳過后面的任任何語句,引引起while重新循環(huán)環(huán)。5、return這是無條件從從一個查詢或或存儲過程中中退出,即返返回語句,前前面已用過,,不做介紹。。6、waitfor這個語句可觸觸發(fā)一個語句句塊、存儲過過程或事務(wù)的的執(zhí)行的時間間,時間間隔隔或事件。語法如:waitfordelay‘‘時間常量量’意思是要等待待多長時間waitfortime‘時時間常量’意意思是是要等到什么么時間waitfordelay10:00:00意意思思是要等待10個小時waitfortime10:00:00意意思思是要等到10點9、靜夜夜四無無鄰,,荒居居舊業(yè)業(yè)貧。。。1月-231月-23Friday,January6,202310、雨中黃黃葉樹,,燈下白白頭人。。。14:47:2514:47:2514:471/6/20232:47:25PM11、以我我獨沈沈久,,愧君君相見見頻。。。1月-2314:47:2614:47Jan-2306-Jan-2312、故故人人江江海海別別,,幾幾度度隔隔山山川川。。。。14:47:2614:47:2614:47Friday,January6,202313、乍見見翻疑疑夢,,相悲悲各問問年。。。1月-231月-2314:47:2614:47:26January6,202314、他鄉(xiāng)鄉(xiāng)生白白發(fā),,舊國國見青青山。。。06一一月月20232:47:26下下午14:47:261月-2315、比比不不了了得得就就不不比比,,得得不不到到的的就就不不要要。。。。。一月月232:47下下午午1月月-2314:47January6,202316、行行動動出出成成果果,,工工作作出出財財富富。。。。2023/1/614:47:2614:47:2606January202317、做前,能夠夠環(huán)視四周;;做時,你只只能或者最好好沿著以腳為為起點的射線線向前。。2:47:26下午2:47下下午14:47:261月-239、沒有失失敗,只只有暫時時停止成成功!。。1月-231月-23Friday,January6,202310、很多多事情情努力力了未未必有有結(jié)果果,但但是不不努力力卻什什么改改變也也沒有有。。。14:47:2614:47:2614:471/6/20232:47:26PM11、成功就就是日復(fù)復(fù)一日那那一點點點小小努努力的積積累。。。1月-2314:47:2614:47Jan-2306-Jan-2312、世間成事事,不求其其絕對圓滿滿,留一份份不足,可可得無限完完美。。14:47:2614:47:2614:47Friday,January6,202313、不知香香積寺,,數(shù)里入入云峰。。。1月-231月-2314:47:2614:47:26January6,202314、意志堅強(qiáng)的的人能把世界界放在手中像像泥塊一樣任任意揉捏。06一月20232:47:26下午14:47:261月-2315、楚塞塞三湘湘接,,荊門門九派派通。。。。一月232:47下下午午1月-2314:47January6,202316、少少年年十十五五二二十十時時,,步步行行奪奪
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 會博通 文件檔案知識一體化管理的引領(lǐng)者(單用戶版)
- 廣東省佛山市普通高中高三教學(xué)質(zhì)量檢測(一)語文試題(含答案)
- 專題06《最動聽的聲音》《把奮斗寫進(jìn)明天》《成功的鑰匙》《青年之擔(dān)當(dāng)》
- 購書買賣合同
- 產(chǎn)品代銷合同范本
- 幼兒園重陽節(jié)主題活動策劃方案五篇
- 包裝材料購銷合同范本
- 2024年世界旅游產(chǎn)業(yè)發(fā)展投資合同
- 海參海鮮采購合同
- 西安二手車買賣合同
- 電力溝施工組織設(shè)計-電纜溝
- 《法律援助》課件
- 《高處作業(yè)安全》課件
- 鍋爐本體安裝單位工程驗收表格
- 一種基于STM32的智能門鎖系統(tǒng)的設(shè)計-畢業(yè)論文
- 妊娠合并強(qiáng)直性脊柱炎的護(hù)理查房
- 2024年山東鐵投集團(tuán)招聘筆試參考題庫含答案解析
- 兒童10歲生日-百日宴-滿月酒生日會成長相冊展示(共二篇)
- 《繪本閱讀與指導(dǎo)》課程教學(xué)大綱
- 員工離職登記表(范本模板)
- 2023人教版(PEP)小學(xué)英語(三、四、五、六年級)詞匯及常用表達(dá)法(課本同步)
評論
0/150
提交評論