版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
目錄1.開發(fā)思維辯證1.1.學(xué)與用的辨證關(guān)系1.2.上層思維很重要1.3.工科男的上層思維1.4.SQL中的簡單開發(fā)與復(fù)雜開發(fā)1.5.SQL報(bào)表開發(fā)邏輯處理1.6.SQL報(bào)表開發(fā)模塊化拆分處理2.開發(fā)規(guī)范2.1.結(jié)構(gòu)定義規(guī)范命名2.2.查詢的規(guī)范命名2.3.注釋的規(guī)范寫法前言在寫每一篇進(jìn)度前,我都會(huì)查找很多篇有價(jià)值的技術(shù)帖子,進(jìn)行參考總結(jié)。這一篇進(jìn)度的編寫,純粹是我自己的思考和經(jīng)驗(yàn)總結(jié)。1.開發(fā)思維辯證1.1.學(xué)與用的辨證關(guān)系很多新手,包括在校大學(xué)生,也包括以前讀書時(shí)代的我,覺得開發(fā)這門技術(shù)入門很難!由此,走了很多彎路以后,才明白一個(gè)道理:入門其實(shí)很簡單,只是精通比較難。因?yàn)橛X得入門難,導(dǎo)致很多的人,浪費(fèi)了大量時(shí)間,徘徊在開發(fā)技術(shù)的門外,毫無頭緒,實(shí)在是可惜。問題出在思維層面上,腦袋想錯(cuò)了一個(gè)思維。所以,卡在入門很難,是因?yàn)槲覀兊乃季S搞錯(cuò)了一件事情。這里,舉兩個(gè)例子,第一個(gè)例子:我在讀小學(xué)一年級第1學(xué)期時(shí),數(shù)學(xué)1+1都不會(huì)算。作業(yè)和考試都是抄別人的,經(jīng)常考試不及格,或考幾分、十幾分的成績。后來,在學(xué)期末的時(shí)候,我的媽媽教會(huì)我數(shù)學(xué),期末最后一次考試,數(shù)學(xué)考了75分。在一年級第2學(xué)期,每次數(shù)學(xué)考試都是90分以上。她的教法很簡單:媽媽拿了一把火柴,然后,拿出1根火柴,又拿出1根火柴,把兩根火柴擺在一起。1根加1根等于2根火柴??吹竭@個(gè)過程,我就領(lǐng)悟到了加減法。因?yàn)閷W(xué)到的知識(shí),跟實(shí)際的運(yùn)用,兩者在我心中關(guān)聯(lián)起來,所以,我就掌握了。第二個(gè)例子:但是,由此,我產(chǎn)生了一個(gè)很大的困惑,在我的整個(gè)讀書生涯過程中,我不知道我所學(xué)的知識(shí)有什么用?用在哪里?這個(gè)問題很嚴(yán)重!這里來說第二個(gè)例子,讀大學(xué)時(shí),學(xué)的第一門開發(fā)語言是C語言,調(diào)試代碼的工具叫TurboC編譯器。每一次課程過程,老師都有留下習(xí)題讓我們?nèi)ゾ毩?xí)。比如用編程語言運(yùn)算一個(gè)數(shù)學(xué)問題,逐漸更復(fù)雜的有排序算法之類的。課程上了,習(xí)題也做了,編程依然不會(huì)。一學(xué)期結(jié)束以后,把所學(xué)的知識(shí)忘的差不多了,又全部還給老師了。每一年大抵都是如此情況。我一個(gè)人是這樣慘不忍睹,大部分學(xué)生估計(jì)也是這種情況。如果按我現(xiàn)在的想法和思維,去看待學(xué)生時(shí)代的那個(gè)我,我會(huì)非常痛心自己走了那么多的彎路。包括剛出社會(huì)的5-6年,依然在不斷走彎路,實(shí)在是血淋淋慘痛的教訓(xùn)。其中,一個(gè)非常大的原因和因素,是沒有碰到人生中比較關(guān)鍵的老師或貴人或朋友幫助和教導(dǎo),是很大的一個(gè)原因。換句話說,或者很痛心的說,大部分作為老師的人,實(shí)在不是一個(gè)合格的老師。那么,我為什么C語言學(xué)不會(huì)呢?因?yàn)槲蚁萑肓艘粋€(gè)思維的陷阱。包括整個(gè)從小學(xué)到大學(xué)所學(xué)過程的思維誤區(qū):“學(xué)與用的關(guān)系問題?沒錯(cuò)!我是學(xué)了很多,但是這些所學(xué)從來沒有實(shí)際運(yùn)用,所以,我不知道為什么學(xué)?學(xué)了有什么用?更不知道怎么用?”對,就是上面這個(gè)思維錯(cuò)誤了。實(shí)際上,我要是能早點(diǎn)領(lǐng)悟到一個(gè)正確的思維,我就不會(huì)如此狼狽了。舉個(gè)例子,我們學(xué)習(xí)九九乘法表,有沒有在用?當(dāng)然有在用,而且一直在用!比如買東西找零錢。學(xué)語文,有沒有在用?有在用,一直都在用!你看書、讀寫、說話交流,天天都在用。學(xué)C語言,有沒有在用?比如編程第一課,都會(huì)叫我們寫一個(gè)小代碼,最終顯示“HelloWorld!”這兩個(gè)英文單詞。這個(gè)就是在用。上課過程中布置的習(xí)題就是在用?。?!完成了習(xí)題,就代表會(huì)用!但是,很可惜,無論我們完成多少個(gè)習(xí)題,除了感覺習(xí)題很難,心有余力不足,完全沒發(fā)覺這就是在用,這就是掌握了用。掌握了用,就是掌握了開發(fā)技術(shù),也就是已入門!雖然學(xué)生時(shí)代學(xué)習(xí)的很多知識(shí),很少有實(shí)際操作和運(yùn)用的地方,但是,別忽視了練習(xí)的過程本身就是叫用。如果你能體會(huì)到這個(gè)道理,在練習(xí)過程中,你對運(yùn)用的體會(huì)和理解一定會(huì)上升到更高的高度,也有助于你真正掌握所知所學(xué),以及運(yùn)用。既錘煉了技能,也提升了信心。所以,實(shí)際上,我只能現(xiàn)在幽怨地和你說:在你上第一天的開發(fā)課程,完成第一個(gè)習(xí)題時(shí),你編寫的代碼顯示“HelloWorld!”這幾個(gè)字時(shí),你就入門了。那現(xiàn)在回歸到SQL開發(fā)的學(xué)與用上面來。開發(fā)語法的語法就好比是游戲規(guī)則和游戲道具。你要做的事情,就是熟悉這些規(guī)則和道具,然后玩出更多的花樣來。學(xué)與用在哪里?當(dāng)你學(xué)會(huì)select語法是干啥用的時(shí)候,當(dāng)你學(xué)會(huì)執(zhí)行“select*from數(shù)據(jù)表”這個(gè)語句時(shí),你就在用了,就叫做學(xué)以致用了。這個(gè)就是你后續(xù)學(xué)習(xí)和提升的信心源泉和動(dòng)力。1.2.上層思維很重要這里說的上層思維,是指頂層規(guī)劃思維。每個(gè)人的思維有不同的特質(zhì)。有的人想法比較小家子氣,有的人就喜歡大想法。大想法的人,要么容易造就眼高手低,要么就是容易引出大志向或大理想。這個(gè)就是一個(gè)人的根器,根器的大小,其實(shí)最大的影響因素,還是因?yàn)樗季S的不同造成的。造成思維異同的根本原因,是一個(gè)人心量大小的問題。這里為什么提出上層思維這個(gè)問題,從學(xué)習(xí)這個(gè)SQL教程的角度來說,其實(shí)價(jià)值和意義不大。因?yàn)?,這個(gè)上層思維主要是對人生、事業(yè)等的長遠(yuǎn)影響才是比較大的,屬于長期利益和長期規(guī)劃的一個(gè)東西。排在第一位的思維,我們引用“無為而無不為”這句話來詮釋。什么是無為?什么又是無不為?第一個(gè)無為是指:戰(zhàn)勝你內(nèi)在的煩惱,戰(zhàn)勝你外在的復(fù)雜環(huán)境。內(nèi)在的煩惱,是指作為一個(gè)人,每天都會(huì)產(chǎn)生大量的念頭,這些念頭如無根的浮萍,最終也消失于無,但這些念頭卻又時(shí)時(shí)刻刻在擺布著你的命運(yùn)。你要像匆匆過客一樣,冷靜地看著這些念頭來去,而不起一分一毫的留念和執(zhí)著。這個(gè)需要你日復(fù)一日地訓(xùn)練,才會(huì)功夫日進(jìn)。外在復(fù)雜的環(huán)境,是指你每天睜開眼睛,就處在紛繁擾亂的世間。你陷在外在復(fù)雜環(huán)境的迷戀和執(zhí)著當(dāng)中,進(jìn)而產(chǎn)生身心的各種煩惱、壓力或貪戀享受。這些外在復(fù)雜環(huán)境,每天每月每年都在產(chǎn)生變化,難以把握,也如無根的浮萍一樣。如果你能細(xì)心觀察,你會(huì)發(fā)現(xiàn)每一個(gè)事物都在經(jīng)歷“出現(xiàn)、成熟、衰退、滅亡”的過程當(dāng)中,最終也將消失于無。但他們卻在時(shí)時(shí)刻刻擺布著你的命運(yùn),讓你的心無法自主。你也要像匆匆過客一樣,每天接觸各種復(fù)雜的世間環(huán)境,而不起一分一毫的留戀和執(zhí)著。無為,有助于你提升生命的智慧和質(zhì)量,降伏煩惱,開悟覺性。無不為,是指雖然你找到一條解脫生命束縛的大道。但是,還有更多人在遭受痛苦和煩惱。這里,你就要發(fā)揮無不為的特性,去幫助更多人獲得幸福的生活,獲得降伏煩惱和降伏外在環(huán)境的自在。無為即是智慧,無不為是慈悲!排在第二位的思維,我們引用“修身、齊家、治國、平天下”來詮釋。修身,即是提升你個(gè)人的道德品質(zhì)。在這個(gè)人人逐利的時(shí)代,你或許會(huì)疑問修身能給你帶來什么好處?人人逐利,我這個(gè)站在社會(huì)底層的人,是深有體會(huì),也能理解的?!芭d,百姓苦;亡,百姓苦”。身在社會(huì)底層,每天為了賺錢把日子維持下去,過的像陀螺一樣的日子。那好處是什么?“修身、齊家、治國、平天下”這句話已經(jīng)指出來了。這句話包含兩層理解意思。第一層理解意思:解決每一個(gè)人的發(fā)展路線,一個(gè)人的發(fā)展路線由小而大,要從修身開始,最終止于平天下。那當(dāng)然這個(gè)大層面的路線,肯定已經(jīng)把你所有規(guī)劃的發(fā)展方向都囊括進(jìn)來了,所以,有助于促進(jìn)和提升你任何規(guī)劃的發(fā)展方向。第二層理解意思:解決每一個(gè)人的發(fā)展要點(diǎn)和突破口在哪里?你只要從修身開始做起,你自然而然就能達(dá)到齊家,然后是治國,最后是平天下。這些成就,最終都能自然而然達(dá)到。這有點(diǎn)危言聳聽,聽起來就像是騙人的一樣!但是,這是中華民族幾千年總結(jié)的一條治世真理。1.3.工科男的上層思維學(xué)技術(shù)的朋友,大部分是理工科出身的,而且大部分還是男性偏多。這里,我們簡稱工科男。至于工科女,就直接也劃到工科男這個(gè)稱呼中。工科男的上層思維是技術(shù)改變世界、造福世界。光改變世界還不行,一定得是造福世界。因?yàn)椋萍嫉陌l(fā)展,最終可能只會(huì)加速世界的毀滅。所以,工科男的理想和野望,要慎重、慎之。舉個(gè)例子來說,塑料袋的發(fā)明和使用。前幾年,國內(nèi)推行一項(xiàng)政策,在超市購物,塑料袋要額外付錢。依現(xiàn)在來看,這項(xiàng)政策,增加了民眾的負(fù)擔(dān),已經(jīng)毫無意義了。最近幾年,塑料袋的使用頗有變本加厲的趨勢。為什么這么說?因?yàn)槲医?jīng)常去買菜。為了稱重方便,基本上是一個(gè)菜裝一個(gè)塑料袋。最后再用大袋裝起來。假如我買了十樣菜,就用到十來個(gè)垃圾袋。那還有家里套在垃圾桶的垃圾袋。一個(gè)家庭,一天要產(chǎn)生十幾個(gè)垃圾袋。改變世界、造福世界,是希望能在歷史中名留青史。雖然說,科技無國界。現(xiàn)實(shí)的事實(shí)是,科技有國界。一個(gè)國家科技落后,就要被科技壟斷、打壓、欺負(fù)。美帝國頭子就是個(gè)典型的壞蛋例子。以我們這篇進(jìn)度所教學(xué)的就是一款美帝國微軟旗下的數(shù)據(jù)庫產(chǎn)品。所以,我這邊如何兢兢業(yè)業(yè)地去做教程,教會(huì)多少人。當(dāng)有一天,美帝國揮舞科技霸權(quán)大棒說,我不允許中國人使用SQLServer數(shù)據(jù)庫,Window操作系統(tǒng)。我們的企業(yè)經(jīng)濟(jì)上得損失多么慘重,我們的科技人員基于這些系統(tǒng)上開發(fā)的多少產(chǎn)品和心血都將付諸東流。所以,作為工科男,我們不幸從業(yè)于行業(yè)的低端地段,領(lǐng)著廉價(jià)的薪資。但是,我們有人生幾十年,即使作為副業(yè),作為理想也好,選擇一個(gè)技術(shù)研究方向,兢兢業(yè)業(yè)研究幾十年,最終有個(gè)成果出來,以期望能夠?yàn)橹袊萍际吩鎏砭实囊还P,名留青史!1.4.SQL中的簡單開發(fā)與復(fù)雜開發(fā)簡單開發(fā)是指單一的一條或多條SQL語句,或操作語句。復(fù)雜開發(fā)是指有一定邏輯處理的一組SQL語句。很多新手,無法從簡單開發(fā),跨步到復(fù)雜開發(fā)的三個(gè)問題根源:基礎(chǔ)語法不扎實(shí)、不會(huì)邊做邊驗(yàn)證、將業(yè)務(wù)邏輯轉(zhuǎn)換為代碼邏輯。這里,我們隨機(jī)出一個(gè)題目,來實(shí)現(xiàn)開發(fā)過程:題目:模擬實(shí)現(xiàn)一個(gè)冒泡排序算法!這個(gè)題目怎么樣?冒泡排序算法?讀大學(xué)時(shí),有講過這個(gè)算法,但是,早還給老師了,連原理都不知道是啥回事了?所以,這個(gè)題目對于初學(xué)者來說,真是要命!解題思路:1.從題目分析來看,悲劇??!連數(shù)據(jù)都不給我們定義。要建表嗎?還是啥情況?2.還是先了解一下冒泡排序算法是啥玩意吧!現(xiàn)以數(shù)組[10,1,35,61,89,36,55]為例,我們通過將這個(gè)數(shù)組按從小到大的方式排序,來說明冒泡排序的過程。第一次循環(huán):我們需要拿第一個(gè)[10]和第二個(gè)[1]對比,如果第一個(gè)值比第二個(gè)值大,那么就換位置,如果小就不換位置。接下來拿第二個(gè)值和第三個(gè)值對比,這樣依次比到最后,我們把這些數(shù)中最大的一個(gè)放在了右邊。第二次循環(huán):然后再重復(fù)以上的方式下去,把第二個(gè)大的值放在了倒數(shù)第二位。以此類推。。。3.解決數(shù)據(jù)源的問題。好了,算法搞清楚以后,我們以數(shù)組[10,1,35,61,89,36,55]這組數(shù)字為例,進(jìn)行模擬冒泡排序。這樣就解決了數(shù)據(jù)源的問題。4.解決數(shù)據(jù)結(jié)構(gòu)的問題。SQL沒有數(shù)組的概念,我們可以把這個(gè)數(shù)組轉(zhuǎn)換為數(shù)據(jù)表的形式。建立一個(gè)數(shù)據(jù)表存放數(shù)據(jù)源。5.接下來,開始建表:--存放原數(shù)據(jù)createtablet_mptest1([index]int,numberint)6.原數(shù)據(jù)表插入數(shù)據(jù)insertintot_mptest1values(1,10),(2,1),(3,35),(4,61),(5,89),(6,36),(7,55)查詢數(shù)據(jù)如下:7.接下來要設(shè)計(jì)SQL代碼執(zhí)行邏輯了,對新手來說,那真是一個(gè)頭兩個(gè)大,實(shí)力不足,沒能力把業(yè)務(wù)邏輯轉(zhuǎn)換為代碼邏輯。第一輪分析:總用是7個(gè)數(shù)字,我們通過6次循環(huán),完成整個(gè)排序算法:循環(huán)說明第1次循環(huán)第1個(gè)值和第2個(gè)值對比,把最大值交換給第2個(gè)值;第2個(gè)值和第3個(gè)值對比,把最大值交換給第3個(gè)值;第3個(gè)值和第4個(gè)值對比,把最大值交換給第4個(gè)值;第4個(gè)值和第5個(gè)值對比,把最大值交換給第5個(gè)值;第5個(gè)值和第6個(gè)值對比,把最大值交換給第6個(gè)值;第6個(gè)值和第7個(gè)值對比,把最大值交換給第7個(gè)值;第2次循環(huán)第1個(gè)值和第2個(gè)值對比,把最大值交換給第2個(gè)值;第2個(gè)值和第3個(gè)值對比,把最大值交換給第3個(gè)值;第3個(gè)值和第4個(gè)值對比,把最大值交換給第4個(gè)值;第4個(gè)值和第5個(gè)值對比,把最大值交換給第5個(gè)值;第5個(gè)值和第6個(gè)值對比,把最大值交換給第6個(gè)值;(因第7個(gè)值已經(jīng)是最大值,不需要參與對比)第3次循環(huán)第1個(gè)值和第2個(gè)值對比,把最大值交換給第2個(gè)值;第2個(gè)值和第3個(gè)值對比,把最大值交換給第3個(gè)值;第3個(gè)值和第4個(gè)值對比,把最大值交換給第4個(gè)值;第4個(gè)值和第5個(gè)值對比,把最大值交換給第5個(gè)值;(因第6個(gè)值已經(jīng)是最大值,不需要參與對比)第4次循環(huán)第1個(gè)值和第2個(gè)值對比,把最大值交換給第2個(gè)值;第2個(gè)值和第3個(gè)值對比,把最大值交換給第3個(gè)值;第3個(gè)值和第4個(gè)值對比,把最大值交換給第4個(gè)值;(因第5個(gè)值已經(jīng)是最大值,不需要參與對比)第5次循環(huán)第1個(gè)值和第2個(gè)值對比,把最大值交換給第2個(gè)值;第2個(gè)值和第3個(gè)值對比,把最大值交換給第3個(gè)值;(因第4個(gè)值已經(jīng)是最大值,不需要參與對比)第6次循環(huán)第1個(gè)值和第2個(gè)值對比,把最大值交換給第2個(gè)值;(因第3個(gè)值已經(jīng)是最大值,不需要參與對比)所以,我們可以看到,需要做(數(shù)據(jù)集合的最大值-1)次循環(huán),就能完成排序。第二輪分析:第一層循環(huán)第二層循環(huán)說明第1次循環(huán)第1次循環(huán),循環(huán)走到位置[1]第1個(gè)值和第2個(gè)值對比,把最大值交換給第2個(gè)值;第2次循環(huán),循環(huán)走到位置[2]第2個(gè)值和第3個(gè)值對比,把最大值交換給第3個(gè)值;第3次循環(huán),循環(huán)走到位置[3]第3個(gè)值和第4個(gè)值對比,把最大值交換給第4個(gè)值;第4次循環(huán),循環(huán)走到位置[4]第4個(gè)值和第5個(gè)值對比,把最大值交換給第5個(gè)值;第5次循環(huán),循環(huán)走到位置[5]第5個(gè)值和第6個(gè)值對比,把最大值交換給第6個(gè)值;第6次循環(huán),循環(huán)走到位置[6]第6個(gè)值和第7個(gè)值對比,把最大值交換給第7個(gè)值;第2次循環(huán)第7個(gè)值不參與循環(huán),循環(huán)最大值扣減1,本輪第二層循環(huán)只剩下5次循環(huán)第1次循環(huán),循環(huán)走到位置[1]第1個(gè)值和第2個(gè)值對比,把最大值交換給第2個(gè)值;第2次循環(huán),循環(huán)走到位置[2]第2個(gè)值和第3個(gè)值對比,把最大值交換給第3個(gè)值;第3次循環(huán),循環(huán)走到位置[3]第3個(gè)值和第4個(gè)值對比,把最大值交換給第4個(gè)值;第4次循環(huán),循環(huán)走到位置[4]第4個(gè)值和第5個(gè)值對比,把最大值交換給第5個(gè)值;第5次循環(huán),循環(huán)走到位置[5]第5個(gè)值和第6個(gè)值對比,把最大值交換給第6個(gè)值;第3次循環(huán)第6個(gè)值不參與循環(huán),循環(huán)最大值扣減1,本輪第二層循環(huán)只剩下4次循環(huán)第1次循環(huán),循環(huán)走到位置[1]第1個(gè)值和第2個(gè)值對比,把最大值交換給第2個(gè)值;第2次循環(huán),循環(huán)走到位置[2]第2個(gè)值和第3個(gè)值對比,把最大值交換給第3個(gè)值;第3次循環(huán),循環(huán)走到位置[3]第3個(gè)值和第4個(gè)值對比,把最大值交換給第4個(gè)值;第4次循環(huán),循環(huán)走到位置[4]第4個(gè)值和第5個(gè)值對比,把最大值交換給第5個(gè)值;第4次循環(huán)第5個(gè)值不參與循環(huán),循環(huán)最大值扣減1,本輪第二層循環(huán)只剩下3次循環(huán)第1次循環(huán),循環(huán)走到位置[1]第1個(gè)值和第2個(gè)值對比,把最大值交換給第2個(gè)值;第2次循環(huán),循環(huán)走到位置[2]第2個(gè)值和第3個(gè)值對比,把最大值交換給第3個(gè)值;第3次循環(huán),循環(huán)走到位置[3]第3個(gè)值和第4個(gè)值對比,把最大值交換給第4個(gè)值;第5次循環(huán)第4個(gè)值不參與循環(huán),循環(huán)最大值扣減1,本輪第二層循環(huán)只剩下2次循環(huán)第1次循環(huán),循環(huán)走到位置[1]第1個(gè)值和第2個(gè)值對比,把最大值交換給第2個(gè)值;第2次循環(huán),循環(huán)走到位置[2]第2個(gè)值和第3個(gè)值對比,把最大值交換給第3個(gè)值;第6次循環(huán)第3個(gè)值不參與循環(huán),循環(huán)最大值扣減1,本輪第二層循環(huán)只剩下1次循環(huán)第1次循環(huán),循環(huán)走到位置[1]第1個(gè)值和第2個(gè)值對比,把最大值交換給第2個(gè)值;所以,我們看到除了第一層循環(huán)以外,還要嵌套第二層循環(huán)。第三輪分析:經(jīng)過前面兩輪分析,我們把業(yè)務(wù)邏輯,進(jìn)行了最小項(xiàng)的拆分。接下來需要把業(yè)務(wù)邏輯轉(zhuǎn)換為類似代碼邏輯:(所謂類似代碼邏輯,就是不必考慮代碼嚴(yán)謹(jǐn)性,可以適當(dāng)配合中文說明,把大概代碼邏輯寫出來。)1.定義外層循環(huán)變量:@i外層循環(huán)次數(shù)變量:@icount定義內(nèi)層循環(huán)變量:@k內(nèi)層循環(huán)次數(shù)變量:@kcount定義兩個(gè)變量,用來臨時(shí)保存當(dāng)前位置號(hào)的值,和后一個(gè)位置號(hào)的值:@pre@next2.循環(huán)開始@i=1@icount=數(shù)據(jù)表[t_mptest1]記錄總數(shù)@k=1@kcount=數(shù)據(jù)表[t_mptest1]記錄總數(shù)while(@i<@icount)--外層循環(huán)開始,假如是7個(gè)數(shù)字,就要做6次循環(huán)beginwhile(@k<@kcount)--內(nèi)層循環(huán)開始,假如是7個(gè)數(shù)字要發(fā)生交換,就要做6次循環(huán)beginselect@pre=numberfromt_mptest1where[index]=@k--取當(dāng)前位置號(hào)select@next=numberfromt_mptest1where[index]=@k+1--取后一個(gè)位置號(hào)if@pre<@next--當(dāng)前值和后一個(gè)值對比,如果當(dāng)前值小于后一個(gè)值,就發(fā)生交換beginupdatet1setnumber=@nextfromt_mptest1where[index]=@kupdatet1setnumber=@prefromt_mptest1where[index]=@k+1end@k=@k+1--假如7個(gè)數(shù)字,@k計(jì)數(shù)加1,一直到@k=7時(shí),結(jié)束循環(huán),剛好6次循環(huán)end@k=1--每一輪外層循環(huán)結(jié)束前,內(nèi)層循環(huán)變量@k要重置為位置號(hào)[1]@kcount=@kcount-1--每一輪外層循環(huán)結(jié)束前,內(nèi)層循環(huán)次數(shù)變量要扣減[1],--排除最大位置號(hào)的最大值參與循環(huán)Select[index],numberfromt_mptest1--每一輪外循環(huán)結(jié)束前,查看數(shù)據(jù)交換情況。@i=@i+1--假如7個(gè)數(shù)字,@i計(jì)數(shù)加1,一直到@i=7時(shí),結(jié)束循環(huán),剛好6次循環(huán)End第四輪分析:編寫代碼實(shí)現(xiàn)如下:truncatetablet_mptest1insertintot_mptest1values(1,10),(2,1),(3,35),(4,61),(5,89),(6,36),(7,55)declare@iintdeclare@icountintdeclare@kintdeclare@kcountintdeclare@preintdeclare@nextintset@i=1set@icount=(selectcount(1)fromt_mptest1)set@k=1set@kcount=(selectcount(1)fromt_mptest1)while(@i<@icount)--外層循環(huán)開始,假如是7個(gè)數(shù)字,就要做6次循環(huán)beginwhile(@k<@kcount)--內(nèi)層循環(huán)開始,假如是7個(gè)數(shù)字要發(fā)生交換,就要做6次循環(huán)beginselect@pre=numberfromt_mptest1where[index]=@k--取當(dāng)前位置號(hào)select@next=numberfromt_mptest1where[index]=@k+1--取后一個(gè)位置號(hào)if(@pre>@next)--當(dāng)前值和后一個(gè)值對比,如果當(dāng)前值小于后一個(gè)值,就發(fā)生交換beginupdatet1setnumber=@nextfromt_mptest1t1where[index]=@kupdatet1setnumber=@prefromt_mptest1t1where[index]=@k+1endset@k=@k+1--假如7個(gè)數(shù)字,@k計(jì)數(shù)加1,一直到@k=7時(shí),結(jié)束循環(huán),剛好6次循環(huán)endset@k=1--每一輪外層循環(huán)結(jié)束前,內(nèi)層循環(huán)變量@k要重置為位置號(hào)[1]set@kcount=@kcount-1--每一輪外層循環(huán)結(jié)束前,內(nèi)層循環(huán)次數(shù)變量要扣減[1],--排除最大位置號(hào)的最大值參與循環(huán)select'第'+convert(varchar(10),@i)+'次外層循環(huán)結(jié)束前'Select[index],numberfromt_mptest1--每一輪外循環(huán)結(jié)束前,查看數(shù)據(jù)交換情況。set@i=@i+1--假如7個(gè)數(shù)字,@i計(jì)數(shù)加1,一直到@i=7時(shí),結(jié)束循環(huán),剛好6次循環(huán)Endselect'最終結(jié)果集:'Select[index],numberfromt_mptest1--最終呈現(xiàn)結(jié)果執(zhí)行結(jié)果如下:這一節(jié)總結(jié)下:在這個(gè)例子里面,我們用到了哪些語法?truncate清空表、insert插入表、declare申明變量、set變量賦值、while循環(huán)、update更新表、if條件判斷、select查詢語句等。因?yàn)槲覀兪桥R時(shí)測試?yán)?,可以把create數(shù)據(jù)表,改為直接在執(zhí)行過程中使用“臨時(shí)表”。所以,你得語法基礎(chǔ)扎實(shí),才會(huì)做到活學(xué)活用。然后,邏輯處理,可以從簡單的邏輯開始練習(xí)。比如帶有IF條件、case判斷、臨時(shí)表、循環(huán)、游標(biāo)等處理的例子,多練練。最重要的是,腦袋的思維觀念要清楚一件事情,練習(xí)即是用。多用多熟練,熟能生巧。每個(gè)進(jìn)度里,每一節(jié)的案例,都是可以執(zhí)行的,并且能夠得出驗(yàn)證結(jié)論的,你都可以進(jìn)行練習(xí),加強(qiáng)基礎(chǔ)底子。關(guān)于復(fù)雜開發(fā)就說到這。1.5.SQL報(bào)表開發(fā)邏輯處理=================數(shù)據(jù)類型的簡化理解=================語法就是規(guī)則,熟悉規(guī)則,才能做到活學(xué)活用。以變量為例,什么是字符串變量?就是用來存放字符串類型數(shù)據(jù)的一個(gè)臨時(shí)的小倉庫格子。舉個(gè)例子,我洗了兩個(gè)桃子,然后用盤子裝著,端去給其他人吃。其他人把桃子拿去吃了,盤子是不是用不著了。盤子只是臨時(shí)用來放桃子用的。變量就是那個(gè)盤子。那不同的數(shù)據(jù)類型又該怎么理解?再舉個(gè)例子,我把字符串變量理解為剛才那個(gè)端桃子的盤子。那數(shù)值類型的變量,就是我打算中午吃白米飯時(shí),盛飯的陶瓷碗。等我吃完白米飯后,陶瓷碗是不是也用不著了。把變量分成那么多種數(shù)據(jù)類型,只是為了存放不同類型的數(shù)據(jù),僅此而已。所以,在技術(shù)學(xué)習(xí)的理解上,要盡量簡單化理解。不然,這些高深的技術(shù),以及很多假裝高深的技術(shù),實(shí)在讓人學(xué)習(xí)起來特別吃力,甚至讓人畏難而退。代碼如下:declare@盤子nvarchar(50)declare@陶瓷碗intset@盤子=N'桃子1,桃子2'set@陶瓷碗=100--這里的100是指100粒米飯==================IFELSE語句的簡化理解==================甲同學(xué)過來測試性別。IF條件語句是用來做判斷的。這里,我們IF判斷甲同學(xué)是個(gè)男的,就做什么處理呢?我埋頭拿張貼紙,在上面寫個(gè)大大的粗體字“男”。寫好后,拿起貼紙往甲同學(xué)頭上貼過去,啪的一聲,貼好了。如果經(jīng)過IF判斷甲同學(xué)不是個(gè)男,ELSE判斷她是個(gè)女的。那寫個(gè)貼紙貼她后背。好,下一個(gè)同學(xué)。代碼如下:declare@甲同學(xué)nvarchar(10)declare@乙同學(xué)nvarchar(10)declare@給甲同學(xué)貼標(biāo)簽nvarchar(100)set@甲同學(xué)=N'男'set@乙同學(xué)=N'女'IF(@甲同學(xué)=N'男')beginset@給甲同學(xué)貼標(biāo)簽=N'寫個(gè)男字,貼他額頭'endelseif(@甲同學(xué)=N'女')beginset@給甲同學(xué)貼標(biāo)簽=N'寫個(gè)女字,貼她后背'endelsebeginset@給甲同學(xué)貼標(biāo)簽=N'不男不女,寫個(gè)男字,貼他額頭,寫個(gè)女字,貼她后背'endselect@給甲同學(xué)貼標(biāo)簽執(zhí)行結(jié)果如下:IFELSE和CASEWHEN什么區(qū)別?這兩個(gè)功能相近的語法應(yīng)該怎么區(qū)分,如果沒區(qū)分好,估計(jì)都得寢食難安了,徹夜失眠。第一個(gè)區(qū)別,CASEWHEN長得比較胖,IF是瘦桿,CASE是胖仔!第二個(gè)區(qū)別,CASEWHEN可以用在SELECT查詢語句上。好了,就這樣簡單區(qū)別就可以了。==================循環(huán)怎么理解==================我按順序在盤子擺了十個(gè)桃子。十個(gè)桃子整齊排一列。我要檢查桃子是否可以端出去給客人吃。檢查第1個(gè)桃子,沒問題;繼續(xù)檢查第2個(gè)桃子也沒問題;再檢查第3個(gè)桃子,發(fā)現(xiàn)有些毛毛沒洗干凈,給它擦掉;再檢查第4個(gè)桃子;再檢查第5個(gè)桃子,發(fā)現(xiàn)有塊地方磕爛了,拿刀切掉。。。再再再檢查第10個(gè)桃子,終于檢查完了,打字累死了。這個(gè)就是循環(huán),比如讀書時(shí)宿舍大檢查,一間間宿舍挨間檢查宿舍衛(wèi)生。又比如上體育課排隊(duì)報(bào)數(shù),1,2,3,4,5。。。游標(biāo)和while循環(huán)之爭,到底水落石出了嗎?只要這個(gè)功能不是訪問人數(shù)很多,訪問量很多,并且代碼里面循環(huán)次數(shù)小于1000,或小于2000,為了圖省事偷懶,我一般直接慫恿游標(biāo)上去沖鋒。畢竟游標(biāo)比較耗內(nèi)存資源。代碼如下:select桃子少年組合into#tmp1from(selectconvert(nvarchar(100),N'第1個(gè)桃子')as桃子少年組合unionallselectN'第2個(gè)桃子'unionallselectN'第3個(gè)桃子,有毛'unionallselectN'第4個(gè)桃子'unionallselectN'第5個(gè)桃子,有磕爛'unionallselectN'第6個(gè)桃子'unionallselectN'第7個(gè)桃子'unionallselectN'第8個(gè)桃子'unionallselectN'第9個(gè)桃子'unionallselectN'第10個(gè)桃子')tdeclare@當(dāng)前桃子nvarchar(50)declaremycursorcursorforselect桃子少年組合from#tmp1openmycursorfetchnextfrommycursorinto@當(dāng)前桃子while(@@fetch_status=0)beginif(@當(dāng)前桃子=N'第3個(gè)桃子,有毛')beginupdatet1sett1.桃子少年組合=N'第3個(gè)桃子,有毛,已擦干凈'from#tmp1t1wheret1.桃子少年組合=@當(dāng)前桃子endif(@當(dāng)前桃子=N'第5個(gè)桃子,有磕爛')beginupdatet1sett1.桃子少年組合=N'第5個(gè)桃子,有磕爛,已切掉'from#tmp1t1wheret1.桃子少年組合=@當(dāng)前桃子endfetchnextfrommycursorinto@當(dāng)前桃子endclosemycursorDEALLOCATEmycursorselect*from#tmp1truncatetable#tmp1droptable#tmp1執(zhí)行結(jié)果如下:======================臨時(shí)表怎么理解======================臨時(shí)表絕對是懶人必備,已經(jīng)被我嚴(yán)重過度使用了。大家都見過超市必備的多個(gè)格子的儲(chǔ)物柜吧?臨時(shí)表就是多格儲(chǔ)物柜,臨時(shí)的儲(chǔ)物柜!我要去超市買東西,臨時(shí)把不能帶進(jìn)超市的東西放在儲(chǔ)物柜,買完東西出來后,把儲(chǔ)物柜的東西去走后,你還會(huì)不會(huì)帶走儲(chǔ)物柜嗎?肯定不會(huì)了,放在報(bào)表開發(fā)這個(gè)場景里面,我們還更狠,用完,直接用Droptable刪除表操作,一把火燒掉,銷毀。為什么一定要用到儲(chǔ)物柜這種大容量的?因?yàn)闁|西太多了,一個(gè)臨時(shí)表放不下,要多個(gè)臨時(shí)表來放不同的中間結(jié)果集。臨時(shí)表在1.6小節(jié)專門介紹,此處省略測試代碼示例!1.6.SQL報(bào)表開發(fā)模塊化拆分處理這里還是講臨時(shí)表的運(yùn)用。單獨(dú)提出臨時(shí)表使用的做法和概念。我打算榨混合果汁,桃子、香蕉、西瓜組合的混合果汁。(暗黑料理,喝了會(huì)不會(huì)中毒???)數(shù)據(jù)源有三個(gè):有桃子數(shù)據(jù)表,香蕉數(shù)據(jù)表,西瓜數(shù)據(jù)表,涼開水?dāng)?shù)據(jù)表。第一步:從桃子數(shù)據(jù)表取出3個(gè)桃子,洗干凈,切小塊;從香蕉數(shù)據(jù)表取出2個(gè)香蕉,洗干凈,去皮,切小塊;從西瓜數(shù)據(jù)表取出1/4個(gè)西瓜,切除瓜皮,切小塊;第二步:第一個(gè)臨時(shí)表閃亮登場,榨汁杯臨時(shí)表。把切小塊的桃子、香蕉、西瓜放入榨汁杯,倒入涼開水。第三步:榨汁機(jī)啟動(dòng),嗡嗡嗡,好了,榨好了。第四步:第二個(gè)臨時(shí)表又登場了。果汁杯出場。然后,變魔術(shù)般掏出過濾網(wǎng)兜,把榨好的混合汁液倒入到隔著過濾網(wǎng)兜的果汁杯。第五步:結(jié)果分享,用SELECT查詢語句查詢最終結(jié)果集的臨時(shí)表,就是比喻為,拿果汁杯倒果汁給眾人分享。(這時(shí)最好自己嘗下,喝了會(huì)不會(huì)中毒,再給別人喝。)這里用到兩個(gè)臨時(shí)表:榨汁杯、果汁杯。榨汁杯是用來臨時(shí)存放中間處理的臨時(shí)數(shù)據(jù)集;果汁杯是用來臨時(shí)存放最終結(jié)果集;但是,榨好的果汁也要有人分享,所以,我們要用SELECT語句查詢呈現(xiàn)最終結(jié)果,查完以后。榨汁杯、果汁杯就用不著了,可以拿去洗了,然后收起來。代碼如下:準(zhǔn)備數(shù)據(jù)源:createtablet_桃子(fnamenvarchar(50),fstatusnvarchar(500))insertintot_桃子values(N'第1個(gè)桃子',N'整個(gè)新鮮大桃'),(N'第2個(gè)桃子',N'整個(gè)新鮮大桃'),(N'第3個(gè)桃子',N'整個(gè)新鮮大桃')createtablet_香蕉(fnamenvarchar(50),fstatusnvarchar(500))insertintot_香蕉values(N'第1個(gè)香蕉',N'整個(gè)金黃香蕉'),(N'第2個(gè)香蕉',N'整個(gè)金黃香蕉')createtablet_西瓜(fnamenvarchar(50),fstatusnvarchar(500))insertintot_西瓜values(N'第4分1個(gè)西瓜',N'黒籽甜西瓜')createtablet_涼開水(fnamenvarchar(50),fstatusnvarchar(500))insertintot_涼開水values(N'第1杯涼開水',N'殺菌消毒的涼開水')開始做果汁啦:--1.取桃子、香蕉、西瓜,洗凈、去皮、切小塊,加水selectfname,fstatusinto#tmp_榨汁杯from( selectfname,N'桃子洗凈、去皮、切小塊'asfstatus fromt_桃子 unionall selectfname,N'香蕉洗凈、去皮、切小塊'asfstatus fromt_香蕉 unionall selectfname,N'西瓜洗凈、去皮、切小塊'asfstatus fromt_西瓜 unionall selectfname,fstatus fromt_涼開水)t1--2.榨汁機(jī)嗡嗡嗡榨汁中,好了,榨好了updatet1setfstatus=N'混合的桃子成糊狀'from#tmp_榨汁杯t1wheret1.fnamelikeN'%桃子%'updatet1setfstatus=N'混合的香蕉成糊狀'from#tmp_榨汁杯t1wheret1.fnamelikeN'%香蕉%'updatet1setfstatus=N'混合的西瓜成糊狀'from#tmp_榨汁杯t1wheret1.fnamelikeN'%西瓜%'--3.把榨汁杯的糊狀果汁,通過過濾網(wǎng)兜倒入到果汁杯selectt1.fname,t1.fstatus+N',已過濾掉果渣,是清澈的果汁'asfstatusinto#tmp_果汁杯from#tmp_榨汁杯t1--4.把果汁倒給客人喝吧。先自己嘗一口,噗,中毒倒地。selectfname,fstatusfrom#tmp_果汁杯--5.這下子榨汁杯、果汁杯沒人清洗了,始作俑者還在地板躺著truncatetable#tmp_榨汁杯truncatetable#tmp_果汁杯droptable#tmp_榨汁杯droptable#tmp_果汁杯執(zhí)行結(jié)果如下:總結(jié):臨時(shí)表的運(yùn)用,有助于把復(fù)雜的業(yè)務(wù)邏輯,化為簡單,拆分成一個(gè)個(gè)小模塊,進(jìn)行組裝加工,最終形成最終產(chǎn)品。2.開發(fā)規(guī)范2.1.結(jié)構(gòu)定義規(guī)范命名語法命名數(shù)據(jù)表Tablet_水果表、t_訂單表視圖Viewv_水果表、v_訂單表存儲(chǔ)過程Procedurepro_購買水果、pro_訂單發(fā)貨臨時(shí)表#tmp1、#tmp2、#tmp3、#tmp4變量@FID、@FName、@FCity、@FSex、@FNumber函數(shù)fun_日期處理、fun_字符串處理游標(biāo)mycursor1、mycursor2表變量@tmp1、@tmp2、@tmp3、@tmp42.2.查詢的規(guī)范命名查詢規(guī)范主要是多表連接時(shí),表別名命名規(guī)范,以及換行規(guī)范。準(zhǔn)備數(shù)據(jù):createtablet_桃子2(fnamenvarchar(50),fstatusnvarchar(500),fnumberint)insertintot_桃子2values(N'第1個(gè)桃子',N'整個(gè)新鮮大桃',1),(N'第2個(gè)桃子',N'整個(gè)新鮮大桃',2),(N'第3個(gè)桃子',N'整個(gè)新鮮大桃',3)createtablet_香蕉2(fnamenvarchar(50),fstatusnvarchar(500),fnumberint)insertintot_香蕉2values(N'第1個(gè)香蕉',N'整個(gè)金黃香蕉',1),(N'第2個(gè)香蕉',N'整個(gè)金黃香蕉',2)createtablet_西瓜2(fnamenvarchar(50),fstatusnvarchar(500),fnumberint)insertintot_西瓜2values(N'第4分1個(gè)西瓜',N'黒籽甜西瓜',1)createtablet_涼開水2(fnamenvarchar(50),fstatusnvarchar(500),fnumberint)insertintot_涼開水2values(N'第1杯涼開水',N'殺菌消毒的涼開水',1)查詢代碼[1]如下:selectt1.fname,t1.fstatus,t2.fname,t2.fstatus,t3.fname,t3.fstatus,t4.fname,t4.fstatusfromt_桃子2t1leftjoint_香蕉2t2ont1.fnumber=t2.fnumberleftjoint_西瓜2t3ont1.fnumber=t3.fnumberleftjoint_涼開水2t4ont1.fnumber=t4.fnumber執(zhí)行結(jié)果[1]如下:總結(jié):第一個(gè)規(guī)范,select查詢,一行字段以4或5個(gè)字段為佳,超過4或5,就換行顯示。最好沒行字段個(gè)數(shù)都一致。第二個(gè)規(guī)范,多表連接時(shí),數(shù)據(jù)表的別名,分別用t1、t2、t3、t4這樣順序序號(hào)來命名。這樣代碼很整潔,容易閱讀。特別是SELECT查詢語句很復(fù)雜時(shí),容易閱讀。這是因?yàn)槲覀冄劬ο矚g看整潔、整齊的事物。比如軍隊(duì)排隊(duì)整齊的那種感覺。查詢代碼[2]如下:selectt1.fname,t1.fstatus,t2.fname,t2.fstatus,t3.fname,t3.fstatus,t4.fname,t4.fstatusfromt_桃子2t1leftjoin( selectk1.fname,k1.fstatus,k1.fnumber fromt_香蕉2k1 wherek1.fnumber=1)t2ont1.fnumber=t2.fnumberleftjoint_西瓜2t3ont1.fnumber=t3.fnumberleftjoint_涼開水2t4ont1.fnumber=t4.fnumber執(zhí)行結(jié)果如下:總結(jié):這里我們用到一個(gè)嵌套查詢,以及嵌套查詢里面有用到where。第一個(gè)規(guī)范,外層查詢用t1、t2、t3、t4這種做別名,第一層嵌套用k1、k2、k3、k4這種做別名。第二層嵌套用c1、c2、c3。一般來講,我們規(guī)定了三層的查詢,已經(jīng)足夠大部分使用了。為什么挑這三個(gè)字母來做別名?你仔細(xì)注意看,字母本身是等身長,上下同寬,配合數(shù)字,眼睛看起來比較舒服。第二個(gè)規(guī)范,exists條件子查詢里面,涉及到數(shù)據(jù)表別名命名,也跟第
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026廣西賀州市鐘山縣鐘山鎮(zhèn)中心小學(xué)招聘聘任制教師3人備考題庫完整參考答案詳解
- 2026廣西柳州市融安縣公安局招聘警務(wù)輔助人員50人備考題庫及答案詳解一套
- 1.1我們身邊的地理學(xué)案(含答案)2025~2026學(xué)年度湘教版七上地理
- 2026年上半年黑龍江省體育局事業(yè)單位公開招聘工作人員13人備考題庫及完整答案詳解1套
- 2026四川廣安市華鎣市人力資源和社會(huì)保障局全市各見習(xí)基地招聘就業(yè)見習(xí)人員14人備考題庫完整答案詳解
- 2026廣東茂名市化州市司法局招聘行政復(fù)議庭審助理人員1人備考題庫及完整答案詳解1套
- 2026天津職業(yè)技術(shù)師范大學(xué)第二批招聘方案(博士或高級專業(yè)技術(shù)職務(wù)崗位)36人備考題庫及1套完整答案詳解
- 2026四川自貢市沿灘區(qū)瓦市鎮(zhèn)人民政府編外人員招聘1人備考題庫參考答案詳解
- 2026云南大理州洱源縣工業(yè)信息和科技局城鎮(zhèn)公益性崗位招聘2人備考題庫及答案詳解(易錯(cuò)題)
- 2026中國航天科工集團(tuán)第四研究院十七所招聘備考題庫有答案詳解
- 工廠驗(yàn)收測試(FAT)
- 麻醉藥品、精神藥品月檢查記錄
- 高職單招數(shù)學(xué)試題及答案
- 基礎(chǔ)化學(xué)(本科)PPT完整全套教學(xué)課件
- 蕉嶺縣幅地質(zhì)圖說明書
- 玻璃幕墻分項(xiàng)工程質(zhì)量驗(yàn)收記錄表
- 電梯控制系統(tǒng)論文
- (完整word版)人教版初中語文必背古詩詞(完整版)
- 湖北省地質(zhì)勘查坑探工程設(shè)計(jì)編寫要求
- GB/T 4310-2016釩
- GB/T 28799.3-2020冷熱水用耐熱聚乙烯(PE-RT)管道系統(tǒng)第3部分:管件
評論
0/150
提交評論