declare @j int,@o int,@i int
set @i=1
set @j=0
set @o=0
while @i<=40
begin
if(@i%2=1)
set @j=@j+@i*@i
else
set @o=@o+@i*@i
set @i=@i+1
end
print 'x='+convert(char(5),@j)+',y='+convert(char(5),@o)
② 用SQL語句編程
思路
寫個查詢單價在minPrice到maxPrice記錄的函數func,函數返回的類型為記錄Record類型
create function func(@minPrice int,@maxPrice int)
returns table
with encryption
as
return
select * from book where price>=(@minPrice and price<=(@maxPrice
調用的時候如下
select * from dbo.func(@minPrice,,@maxPrice)
ps:挺長時間沒用SQLServer了,代碼大概形式如上
③ 請問在網上可以學SQL資料庫編程嗎
SQL基礎
本章內容
SQL介紹
使用SELECT 語句從表中取數據
創建新表
欄位屬性
向表中添加數據
刪除和修改表
為了建立交互站點,你需要使用資料庫來存儲來自訪問者的信息。例如,你要建立一個職業介紹服務的站點,你就需要存儲諸如個人簡歷,所感興趣的工作等等這樣的信息。創建動態網葉也需要使用資料庫,如果你想顯示符合來訪者要求的最好的工作,你就需要從資料庫中取出這份工作的信息。你將會發現,在許多情況下需要使用資料庫。
在這一章里,你將學會怎樣使用「結構化查詢語言」(SQL〕來操作資料庫。SQL語言是資料庫的標准語言。在Active Sever Pages 中,無論何時你要訪問一個資料庫,你就要使用SQL語言。因此,掌握好SQL對ASP編程是非常重要的。
注意:
你可以把「SQL」讀作「sequel」,也可以按單個字母的讀音讀作S-Q-L。 兩種發音都是正確的,每種發音各有大量的支持者。在本書里,認為「SQL」讀作「sequel」。
通過這一章的學習,你將理解怎樣用SQL實現資料庫查詢,你將學會怎樣使用這種查詢從數據表中取出信息,最後,你將學會怎樣設計和建立自己的資料庫。
注意:
通過下面幾章對SQL的介紹,你將對SQL有足夠的了解,從而可以有效地使用Active Sever Pages。但是,SQL是一種復雜的語言,本書不可能包括它的全部細節。要全面掌握SQL語言,你需要學習在Microsoft SQL Sever 中使用SQL。你可以到附近的書店去買一本Microsoft SQL Sever 6.5。
SQL介紹:
本書假設你是在SQL操作Microsoft SQL Sever 的資料庫。你也可以用SQL操作許多其它類型的資料庫。SQL是操作資料庫的標准語言。(事實上,關於SQL語言有一個專門的ANSI標准〕
注意:
不要在你的站點上試圖用Microsoft Access代替Microsoft SQL Sever。SQL Sever可以同時服務於許多用戶,如果你希望你的站點有較高的訪問率,MS Access是不能勝任的。
在學習SQL的細節之前,你需要理解它的兩大特點。一個特點容易掌握,另一個掌握起來有點困難。
第一個特點是所有SQL資料庫中的數據都存儲在表中。一個表由行和列組成。例如,下面這個簡單的表包括name 和e-mail address:
Name Email Address
................................................................
Bill Gates [email protected]
president Clinton [email protected]
Stephen Walther [email protected]
這個表有兩列(列也稱為欄位,域〕:Name和Email Address。有三行,每一行包含一組數據。一行中的數據組合在一起稱為一條記錄。
無論何時你向表中添加新數據,你就添加了一條新記錄。一個數據表可以有幾十個記錄,也可以有幾千甚至幾十億個記錄。雖然你也許永遠不需要存儲十億個Email地址,但知道你能這樣做總是好的,也許有一天你會有這樣的需要。
你的資料庫很有可能包含幾十個表,所有存儲在你資料庫中的信息都被存儲在這些表中。當你考慮怎樣把信息存儲在資料庫中時,你應該考慮怎樣把它們存儲在表中。
SQL的第二個特點有些難於掌握。這種語言被設計為不允許你按照某種特定的順序來取出記錄,因為這樣做會降低SQL Sever取記錄的效率。使用SQL,你只能按查詢條件來讀取記錄。
當考慮如何從表中取出記錄時,自然會想到按記錄的位置讀取它們。例如,也許你會嘗試通過一個循環,逐個記錄地掃描,來選出特定的記錄。在使用SQL時,你必須訓練自己,不要有這種思路。
假如你想選出所有的名字是「Bill Gates」的記錄,如果使用傳統的編程語言,你也許會構造一個循環,逐個查看錶中的記錄,看名字域是否是「Bill Gates」。
這種選擇記錄的方法是可行的,但是效率不高。使用SQL,你只要說,「選擇所有名字域等於Bill Gates的記錄」,SQL就會為你選出所有符合條件的記錄。SQL會確定實現查詢的最佳方法。
建設你想取出表中的前十個記錄。使用傳統的編程語言,你可以做一個循環,取出前十個記錄後結束循環。但使用標準的SQL查詢,這是不可能實現的。從SQL的角度來說,在一個表中不存在前十個記錄這種概念。
開始時,當你知道你不能用SQL實現某些你感覺應該能實現的功能,你會受到挫折。你也許會以頭撞牆甚至想寫惡毒的信件給SQL的設計者們。但後來你會認識到,SQL的這個特點不僅不是個限制,反而是其長處。因為SQL不根據位置來讀取記錄,它讀取記錄可以很快。
綜上所述,SQL有兩個特點:所有數據存儲在表中,從SQL的角度來說,表中的記錄沒有順序。在下一節,你將學會怎樣用SQL從表中選擇特殊的記錄。
使用SQL從表中取記錄。
SQL的主要功能之一是實現資料庫查詢。如果你熟悉Internet 引擎,那麼你已經熟悉查詢了。你使用查詢來取得滿足特定條件的信息。例如,如果你想找到有ASP信息的全部站點,你可以連接到 Yahoo!並執行一個對Active Sever Pages的搜索。在你輸入這個查詢後,你會收到一個列表,表中包括所有其描述中包含搜索表達式的站點。
多數Internet 引擎允許邏輯查詢。在邏輯查詢中,你可以包括特殊的運算符如AND、OR和NOT,你使用這些運算符來選擇特定的記錄。例如,你可以用AND來限制查詢結果。如果你執行一個對Active Sever Pages AND SQL的搜索。你將得到其描述中同時包含Active Sever Pages 和SQL的記錄。當你需要限制查詢結果時,你可以使用AND。
如果你需要擴展查詢的結果,你可以使用邏輯操作符OR。例如,如果你執行一個搜索,搜索所有的其描述中包含Active Sever Pages OR SQL的站點,你收到的列表中將包括所有其描述中同時包含兩個表達式或其中任何一個表達式的站點。
如果你想從搜索結果中排除特定的站點,你可以使用NOT。例如,查詢「Active Sever Pages 」AND NOT 「SQL」將返回一個列表,列表中的站點包含Active Sever Pages,但不包含SQL。當必須排除特定的記錄時,你可以使用NOT。
用SQL執行的查詢與用Internet搜索引擎執行的搜索非常相似。當你執行一個SQL查詢時,通過使用包括邏輯運算符的查詢條件,你可以得到一個記錄列表。此時查詢結果是來自一個或多個表。
SQL查詢的句法非常簡單。假設有一個名為email_table 的表,包含名字和地址兩個欄位,要得到Bill Gates 的e_mail地址,你可以使用下面的查詢:
SELECT email from email_table WHERE name="Bill Gates"
當這個查詢執行時,就從名為email_table的表中讀取Bill Gates的e_mail 地址。這個簡單的語句包括三部分:
■ SELECT語句的第一部分指名要選取的列。在此例中,只有email列被選取。當執行時,只顯示email列的值 [email protected]。
■ SELECTT語句的第二部份指明要從哪個(些)表中查詢數據。在此例中,要查詢的表名為email_table 。
■ 最後,SELECT語句的WHERE子句指明要選擇滿足什麼條件的記錄。在此例中,查詢條件為只有name列的值為Bill Gates 的記錄才被選取。
Bill Gates很有可能擁有不止一個email地址。如果表中包含Bill Gates的多個email地址。用上述的SELECT語句可以讀取他所有的email地址。SELECT語句從表中取出所有name欄位值為Bill Gates 的記錄的email 欄位的值。
④ 使用T-SQL語句編程實現,對1到100中的奇數進行求和
declare @i tinyint,@sum int
set @sum=0
set @i=0
while @i>=0
begin
if(@i>=100)
begin
select'總和'=@sum
break
end
else
begin
set @i=@i+1
if(@i%2)=0
continue
else
set @sum=@sum+@i
end
end
⑤ 新手怎麼快速學會sQL語言的編程
找一些學習文檔來看,多動手實踐。看文檔要比教程省時間,多動手練習是學習電腦的有效方法。我是北大青鳥的一名學員,我們的學習方法就是多練習!
⑥ 我想練習SQL編程,家裡電腦裝SQL太慢了,大家誰能推薦一下小一點適合練習的SQL編程軟體
vfp挺好的 ,還有你可以裝sql 2000,這個不大,應該能行
⑦ SQL 編程題
1.
create table Student
(
id int not null identity(1,1),
Sno nvarchar(50) not null unique,
Sname nvarchar(20),
Ssex nvarchar(2),
Sage int,
Sdept nvarchar(100),
)
2.select * from Student where Sdept='計算機' order by Sno desc
3.select Sno,Sname,Ssex from Student where Sno in (select Sno from Course where Ccredit = 5 and Cno in (select Cno from SC where Grade > 60))
⑧ SQL資料庫編程
一馬當先 一身正氣 萬夫不當 無所畏懼 氣沖牛斗 氣沖霄漢 氣壯山河 氣宇軒昂 氣吞山河 正氣凜然 龍驤虎步 百戰百勝 沖鋒陷陣 英姿煥發 奮不顧身 奮勇當先 頂天立地 昂首挺胸 昂首闊步 赴湯蹈火 挺身而出 戰無不勝 臨危不懼 威震天下 面不改色 勇冠三軍 驍勇善戰 鎮定自若 慷慨就義 大智大勇 仰不愧天 力挽狂瀾 光明磊落 化險為夷 大顯身手 大顯神通 大獲全勝 義無反顧 久經沙場 談笑自若 身先士卒身經百戰 智勇雙全 聞雞起舞 勇往直前 視死如歸 單槍匹馬 所向披靡 堅貞不屈 路見不平,拔刀相助 過關斬將 正氣凜然、血氣方剛、不屈不饒、捨身取義、一身正氣、剛正不阿、無所畏懼、氣沖牛斗、氣沖霄漢、氣壯山河、氣宇軒昂、氣吞山河、正氣凜然、龍驤虎步、百戰百勝、沖鋒陷陣、英姿煥發、奮不顧身、奮勇當先、頂天立地、昂首挺胸、昂首闊步、赴湯蹈火、挺身而出、臨危不懼、威震天下、勇冠三軍、驍勇善戰、鎮定自若、慷慨就義、大智大勇、仰不愧天、力挽狂瀾、光明磊落、義無反顧、久經沙場、身先士卒、身經百戰、智勇雙全、勇往直前、視死如歸、所向披靡、堅貞不屈、有勇有謀、一身正氣、羽扇綸巾
⑨ sql語句編程
大致上就是有一個dbo.mf_mm數據表
例如,現在資料庫中的內容是:
mm_dd mrp_no prd_name qty dep
2006-03-01 NO1 衣物 1000 111
2006-03-01 NO2 紙張 2000 111
2006-03-02 NO3 鞋帽 3000 112
2006-03-03 NO1 衣物 2000 111
.........................................
以上no的數量有上千種,同種NO對應同種NAME,每一個dd都會對應有一筆qty.
我現在想要在數據導出後,成為一個統計數據,即所有的同種no的qty進行匯總,最後成為
mrp_no prd_name qty dep
no1
no2
...
大致上就是有一個dbo.mf_mm數據表
例如,現在資料庫中的內容是:
mm_dd mrp_no prd_name qty dep
2006-03-01 NO1 衣物 1000 111
2006-03-01 NO2 紙張 2000 111
2006-03-02 NO3 鞋帽 3000 112
2006-03-03 NO1 衣物 2000 111
.........................................
以上no的數量有上千種,同種NO對應同種NAME,每一個dd都會對應有一筆qty.
我現在想要在數據導出後,成為一個統計數據,即所有的同種no的qty進行匯總,最後成為
mrp_no prd_name qty dep
no1
no2
...
大致上就是有一個dbo.mf_mm數據表
例如,現在資料庫中的內容是:
mm_dd mrp_no prd_name qty dep
2006-03-01 NO1 衣物 1000 111
2006-03-01 NO2 紙張 2000 111
2006-03-02 NO3 鞋帽 3000 112
2006-03-03 NO1 衣物 2000 111
.........................................
以上no的數量有上千種,同種NO對應同種NAME,每一個dd都會對應有一筆qty.
我現在想要在數據導出後,成為一個統計數據,即所有的同種no的qty進行匯總,最後成為
mrp_no prd_name qty dep
no1
no2
...
大致上就是有一個dbo.mf_mm數據表
例如,現在資料庫中的內容是:
mm_dd mrp_no prd_name qty dep
2006-03-01 NO1 衣物 1000 111
2006-03-01 NO2 紙張 2000 111
2006-03-02 NO3 鞋帽 3000 112
2006-03-03 NO1 衣物 2000 111
.........................................
以上no的數量有上千種,同種NO對應同種NAME,每一個dd都會對應有一筆qty.
我現在想要在數據導出後,成為一個統計數據,即所有的同種no的qty進行匯總,最後成為
mrp_no prd_name qty dep
no1
no2
...
大致上就是有一個dbo.mf_mm數據表
例如,現在資料庫中的內容是:
mm_dd mrp_no prd_name qty dep
2006-03-01 NO1 衣物 1000 111
2006-03-01 NO2 紙張 2000 111
2006-03-02 NO3 鞋帽 3000 112
2006-03-03 NO1 衣物 2000 111
.........................................
以上no的數量有上千種,同種NO對應同種NAME,每一個dd都會對應有一筆qty.
我現在想要在數據導出後,成為一個統計數據,即所有的同種no的qty進行匯總,最後成為
mrp_no prd_name qty dep
no1
no2
...
大致上就是有一個dbo.mf_mm數據表
例如,現在資料庫中的內容是:
mm_dd mrp_no prd_name qty dep
2006-03-01 NO1 衣物 1000 111
2006-03-01 NO2 紙張 2000 111
2006-03-02 NO3 鞋帽 3000 112
2006-03-03 NO1 衣物 2000 111
.........................................
以上no的數量有上千種,同種NO對應同種NAME,每一個dd都會對應有一筆qty.
我現在想要在數據導出後,成為一個統計數據,即所有的同種no的qty進行匯總,最後成為
mrp_no prd_name qty dep
no1
no2
...
⑩ 優化SQL有什麼方法
在資料庫應用系統中編寫可執行的SQL語句可以有多種方式實現,但哪一條是最佳方案卻難以確定。為了解決這一問題,有必要對SQL實施優化。簡單地說,SQL語句的優化就是將性能低下的SQL語句轉換成達到同樣目的的性能更好的SQL語句。
優化SQL語句的原因
資料庫系統的生命周期可以分成: 設計、開發和成品三個階段。在設計階段進行優化的成本最低,收益最大。在成品階段進行優化的成本最高,收益最小。如果將一個資料庫系統比喻成一座樓房,在樓房建好後進行矯正往往成本很高而收效很小(甚至可能根本無法矯正),而在樓房設計、生產階段控制好每塊磚瓦的質量就能達到花費小而見效高的目的。
為了獲得最大效益,人們常需要對資料庫進行優化。資料庫的優化通常可以通過對網路、硬體、操作系統、資料庫參數和應用程序的優化來進行。根據統計,對網路、硬體、操作系統、資料庫參數進行優化所獲得的性能提升全部加起來只佔資料庫應用系統性能提升的40%左右,其餘60%的系統性能提升全部來自對應用程序的優化。許多優化專家甚至認為對應用程序的優化可以得到80%的系統性能提升。因此可以肯定,通過優化應用程序來對資料庫系統進行優化能獲得更大的收益。
對應用程序的優化通常可分為兩個方面: 源代碼的優化和SQL語句的優化。由於涉及到對程序邏輯的改變,源代碼的優化在時間成本和風險上代價很高(尤其是對正在使用中的系統進行優化) 。另一方面,源代碼的優化對資料庫系統性能的提升收效有限,因為應用程序對資料庫的操作最終要表現為SQL語句對資料庫的操作。
對SQL語句進行優化有以下一些直接原因:
1. SQL語句是對資料庫(數據) 進行操作的惟一途徑,應用程序的執行最終要歸結為SQL語句的執行,SQL語句的效率對資料庫系統的性能起到了決定性的作用。
2. SQL語句消耗了70%~90%的資料庫資源。
3. SQL語句獨立於程序設計邏輯,對SQL語句進行優化不會影響程序邏輯,相對於對程序源代碼的優化,對SQL語句的優化在時間成本和風險上的代價都很低。
4. SQL語句可以有不同的寫法,不同的寫法在性能上的差異可能很大。
5. SQL語句易學,難精通。SQL語句的性能往往同實際運行系統的資料庫結構、記錄數量等有關,不存在普遍適用的規律來提升性能。
傳統的優化方法
SQL程序人員在傳統上採用手工重寫來對SQL語句進行優化。這主要依靠DBA或資深程序員對SQL語句執行計劃的分析,依靠經驗,嘗試重寫SQL語句,然後對結果和性能進行比較以試圖找到性能較佳的SQL語句。這種做法存在著以下不足:
1. 無法找出SQL語句的所有可能寫法。很可能花費了大量的時間也無法找到性能較佳的SQL語句。即便找到了某個性能較佳的SQL語句也無法知道是否存在性能更好的寫法。
2. 非常依賴於人的經驗,經驗的多寡往往決定了優化後SQL語句的性能。
3. 非常耗時間。重寫-->校驗正確性-->比較性能,這一循環過程需要大量的時間。
根據傳統的SQL優化工具的功能,人們一般將優化工具分為以下三代產品:
第一代的SQL優化工具是執行計劃分析工具。這類工具對輸入的SQL語句從資料庫提取執行計劃,並解釋執行計劃中關鍵字的含義。
第二代的SQL優化工具只能提供增加索引的建議,它通過對輸入的SQL語句的執行計劃的分析來產生是否要增加索引的建議。這類工具存在著致命的缺點——只分析了一條SQL語句就得出增加某個索引的結論,根本不理會(實際上也無法評估到)增加的索引對整體資料庫系統性能的影響。
第三代工具是利用人工智慧實現自動SQL優化。
人工智慧自動SQL優化
隨著人工智慧技術的發展和在資料庫優化領域應用的深入,在20世紀90年代末優化技術取得了突破性的進展,出現了人工智慧自動SQL優化。人工智慧自動SQL優化的本質就是藉助人工智慧技術,自動對SQL語句進行重寫,找到性能最好的等效SQL語句。LECCO SQL Expert就採用了這種人工智慧技術,其SQL Expert支持Oracle、Sybase、MS SQL Server和IBM DB2資料庫平台。其突出特點是自動優化SQL語句。除此以外,還可以以人工智慧知識庫「反饋式搜索引擎」來重寫SQL語句,並找出所有等效的SQL語句及可能的執行計劃,通過測試運行為應用程序和資料庫自動找到性能最好的SQL語句,提供微秒級的計時; 能夠優化Web應用程序和有大量用戶的在線事務處理中運行時間很短的SQL語句; 能通過比較源SQL和待選SQL的不同之處,為開發人員提供「邊做邊學式訓練」,迅速提高開發人員的SQL編程技能等等。
該工具針對資料庫應用的開發和維護階段提供了數個特別的模塊:SQL語法優化器、PL/SQL集成化開發調試環境(IDE)、掃描器、資料庫監視器等。其核心模塊之一「SQL 語法優化器」的工作原理大致如下:輸入一條源SQL語句,「人工智慧反饋式搜索引擎」對輸入的SQL語句結合檢測到的資料庫結構和索引進行重寫,產生N條等效的SQL語句輸出,產生的N條等效SQL語句再送入「人工智慧反饋式搜索引擎」進行重寫,直至無法產生新的輸出或搜索限額滿,接下來對輸出的SQL語句進行過濾,選出具有不同執行計劃的SQL語句(不同的執行計劃意味著不同的執行效率),最後,對得到的SQL語句進行批量測試,找出性能最好的SQL語句(參見下圖)。
圖 人工智慧自動SQL優化示意圖
LECCO SQL Expert不僅能夠找到最佳的SQL語句,它所提供的「邊做邊學式訓練」還能夠教會開發人員和資料庫管理員如何寫出性能最好的SQL語句。LECCO SQL Expert的SQL語句自動優化功能使SQL的優化變得極其簡單,只要能夠寫出SQL語句,它就能幫開發人員找到最好性能的寫法。
小 結
SQL語句是資料庫應用中一個非常關鍵的部分,它執行性能的高低直接影響著應用程序的運行效率。正因為如此,人們在SQL語句的優化上投入了很大的精力,出現了許多SQL語句優化工具。隨著人工智慧等相關技術的日益成熟, 肯定還會有更多更好的工具出現,這將會給開發人員提供更多的幫助。