1、T-SQL編程
1變量
局部變量
局部變量是用戶可自定義的變量,它的作用範圍僅在程序內部。在程序中通常用來儲存從表中查詢到的數據,或當作程序執行過程中暫存變量使用。局部變量必須以“@”開頭,而且必須先用DECLARE命令說明後纔可使用。其說明形式如下:
DECLARE @變量名變量類型 [@變量名變量類型…]
例如:DECLARE @id char(10) —–聲明一個長度爲10的字符變量
全局變量
全局變量不是由用戶的程序定義的,它們是在服務器級定應義的。只能使用預先說明及定義的變局變量。引用全局變量時,必須以“@@”開頭。局部變量的名稱不能與全局變量的名稱相同、否則會在應用中出錯。
常用全局變量
@@ERROR | 最後一個T-SQL錯誤的錯誤號 |
@@IDENTITY | 最後一次插入的標識值 |
@@LANGUAGE | 當前使用的語言的名稱 |
@@MAX_CONNECTIONS | 可以創建的同時連接的最大數目 |
@@ROWCOUNT | 受上一個SQL語句影響的行數 |
@@SERVERNAME | 本地服務器的名稱 |
@@TRANSCOUNT | 當前連接打開的事務數 |
@@VERSION | SQL Server的版本信息 |
例如: select @@VERSION as w --返回SQL服務器安裝的日期、版本和處理器類型。2輸出語句
使用print或select輸出
Print/Select 變量或表達式
3控制語句
if-else語句
語法格式爲:
if(條件)
begin
語句1
語句2
end
else
begin
語句1
語句2
end
注意:begin…end相當於c語言中的大括號,有多條語句才使用begin…end,相當於begin…end之間的語句就是一個語句塊
看個實例更容易理解,例:
declare @myavg float
select @myavg=avg(writexam) from stumake
print '本班平均分' + convert(varchar(5),@myavg)
if(@myavg>70)
begin
print '前三的成績爲'
select top 3 * from stumake order by writexam dese
end
else
begin
print '後三名的成績爲'
select top 3 * from stumake order by writexam asc
end
在使用T-SQL編程時,可以切換視圖來查看結果,工具>選項>查詢結果>常規>顯示結果的默認方式>以文本格式顯示結果,查看效果更好
while循環語句
語法格式爲:
while(條件)
begin
語句1
語句2
break
end
注意:break是表示結束循環,與c語言中的輔助控制語句break,continue類似
看個實例:
declare @n int
where(1=1) --條件永遠成立
begin
select @n=count(*) from stuMarks
where writtenExam<60 --統計不及格人數
if (@n>0)
update stuMarks --每人加2分
set writtenExam=writtenExam+2
else
break --退出循環
end
print '加分後的成績如下:'
select * from stuMarks
case-end多分支語句
語法格式爲:
case
when 條件1 then 結果1
when 條件2 then 結果2
else 其他結果
end
4批處理
批處理是作爲一個邏輯單元的T-SQL語句。如果一條語句不能通過語法分析,那麼不會運行任何語句。如果一條語句在運行時失敗,那麼產生錯誤的語句之前的語句都已經運行了。爲了將一個腳本分爲多個批處理,可使用GO語句。
GO語句的特點:
GO語句必須自成一行,只有註釋可以再同一行上。
它使得自腳本的開始部分或者最近一個GO語句以後的所有語句編譯成一個執行計劃併發送到服務器,與任何其他批處理無關。
GO語句不是T-SQL命令,而是由各種SQL Server命令實用程序(如:ManagementStudio中的"查詢"窗口)識別的命令。
2、SQL高級查詢
1嵌套子查詢
子查詢也稱爲內部查詢或內部選擇,而包含子查詢的語句也稱爲外部查詢或外部選擇
子查詢是嵌套在另一個查詢中的select—from—where表達式。子查詢嵌套在where子句中,通常用於對集合的成員資格、集合的比較以及集合的基數進行檢查,還用於:空關係測試,重複元祖存在性測試,from子句中的子查詢,with子句。
集合成員資格:連接詞in測試元組是否是集合中的成員,集合是由select子句產生的一組值構成的,對應的還有not in。
短語“至少比某一個要大”在SQL中用“>some”表示。
some子句的定義:C<comp> some r <=>存在t屬於r(C <comp> t),其中<comp>可以爲:< ,>,=,……(=some)=in;但是,(不等於some)不等於notin。
在SQL中,結構>all對應於詞組“比所有的都大”。
all子句的定義:C <comp> all r <=> 任意t屬於r(C<comp>t);(不等於all)等於not in 但是,(=all)不等於in。
SQL還有一個特性可測試一個子查詢的結果中是否存在元組。exists結構在作爲參數的子查詢爲空時返回true值。
Exists r <=> r不等於0
Not exists r<=> r=0
還可以將“關係A包含關係B”寫成“not exists(B except A)”.
還有一個布爾函數,用於測試在一個子查詢的結果中是否存在重複元組。如果作爲參數的子查詢結果中沒有重複的元組unique結構將返回true值。
SQL允許在from子句中使用子查詢表達式。任何select-from-where表達式返回的結果都是關係,因而可以被插入到另一個select-from-where中任何關係可以出現的位置。
2聚合技術
SQL提供了五個固有聚集函數:
平均值:avg
最小值:min
最大值:max
總和:sum
計數:count
其中,sum和avg的輸入必須是數字集,但其他運算符還可以作用在非數字數據類型的集合上,如字符串。
還有分組聚集(group by):其中子句出的一個或多個屬性是用來構造分組的,在group by子句中的所有屬性上取值相同的元組將被分在一個組中。
having子句類似於where子句,但其是對分組限定條件,而不是對元組限定條件,having子句中的謂詞在形成分組後才起作用,因此可以使用聚集函數。
3排序函數
row_number()
函數一般用於組內排序,而其他三個函數是對結果集排序
特點:沒有並列編號,不跳空編號
rank()
特點:有並列編號,有跳空編號
dense_rank()
特點:有並列編號,沒有跳空編號
4公用表表達式
語法結構
Withexpression_name [(column_name)(…..n)]
AS
(CTE query_definition) 查詢結果
後續使用結果集時可直接使用公用表名稱expression_name
3、存儲過程
1存儲過程的概念(存儲過程都是用exec調用)
存儲過程(procedure)類似於C語言中的函數,用來執行管理任務或應用複雜的業務規則,存儲過程可以帶參數,也可以返回結果。
存儲過程可以包含數據操縱語句、變量、邏輯控制語句等,比如:單個select語句,select語句塊,select語句與邏輯控制塊。
存儲過程優點:
執行速度更快
允許模塊化程序設計
提高系統安全性
減少網絡流通量
2系統存儲過程
由系統定義,存放在master數據庫中
類似C語言中的系統函數
系統存儲過程的名稱都以“sp_”開頭或”xp_”開頭
3用戶自定義存儲過程
CREATE PROC[EDURE] 存儲過程名
@參數1 數據類型 =默認值 OUTPUT,
……,
@參數n 數據類型 =默認值 OUTPUT
AS
SQL語句
GO
4RAISERROR
RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ]
)
[ WITH option [ ,...n ] ]
用戶可定義0-18之間嚴重級別
二、JavaScript技術應用
1、JavaScript語句和函數
1條件
if 語句 - 只有當指定條件爲 true 時,使用該語句來執行代碼
if...else 語句 - 當條件爲 true 時執行代碼,當條件爲 false 時執行其他代碼
if...else if....else 語句 - 使用該語句來選擇多個代碼塊之一來執行
switch 語句 - 使用該語句來選擇多個代碼塊之一來執行
2循環
while的語法爲
while (exp) {
//statements;
}
1 2 3 4 5 6 7 8 9 10 11 12 | var a=1,b=0; while(a<=1000){ if(a%2==0){ if(b%20==0) { document.write("<br>第"+parseInt(b/20+1)+"行偶數"); } document.write(a+" "+" "); b++; } a++; } |
其中,exp爲一條件判斷語句,最終的結果都可以用一個布爾值表示,若其結果爲true則進行下面{}裏的語句,然後繼續判斷exp,直到exp的結果爲false爲止,若exp的結果爲false,則跳過這條循環語句,執行接下來的代碼。需要注意的是在{}裏的語句必須存在對exp的結果產生影響的代碼,否則循環會一直重複下去,形成死循環。
do……while語句與while語句大體上相同,唯一的不同之處是do……while語句會先執行語句,然後對條件進行判斷。其語法爲
do {
//statements;
}while (condition);
同樣是上面的例子,其結果變爲
1 2 3 4 5 6 7 8 9 10 11 12 | var a=1,b=0; do{ if(a%2==0){ if(b%20==0) { document.write("<br>第"+parseInt(b/20+1)+"行偶數"); } document.write("<u>"+a+"</u>"+" "+" "); b++; } a++; }while(a<=1000) |
相較於上面的兩種循環,for循環顯得更爲地簡潔有效。
for (變量=開始值;變量<=結束值;變量=變量+步進值) {
需執行的代碼
}
()裏的三條語句中,第二條爲判斷語句,只有其結果爲真時循環纔會執行。
1 2 3 4 5 6 7 8 9 | for(var a=1,b=0;a<=100;a++){ if(a%2==0){ if(b%20==0) { document.write("<br>第"+parseInt(b/20+1)+"行偶數"); } document.write("<u>"+a+"</u>"+" "+" "); } } |
在循環中,有時候我們急需跳出整個循環或某一次的循環語句不進行執行,這時我們需要用到break語句和continue語句。這兩個語句都存在於循環語句中,前者終止整個循環,後者阻止某次循環的執行
3函數
//求和函數
function sum(a,b){
return a+b;
}
這是最典型的函數聲明,以關鍵字function開始,其後跟隨函數名稱標識符、一對圓括號(包含由0個或多個逗號隔開的參數名稱)和一對花括號(包含0條或多條JS語句,構成函數體)。這種函數定義方式需要顯式的指定函數名稱,在代碼執行前就被解釋器加載到作用域中,這個特性可以讓我們在函數定義之前就調用該函數。我們可以通過代碼來驗證這一點。
2、JavaScript對象
1數組
數組是指的數據的有序列表。
數組中每個值稱之爲數組的一個元素。
數組中的每個元素都有一個位置,這個位置稱之爲索引(下標、index)。數組的索引是從 0 開始的
同一個數組中,元素的類型不做任何限制。也就是說,同一個數組中可以方法Number、String、Boolean、Object對象等等。可以同時放入任何的類型。甚至數組中的元素可以是另外一個數組(構成多維數組)。
數組的特點
雖然每種語言都有數組這種數據結構,但是JavaScript的數組相比他們有很大不同。
數組長度可以動態改變。
同一個數組中可以存儲不同的數據類型。
數據的有序集合
每個數組都有一個length屬性,表示的是數組中元素的個數
創建數組
構造函數在創建對象的時候使用。數組的構造函數式 Array()
例如: new Array(數組長度);
//創建一個長度爲 0 的空數組
var colors = new Array();
//創建一個長度爲 5 的數組。每個數組的元素的默認值是 undefined。
var colors = new Array(5);
//創建一個長度爲 3 的數組,並且3個元素分別是 "blue" "red""green"
var colors = new Array("blue","red", "green");
使用構造函數創建數組對象的時候,最後一個元素後面不要添加括號,否則報錯。這樣是錯誤的:new Array("a", )
使用構造函數如果只傳入了一個Number值,則這個值必須 >= 0, 否則會報錯。
使用構造函數創建數組對象的時候,new 關鍵字是可以省略的。 例如:Array(5) 這樣是可以的。
每個數組都有一個叫 length的屬性,表示數組的長度(即:元素的個數)。
var arr = [10, 20, 60, 5, 7];
alert(arr.length); //彈出:5
數組的遍歷
一般有3種方法遍歷數組:
for循環
for… in
for each ( ES5 新增)
數組常用方法
toString()轉換方法:
返回由數組中每個值的字符串形式拼接而成的一個以逗號分隔的字符串
join() 方法:
toString() 方法只能使用逗號連接,而 join() 方法可以使用指定的連接符連接
向隊列頭部添加元素(unshift)、從隊列頭部移除元素(shift)
對數組元素進行倒置。
arr.reverse();
倒置操作是對原數組本身做了操作,返回的也是原數組對象,並不是一個新創建的數組。
indexOf(item): 從前面開始向後查找 item 第一次出現的位置
lastIndexOf(item): 從尾部開始向前查找 item 第一次出現的位置
如果找不到元素,則返回 -1
2正則表達式
正則表達式的常用方法:
regexp.test(string)
用來測試一個字符串是否能夠被匹配。它返回ture或false兩個值。
regexp.exec(string)
在指定的字符串中執行搜尋一個匹配,匹配的結果是通過一個數組返回
一些常用的正則表達式示例:
1、匹配所有的正數:^[0-9]+$
2、匹配所有的小數:^\-?[0-9]*\.?[0-9]*$
3、匹配所有的整數:^\-?[0-9]+$
4、提取信息中的中文字符串:[\u4e00-\u9fa5]* ;
5、提取信息中的郵件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
6、提取信息中的中國手機號碼:(86)*0*13\d{9}
7、提取信息中的中國固定電話號碼:(\d3,4\d3,4|\d{3,4}-|\s)?\d{8}
8、提取信息中的中國郵政編碼:[1-9]{1}(\d+){5}
9、提取信息中的中國身份證號碼:\d{18}|\d{15}
10、提取信息中的任何數字:(-?\d*)(\.\d+)?
3、文檔對象模型
1Window對象
Window 對象屬性
屬性 | 描述 |
返回窗口是否已被關閉。 | |
設置或返回窗口狀態欄中的默認文本。 | |
對 Document 對象的只讀引用。請參閱 Document 對象。 | |
對 History 對象的只讀引用。請參數 History 對象。 | |
返回窗口的文檔顯示區的高度。 | |
返回窗口的文檔顯示區的寬度。 | |
length | 設置或返回窗口中的框架數量。 |
用於窗口或框架的 Location 對象。請參閱 Location 對象。 | |
設置或返回窗口的名稱。 | |
對 Navigator 對象的只讀引用。請參數 Navigator 對象。 | |
返回對創建此窗口的窗口的引用。 | |
返回窗口的外部高度。 | |
返回窗口的外部寬度。 | |
pageXOffset | 設置或返回當前頁面相對於窗口顯示區左上角的 X 位置。 |
pageYOffset | 設置或返回當前頁面相對於窗口顯示區左上角的 Y 位置。 |
parent | 返回父窗口。 |
對 Screen 對象的只讀引用。請參數 Screen 對象。 | |
返回對當前窗口的引用。等價於 Window 屬性。 | |
設置窗口狀態欄的文本。 | |
返回最頂層的先輩窗口。 | |
window | window 屬性等價於 self 屬性,它包含了對窗口自身的引用。 |
| 只讀整數。聲明瞭窗口的左上角在屏幕上的的 x 座標和 y 座標。IE、Safari 和 Opera 支持 screenLeft 和 screenTop,而 Firefox 和 Safari 支持 screenX 和 screenY。 |
Window 對象方法
方法 | 描述 |
顯示帶有一段消息和一個確認按鈕的警告框。 | |
把鍵盤焦點從頂層窗口移開。 | |
取消由 setInterval() 設置的 timeout。 | |
取消由 setTimeout() 方法設置的 timeout。 | |
關閉瀏覽器窗口。 | |
顯示帶有一段消息以及確認按鈕和取消按鈕的對話框。 | |
創建一個 pop-up 窗口。 | |
把鍵盤焦點給予一個窗口。 | |
可相對窗口的當前座標把它移動指定的像素。 | |
把窗口的左上角移動到一個指定的座標。 | |
打開一個新的瀏覽器窗口或查找一個已命名的窗口。 | |
打印當前窗口的內容。 | |
顯示可提示用戶輸入的對話框。 | |
按照指定的像素調整窗口的大小。 | |
把窗口的大小調整到指定的寬度和高度。 | |
按照指定的像素值來滾動內容。 | |
把內容滾動到指定的座標。 | |
按照指定的週期(以毫秒計)來調用函數或計算表達式。 | |
在指定的毫秒數後調用函數或計算表達式。 |
@Document對象
document 對象的屬性
document
對象主要有如下屬性:
屬性 | 說明 |
document.title | 設置文檔標題等價於HTML的<title>標籤 |
document.bgColor | 設置頁面背景色 |
document.linkColor | 未點擊過的鏈接顏色 |
document.alinkColor | 激活鏈接(焦點在此鏈接上)的顏色 |
document.fgColor | 設置前景色(文本顏色) |
document.vlinkColor | 已點擊過的鏈接顏色 |
document.URL | 設置URL屬性從而在同一窗口打開另一網頁 |
document.fileCreatedDate | 文件建立日期,只讀屬性 |
document.fileModifiedDate | 文件修改日期,只讀屬性 |
document.fileSize | 文件大小,只讀屬性 |
document.cookie | 設置和讀出cookie |
document.charset | 設置字符集 簡體中文:gb2312 |
對象方法:
方法 | 說明 |
document.write() | 動態向頁面寫入內容 |
document.createElement(Tag) | 創建一個html標籤對象 |
document.getElementById(ID) | 獲得指定ID值的對象 |
document.getElementsByTagName(tagname) | 獲得指定標籤名的對象 |
document.getElementsByName(Name) | 獲得指定Name值的對象 |
document.getElementsByClassName(classname) | 獲得指定類名的對象(html5 API) |
3.Location對象
Location 對象屬性
屬性 | 描述 |
設置或返回從井號 (#) 開始的 URL(錨)。 | |
設置或返回主機名和當前 URL 的端口號。 | |
設置或返回當前 URL 的主機名。 | |
設置或返回完整的 URL。 | |
設置或返回當前 URL 的路徑部分。 | |
設置或返回當前 URL 的端口號。 | |
設置或返回當前 URL 的協議。 | |
設置或返回從問號 (?) 開始的 URL(查詢部分)。 |
Location 對象方法
屬性 | 描述 |
加載新的文檔。 | |
重新加載當前文檔。 | |
用新的文檔替換當前文檔 |
4History對象
History 對象屬性
屬性 | 描述 |
返回瀏覽器歷史列表中的 URL 數量。 |
History 對象方法
方法 | 描述 |
加載 history 列表中的前一個 URL。 | |
加載 history 列表中的下一個 URL。 | |
加載 history 列表中的某個具體頁面。 |