Oracle使用技巧之case子句的用途_第1頁
Oracle使用技巧之case子句的用途_第2頁
Oracle使用技巧之case子句的用途_第3頁
Oracle使用技巧之case子句的用途_第4頁
Oracle使用技巧之case子句的用途_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、奧case 子句艾的用用途語法:擺 敗case襖 白 盎 半when澳 板條件1邦 俺then唉 半值1白 鞍 八when敖條件2 唉then罷 矮值2礙7。柏when斑條件n 般般then鞍 艾值n案else扒 版值else案end俺 半case啊子句挨相當(dāng)當(dāng)于一個(gè)具有皚多個(gè)選擇的語句句鞍,在多個(gè)不同的的氨條件中,選擇其其背中之一,與ja隘隘va語言的ca岸岸se語句類似。懊懊N。爸例:如果表壩chinese絆絆的字段bh為n啊啊ull,則返回回吧0,如果字段b斑斑h(yuǎn)為1,則返回回岸99,字段bh啊啊為其它值,原樣樣哎返回敖。俺E。扮select安 擺 拜拜case叭 瓣 耙 頒when拌

2、bh 胺is擺 伴null笆 扳then矮 班0吧 搬 翱when霸 bh=俺1敗 暗then版 班99絆 霸 霸else氨 bh骯 暗end矮 bhs,熬 板xh,code案案 邦 岸from奧 chines稗稗e 叭z。版一、爸利用CASE 俺語句更新列值熬執(zhí)行本語句將性傲別為為男的伙食補(bǔ)艾助修改為120瓣瓣,女修改為10白白0邦UPDATE 骯TB_EMP2癌SET 伙食補(bǔ)阿助=CASE 傲WHEN 性別別安=男 th拜拜en 120耙s。傲 芭 敖 芭 頒 WHEN 芭性別=女 伴then 10辦辦0END艾當(dāng)列cj的值為挨74時(shí)時(shí),修改其扒值為80,百 埃為97時(shí),修改改凹其值為10

3、0,襖襖其它值不變邦y。頒update埃 tb 芭set白 cj吧=(皚case瓣 cj俺 芭when擺 霸74跋 藹then吧 絆80啊L。懊when熬 胺97般般 八then搬 靶100百else扒 cj 安安end版);班當(dāng)列kc的值為凹般般語文把挨時(shí),修改列cj襖襖=cj+6,熬熬 擺為扒半物理扳罷時(shí),修改其值為為翱cj+4,其它它搬值不變八K。啊update藹 tb 拜set矮 cj奧=(爸case版 氨when半 kc扮=懊語文扮 百then捌 cj昂+八6藹J。耙when邦 kc傲=班物理敖 般then挨 cj奧+阿4疤else哎 cj 盎盎end斑);隘/白/敗/懊/按/捌/吧

4、/柏/氨B。瓣利用CASE 扳語句句進(jìn)行更新列按值把執(zhí)行本語句將性敗別為為男的伙食補(bǔ)版助修改為120拜拜,女修改為10半半0半U(xiǎn)PDATE 哎TB_EMP2辦SET 伙食補(bǔ)案助=CASE 奧WHEN 性別別跋=男 th案案en 120岸B。扳 翱 白 柏 巴 WHEN 擺性別=女 氨then 10稗稗0END翱當(dāng)列cj的值為邦74時(shí)時(shí),修改其澳值為80,傲 柏為97時(shí),修改改暗其值為100,白白其它值不變版z。頒update哀 tb 胺set把 cj岸=(班case襖 cj擺 啊when按 笆74埃 傲then伴 俺80隘H。捌when藹 阿97按按 芭then吧 俺100唉else皚 cj

5、澳澳end巴);安當(dāng)列kc的值為礙翱翱語文挨哎時(shí),修改列cj暗暗=cj+6,佰佰 安為版辦物理把氨時(shí),修改其值為為挨cj+4,其它它耙值不變唉m。白u(yù)pdate昂 tb 稗set耙 cj翱=(辦case敖 敗when邦 kc拌=扒語文邦 唉then耙 cj埃+邦6辦B。伴when懊 kc藹=搬物理鞍 扮then絆 cj凹+扳4礙else阿 cj 版版end挨);搬case語句在唉SQL中中的使用唉方法捌 唉Case具有兩捌種格格式。簡(jiǎn)單C靶ase函數(shù)和C斑斑ase搜索函數(shù)數(shù)搬。 背1.簡(jiǎn)單Cas澳e函函數(shù)拔CASE se霸x笆 氨 WHEN 壩1 THE骯骯N 男胺 耙 WHEN 敖2 THE

6、岸岸N 女挨ELSE 其安他 END昂2.搜索cas氨e函函數(shù)疤CASE WH般EN sex 板= 1 T矮矮HEN 男昂 辦 WHEN 鞍sex = 跋2 THEN癌癌 女拌ELSE 其懊他 END把這兩種方式,可按以實(shí)實(shí)現(xiàn)相同的功絆能。簡(jiǎn)單Cas扮扮e函數(shù)的寫法相相敗對(duì)比較簡(jiǎn)潔,但但昂是和Case搜搜阿索函數(shù)相比,功功靶能方面會(huì)有些限限矮制,比如寫判斷斷疤式。 白8。埃還有一個(gè)需要注暗意的的問題,版Case函數(shù)只只傲返回第一個(gè)符合合八條件的值,剩下下稗的Case部分分襖將會(huì)被自動(dòng)忽略略按。扒 笆T。絆-比如說,下伴面這這段SQL,敗你永遠(yuǎn)無法得到到瓣“白第二類吧”版這個(gè)結(jié)果矮CASE WH

7、邦EN col_笆1 擺IN版 ( a,岸岸 b) 柏THEN 第第班一類頒5。敖 笆 WHEN 唉col_按1 IN艾 (a) 捌 T辦辦HEN 第二二靶類拜Q。昂ELSE其他敖 END搬Case使用集百錦隘一,已知數(shù)據(jù)按懊照另另外一種方式巴進(jìn)行分組,分析析罷。 罷芭下面的挨Case語句句用搬在Group 版by 子句中霸有如下數(shù)據(jù):(敖為了了看得更清楚疤,我并沒有使用用礙國(guó)家代碼,而是是埃直接用國(guó)家名作作斑為Primar傲傲y Key) 胺p。霸國(guó)家(coun奧try) 人口百(popula拜拜tion) 壩中國(guó) 版斑瓣班班600稗 靶美國(guó) 傲跋礙懊懊100 扳加拿大 艾艾挨暗100 爸英

8、國(guó) 半百般柏柏200 藹法國(guó) 白疤盎皚皚300 把日本 跋百隘八八250唉 吧德國(guó) 拜版礙骯骯200 案墨西哥 把隘啊襖50 啊印度 邦疤搬板板250哀 捌根據(jù)國(guó)家人口數(shù)背據(jù),統(tǒng)統(tǒng)計(jì)亞洲和伴北美洲的人口數(shù)數(shù)半量。應(yīng)該得到下下笆面這個(gè)結(jié)果。 傲p。洲 人口 捌亞洲 白絆1100 拜北美洲 皚翱250 背其他 拌拔700 般想要解決這個(gè)問骯題,你你會(huì)怎么做盎?生成一個(gè)帶有有襖洲Code的V胺胺iew,是一個(gè)個(gè)扮解決方法,但是是半這樣很難動(dòng)態(tài)的的邦改變統(tǒng)計(jì)的方式式搬。 板8。翱如果使用Cas凹e函函數(shù),SQL疤代碼如下: 艾SELECT 佰 SUM(po捌pulatio啊啊n),藹 哎 CASE c

9、矮ountry鞍 般 耙 WHEN 罷中國(guó) 拜 THEN 罷亞洲靶 暗 案 WHEN 藹印度 案 THEN 氨亞洲靶 扳 哎 WHEN 安日本 骯 THEN 柏亞洲哀 霸 鞍 WHEN 阿美國(guó) 佰 THEN 皚北美洲壩 啊 爸 WHEN 跋加拿大 矮THEN 北北澳美洲癌 盎 稗 WHEN 吧墨西哥 耙THEN 北北辦美洲癌 熬 ELSE 艾其他 END皚FROM 哀 Table_柏A靶GROUP B啊Y CASE 氨country伴 傲 斑 WHEN 哀中國(guó) 壩 THEN 辦亞洲藹 捌 癌 WHEN 昂印度 埃 THEN 疤亞洲案 笆 把 WHEN 柏日本 隘 THEN 跋亞洲絆 伴 哀 W

10、HEN 耙美國(guó) 凹 THEN 扒北美洲罷 傲 扒 WHEN 芭加拿大 拌THEN 北北癌美洲叭 叭 叭 WHEN 壩墨西哥 背THEN 北北伴美洲擺 靶 ELSE 版其他 END吧吧;氨同樣的,我們也拔可以以用這個(gè)方法背來判斷工資的等等板級(jí),并統(tǒng)計(jì)每一一爸等級(jí)的人數(shù)。S氨氨QL代碼如下;靶 傲O。SELECT邦 爸 CASE W百HEN sal班班ary 5芭芭00 AND 叭salary 白 6皚皚00 AND 氨salary 爸 8凹凹00 AND 癌salary 癌= 1000暗暗 THEN 扮4阿v。壩 吧 ELSE N辦ULL END胺胺 salary藹藹_class,鞍 翱 COU

11、NT(斑*)凹FROM 胺 Table_皚A八GROUP B辦Y背 安 CASE W八HEN sal捌捌ary 5絆絆00 AND 辦salary 敗 6安安00 AND 唉salary 疤 8唉唉00 AND 跋salary 扒 10暗暗00阿 癌 柏 矮 THEN班班 1 ELSE芭芭 0 END罷 扒 EL哀SE 1 EN敖敖D 罷= 1疤 )藹如果單純使用C巴heck,如如下拌所示 版CONSTRA頒INT che辦ck_sala胺胺ry CHEC疤疤K背 哎 ( s笆ex = 2扳扳 AND s叭叭alary 岸 1000 )安O。艾女職員的條件倒拔是符符合了,男職柏員就無法輸入了了

12、礙。岸這是一個(gè)非常經(jīng)經(jīng)盎典的用法!鞍s。八四,根據(jù)條件有隘選擇擇的UPDA稗TE。 般熬下面的把Case語句句用敗在update叭叭子句中,如果進(jìn)進(jìn)版行兩次更新,則則芭可能會(huì)產(chǎn)生錯(cuò)誤誤按!扳T。白例,有如下更新拌條件件 暗工資5000以把上的的職員,工資哀減少10% 澳工資在2000啊到4600之之間皚的職員,工資增增礙加15% 隘很容易考慮的是骯選擇擇執(zhí)行兩次U骯PDATE語句句氨,如下所示 -條件1敖UPDATE 埃Personn哎哎el稗SET sal伴ary = s皚alary *凹凹 0.9稗WHERE s敗alary 皚= 5000;-條件2澳UPDATE 阿Personn半半el

13、百SET sal啊ary = s襖alary *擺擺 1.15癌WHERE s昂alary 礙= 2000 爸AND sal捌捌ary = 5瓣瓣000哀w。扒 絆 T八HEN sal稗稗ary * 0班班.9傲WHEN sa啊lary =瓣 2000 A扮扮ND sala鞍鞍ry 46頒頒00疤X。氨THEN sa癌lary * 絆1.15疤ELSE sa拌lary EN巴D;哎這里要注意一點(diǎn)百,最最后一行的E皚LSE sal安安ary是必需的的傲,要是沒有這行行稗,不符合這兩個(gè)個(gè)拔條件的人的工資資八將會(huì)被寫成NU岸岸ll,那可就大大百事不妙了。在C案案ase函數(shù)中E隘隘lse部分的默默襖認(rèn)

14、值是NULL芭芭,這點(diǎn)是需要注注拌意的地方。 絆a。埃五變更主鍵列班的值值扳鞍本質(zhì)上任然是C笆ase語語句在u擺pdate中的的拌應(yīng)用案一般情況下,要哀想把把兩條數(shù)據(jù)的邦Primary胺胺 key,a和和翱b交換,需要經(jīng)經(jīng)扮過臨時(shí)存儲(chǔ),拷拷笆貝,讀回?cái)?shù)據(jù)的的案三個(gè)過程,要是是昂使用Case函函扮數(shù)的話,一切都都拔變得簡(jiǎn)單多了。半半 俺y。把p_key c傲ol_1 co耙l_2 案a 阿俺1 岸暗暗張三 柏b 拌百2 叭奧奧李四 隘c霸隘3 昂拌王五 襖假設(shè)有如上數(shù)據(jù)靶,需需要把主鍵a芭和b相互交換。俺俺用Case函數(shù)數(shù)唉來實(shí)現(xiàn)的話,代代稗碼如下 埃D。阿UPDATE 邦SomeTab傲傲le

15、傲SET p_k爸ey =奧CASE WH襖EN p_ke懊y = a奧 阿THEN b按按藹f。搬WHEN p_疤key = 隘b骯 捌THEN a霸霸板ELSE p_澳key END氨WHERE 翱p_key I耙N (a,邦邦 b);暗同樣的也可以交板換兩兩個(gè)Uniq板ue key。阿阿需要注意的是,半半如果有需要交換換傲主鍵的情況發(fā)生生安,多半是當(dāng)初對(duì)對(duì)骯這個(gè)表的設(shè)計(jì)進(jìn)進(jìn)辦行得不夠到位,癌癌建議檢查表的設(shè)設(shè)擺計(jì)是否妥當(dāng)。 擺g。阿六,兩個(gè)表數(shù)據(jù)把是否否一致的檢查背。 捌胺Case函數(shù)中扮,可可以使用捌下列熬子句:背BETWEEN敗 AND ,伴 LIKE,佰IS NULL柏,奧IN,八

16、 把NOT IN扳EXISTS靶 斑和和傲NOT 佰 啊EXISTS哀Case函數(shù)不斑同于于DECOD半E函數(shù)。在鞍Case函數(shù)中中挨,可以使用BE把把TWEEN,L斑斑IKE,IS 傲NULL,IN芭芭,EXISTS埃埃等等。比如說使使氨用IN,EXI百百STS,可以進(jìn)進(jìn)胺行子查詢,從而而阿 實(shí)現(xiàn)更多的功功爸能。 辦1。凹下面具個(gè)例子來凹說明明,有兩個(gè)表霸,tbl_A,隘隘tbl_B,兩兩罷個(gè)表中都有ke哀哀yCol列?,F(xiàn)現(xiàn)芭在我們對(duì)兩個(gè)表表胺進(jìn)行比較,tb半半l_A中的ke背背yCol列的數(shù)數(shù)白據(jù)如果在tbl柏柏_B的keyC俺俺ol列的數(shù)據(jù)中中傲可以找到, 返返擺回結(jié)果Mat絆絆ched

17、,如如胺果沒有找到,返返伴回結(jié)果Unm凹凹atched皚。 襖G。唉要實(shí)現(xiàn)下面這個(gè)隘功能能,可以使用氨下面兩條語句 捌1.使用IN的澳時(shí)候候安SELECT 敖keyCol,啊CASE WH哎EN 耙keyCol 半IN邦 ( SELE疤疤CT keyC白白o(hù)l FROM澳澳 tbl_B 昂)敖 瓣耙when中跋使用奧in白 子句皚I。挨THEN M笆atched八ELSE U凹nmatche藹藹d END 吧Label啊FROM tb襖l_A;澳2.使用EXI案STS的的時(shí)候鞍SELECT 佰keyCol,昂CASE WH笆EN EXIS耙TS ( SE搬搬LECT * 捌FROM tb岸岸l

18、_B伴a。瓣WHERE t啊bl_A.ke熬yCol = 癌tbl_B.k胺胺eyCol )八j。壩THEN M艾atched傲ELSE U爸nmatche壩壩d END 絆Label矮FROM tb擺l_A;隘使用IN和EX案ISTS的的結(jié)果奧是相同的。也可可案以使用巴NOT IN和和版NOT EXI俺俺STS辦,但是這個(gè)時(shí)候候襖要注意NULL巴巴的情況。 礙c。隘七襖,在Case函礙數(shù)中中使用合計(jì)函鞍數(shù) 擺假設(shè)有下面一個(gè)安表扮學(xué)號(hào)(std_鞍id) 課程I氨D(class叭叭_id) 課程程爸名(class傲傲_name) 佰主修flag(八八main_cl昂昂ass_flg奧奧) 敖v。

19、翱100 1 經(jīng)懊濟(jì)學(xué)學(xué) Y 挨100 2 歷耙史學(xué)學(xué) N 哎200 2 歷啊史學(xué)學(xué) N 百200 3 考敗古學(xué)學(xué) Y 頒200 4 計(jì)哀算機(jī)機(jī) N 霸300 4 計(jì)傲算機(jī)機(jī) N 按400 5 化敗學(xué) N 氨500 6 數(shù)搬學(xué) N板 霸有的學(xué)生選擇了皚同時(shí)時(shí)修幾門課程隘(藹100,200罷罷)也有的學(xué)生只只埃選擇了一門課程程板(爸300,400白白,500阿)。選修多門課課芭程的學(xué)生,要選選擺擇一門課程作為為艾主修,主修fl懊懊ag里面寫入 把Y。只選擇一門門奧課程的學(xué)生,主主邦修flag為N昂昂(實(shí)際上要是寫寫拌入Y的話,就沒沒拜有下面的麻煩事事芭了,為了舉例子子敗,還請(qǐng)多多包含含拜)。 扳

20、V。辦現(xiàn)在我們要按照版下面面兩個(gè)條件對(duì)矮這個(gè)表進(jìn)行如下下捌查詢 :案只選修一門課程拔的學(xué)學(xué)生,返回那稗門課程的ID 扒選修多門課程的跋學(xué)生生,返回所選板的主課程ID 懊簡(jiǎn)單的想法就是澳,執(zhí)執(zhí)行兩條不同澳的SQL語句進(jìn)進(jìn)爸行查詢。 昂-條件1:只捌選擇擇了一門課程罷的學(xué)生襖SELECT 熬std_id,巴 MAX(cl昂昂ass_id)澳 AS mai靶靶n_class唉唉a。唉FROM St絆udentcl襖襖ass礙GROUP B扳Y std_i翱d罷HAVING 霸COUNT(*唉) = 1;執(zhí)行結(jié)果1 耙STD_ID 背 MAIN_皚class安- 熬 -埃-盎300 頒 4拔400 拔

21、 5斑500 按 6按-條件2:選按擇多多門課程的學(xué)跋生盎SELECT 罷std_id,跋 class_哎id AS m敖敖ain_cla巴巴ss氨b。扒FROM St稗udentcl伴伴ass伴WHERE m叭ain_cla班ss_flg 拔= Y ;執(zhí)行結(jié)果2 奧STD_ID 懊 MAIN_c埃lass敖- 稗 -阿-挨100 澳 1辦200 澳 3把如果使用Cas藹e函函數(shù),我們只背要一條SQL語語敗句就可以解決問問藹題,具體如下所所佰示 頒O。般SELECT 佰 std_id班,斑CASE WH疤EN COUN頒T(*) = 哀1 稗THEN MA啊啊X(class唉唉_id)啊 -只

22、選擇擇班一門課程的學(xué)生生胺的情況隘r。扮ELSE MA搬X拜拜(搬CASE WH矮矮EN main八八_class_傲flg = 熬Y傲m。礙THEN cl班ass_id襖ELSE NU藹LL END)瓣END拔 八AS般 main_c安安lass拜FROM St版udentcl霸霸ass敗GROUP B罷Y std_i唉d;運(yùn)行結(jié)果 奧STD_ID 壩 MAIN_拜class拔- 拜 -辦-鞍100 熬 1礙200 扮 3翱300 芭 4俺400 擺 5骯500 板 6艾通過在Case氨函數(shù)數(shù)中嵌套Ca扒se函數(shù),在合合按計(jì)函數(shù)中使用C班班ase函數(shù)等方方傲法,我們可以輕輕艾松的解決這個(gè)問問

23、啊題。使用Cas埃埃e函數(shù)給我們帶帶般來了更大的自由由背度。 般V。盎最后提醒一下使埃用Case函函數(shù)爸的新手注意不要要氨犯下面的錯(cuò)誤 罷CASE co百l_1班WHEN 1 傲 叭THEN R拜拜ight邦WHEN NU澳LL THE昂N Wron挨挨gEND安在這個(gè)語句中W翱hen Nul胺l這一行總是返返擺回unknow耙耙n,所以永遠(yuǎn)不不俺會(huì)出現(xiàn)Wron把把g的情況。因?yàn)闉榘圻@句可以替換成成耙WHEN co俺俺l_1 = N拜拜ULL,這是一一埃個(gè)錯(cuò)誤的用法,敖敖這個(gè)時(shí)候我們應(yīng)應(yīng)唉該選擇用WHE敖敖N 搬col_1 I芭芭S NULL敗。正確的做法是是按:俺8。俺CASE co背l_1

24、爸WHEN 1藹 THEN 矮Right辦WHEN 挨 拌IS 熬NULL芭 THEN 哎WrongEND埃coalesc靶e八八函數(shù)哀語法:般coalesc爸爸e稗(挨param1,隘隘param2伴)皚當(dāng)啊第一個(gè)背參數(shù)俺param1(瓣通常為字段拜)哀為null時(shí),斑斑返回第二個(gè)參數(shù)數(shù)胺param2礙的值,否則,返返伴回第一個(gè)參數(shù)的的哀值癌.這個(gè)函數(shù)與N岸岸VL函數(shù)功能相相壩同。頒e。阿例:板 跋select矮 藹coalesc疤疤e把(bh,半0拔) bhs 挨from白 chines百百e阿 柏select搬 nvl(bh背背,澳0柏) bhs 拌from敗 chines稗稗e壩m。矮

25、從表中隨機(jī)返回跋n條條記錄哀實(shí)現(xiàn)此功能需要伴使用用函數(shù)埃dbms_ra翱翱ndom.靶value鞍()辦作為order癌癌 by子句的參參哀數(shù),骯w。傲這樣查詢將依賴襖于函函數(shù)的結(jié)果進(jìn)瓣行排序。伴利用這個(gè)函數(shù)可可背以實(shí)現(xiàn)隨機(jī)出題題奧c。奧例1:隨機(jī)產(chǎn)生澳100條條歇后語霸記錄安Select唉 * from (把select耙 xh,con鞍鞍tent,ke把把ys 俺from懊 xhy 頒order癌 襖by礙 dbms_r矮矮andom.俺value按()捌M。)霸Where皚 壩rownum埃=凹100耙;擺例2:佰利用函數(shù)把dbms_ra白ndom.辦value礙()絆產(chǎn)生100個(gè)隨隨稗

26、機(jī)數(shù)爸S。把Oracle 奧10g瓣方法拜select盎 dbms_r骯andom.搬value班() 頒from叭 dual 鞍connect岸岸 安by阿 扳rownum扮頒=1扳0瓣0笆Z。把Oracle 唉9i方方法爸select啊 dbms_r搬andom.叭value藹() 熬from稗 扒all_obj鞍鞍ects哎 岸rownum白八=奧10昂0搬o。稗根據(jù)學(xué)生成績(jī)排柏名次次把要求:要求輸出安前n名名學(xué)生,同澳一成績(jī)名次相同同拜。藹原理:利用胺dense_r叭ank()翱這個(gè)分析函數(shù)進(jìn)進(jìn)版行名次排列主要數(shù)據(jù)如下案X襖m矮敖scorec72x83b83d65h96n57y90m9

27、9v100輸出前5名案X把m盎罷score m絆cn571d652c723x834b834y905艾select傲 * 挨from埃(澳 氨select傲 xm,sco壩壩re,啊dense_r疤疤ank()ov靶靶er(艾order班 埃by啊 score)哎 mc 拌from澳 studen疤疤tscore 霸t扳)跋where艾 mc=襖5癌r。捌oracle使襖用扒扒皚merge挨百更新或插入數(shù)據(jù)據(jù)稗使用merge安比傳傳統(tǒng)的先判斷安再選擇插入或更更班新快很多。凹1)主要功能矮提供有條件地更更版新和插入數(shù)據(jù)到到襖數(shù)據(jù)庫表中壩如果該行存在,胺胺執(zhí)行一個(gè)UPD敗敗ATE操作,如如盎果是一個(gè)

28、新行,傲傲執(zhí)行INSER版版T操作邦盎 避免了分開更更藹新吧懊 提高性能并易易唉于使用鞍澳 在數(shù)據(jù)倉庫應(yīng)應(yīng)奧用中十分有用靶2)MERGE澳澳語句的語法如下下暗:芭MERGE 佰hint I疤疤N(yùn)TO sc皚皚hema .捌 table 俺t_alia靶靶s USIN哀哀G sche芭芭ma .芭 table扒扒 | view八八 | subq稗稗uery 傲t_alia邦邦s ON (吧 condit骯骯ion )背WHEN MA背背TCHED T敗敗HEN mer案案ge_upda吧吧te_clau俺俺se邦WHEN NO頒頒T MATCH八八ED THEN岸岸 merge_艾insert_

29、班clause;俺還是看例子就知知罷道怎么回事:白MERGE I盎盎NTO cop癌癌y_emp c疤疤USING e頒頒mployee拌拌s e瓣ON (c.e胺胺mployee佰佰_id=e.e唉唉mployee白白_id)翱WHEN MA安安TCHED T骯骯HEN邦UPDATE 埃SET柏c.first俺俺_name=e邦邦.first_爸name,哀c.last_案name=e.拜拜last_na熬熬me,啊c.depar靶靶tment_i芭芭d=e.dep埃埃artment敗敗_id絆WHEN NO罷罷T MATCH稗稗ED THEN扳扳INSERT 罷VALUES(稗e.empl

30、o吧吧yee_id,搬搬e.first皚皚_name,e氨氨.last_n叭叭ame,絆e.email唉唉,e.phon胺胺e_numbe吧吧r,e.hir霸霸e_date,吧吧e.job_i搬搬d,懊e.salar扮扮y,案案mission按按_pct,e.搬搬manager拔拔_id,哎e.depar昂昂tmetn_i芭芭d);扳MERGE I伴伴NTO cop霸霸y_emp c哎哎USING e襖襖mployee拌拌s e敖ON (c.e啊啊mployee跋跋_id=e.e盎盎mployee版版_id)埃WHEN MA擺擺TCHED T板板HEN盎UPDATE 瓣SET埃c.first巴

31、巴_name=e佰佰.first_襖name,敗c.last_靶name=e.胺胺last_na霸霸me,霸c.depar般般tment_i半半d=e.dep皚皚artment絆絆_id暗WHEN NO皚皚T MATCH百百ED THEN白白INSERT 叭VALUES(翱e.emplo矮矮yee_id,阿阿e.first按按_name,e挨挨.last_n柏柏ame,捌e.email阿阿,e.phon皚皚e_numbe瓣瓣r,e.hir礙礙e_date,捌捌e.job_i岸岸d,扳e.salar翱翱y,氨氨mission哎哎_pct,e.罷罷manager稗稗_id,啊e.depar辦辦tm

32、etn_i安安d);哎3)使用mer爸爸ge的注意事項(xiàng)項(xiàng)案:懊創(chuàng)建測(cè)試表:把CREATE 搬TABLE M埃埃M (ID N白白UMBER, 暗NAME VA挨挨RCHAR2(叭20);邦CREATE 柏TABLE M柏柏N (ID N矮矮UMBER, 皚NAME VA安安RCHAR2(吧20);襖插入數(shù)據(jù)柏INSERT 班INTO MM凹凹 VALUES昂昂 (1, A瓣瓣);胺INSERT 疤INTO MN伴伴 VALUES啊啊 (1, B瓣瓣);凹執(zhí)行:敗MERGE I鞍鞍NTO MN 扒A唉USING M般般M B艾ON(A.ID凹凹=B.ID)暗WHEN MA安安TCHED T板板H

33、EN百UPDATE 拌SET A.I岸岸D = B.I扒扒D襖WHEN NO八八T MATCH翱翱ED THEN骯骯INSERT 安VALUES(背B.ID, B啊啊.NAME);八ON(A.ID鞍鞍=B.ID)澳報(bào)錯(cuò):無效的標(biāo)標(biāo)胺識(shí)符,這個(gè)錯(cuò)誤誤扮提示有些誤導(dǎo)嫌嫌扳疑,耙原因是on子句句白的使用的字段不不搬能夠用于upd白白ate,即Or敗敗acle不允許許跋更新用于連接的的吧列笆修改:扮MERGE I笆笆NTO MN 唉A啊USING M凹凹M B哀ON(A.ID俺俺=B.ID)埃WHEN MA跋跋TCHED T矮矮HEN唉UPDATE 俺SET A.N矮矮AME = B巴巴.NAME辦W

34、HEN NO熬熬T MATCH把把ED THEN敗敗INSERT 吧VALUES(頒B.ID, B胺胺.NAME);唉ON(A.ID啊啊=B.ID)艾再插入:INS般般ERT INT叭叭O MM VA奧奧LUES (1捌捌, C);暗再執(zhí)行:澳MERGE I頒頒NTO MN 邦A(yù)扒USING M耙耙M B辦ON(A.ID叭叭=B.ID)敗WHEN MA拌拌TCHED T辦辦HEN叭UPDATE 板SET A.N班班AME = B暗暗.NAME澳WHEN NO懊懊T MATCH佰佰ED THEN昂昂INSERT 挨VALUES(礙B.ID, B唉唉.NAME);矮ON(A.ID靶靶=B.ID)巴

35、報(bào)錯(cuò),原因無法法背在源表中獲得一一矮組穩(wěn)定的行般4)更新同一張張阿表的數(shù)據(jù)。需要要搬注意下細(xì)節(jié),因因拌為可能涉及到u案案sing的數(shù)據(jù)據(jù)跋集為null,哀哀所以要使用co般般unt()函數(shù)數(shù)般。跋MERGE I吧吧NTO mn 辦a芭USING (把select 藹count(*懊懊) co fr佰佰om mn w敖敖here mn唉唉.ID=4) 頒b傲ON (b.c伴伴o0)-阿這里使用了co絆絆unt和,敗敗注意下,想下為為斑什么!背WHEN MA巴巴TCHED T哀哀HEN胺UPDATE澳SET a.N扒扒AME = 澳E唉where a巴巴.ID=4把WHEN NO鞍鞍T MATCH

36、壩壩ED THEN昂昂INSERT巴VALUES 百(4, E氨);隘o。敗計(jì)算中唉位(挨間巴)百值一、問題襖計(jì)算一列數(shù)字值昂的中中間值(中間埃值就是一組有序序挨元素中間成員的的叭值)。懊7。頒假設(shè)有如下數(shù)據(jù)拔:邦create 拌table 昂empInfo(礙 name v傲archar2胺胺(20),跋 sal nu捌mber(6)板insert 礙into em捌pInfo v氨氨alues(扒王宏,800胺胺);白9。扒insert 爸into em安pInfo v襖襖alues(壩留心會(huì),11伴伴00);盎c。扳insert 叭into em扮pInfo v熬熬alues(懊張三,1

37、50襖襖0);笆Y。絆insert 哀into em稗pInfo v柏柏alues(敖李薇霞,30啊啊00);熬5。阿insert 鞍into em佰pInfo v哎哎alues(襖大大村,25唉唉00);礙N。擺insert 耙into em胺pInfo v案案alues(板楊偉,275巴巴0);胺B。埃select般 * 靶from襖 empInf扳扳o 鞍order敖 背by爸 sal癌F。王宏800敗留心會(huì)邦岸1100張三1500藹大大村岸盎2500楊偉2750唉李薇霞柏叭3000暗中位數(shù)應(yīng)為:2頒000=(15隘00+2500拌拌)/2二、解決方案跋除了Oracl熬e解解決方案(用澳

38、函數(shù)計(jì)算中間數(shù)數(shù)阿)之外,其他所所柏有解決方案都是是澳以Rozens拜拜htein、A斑斑bramovi熬熬ch和Birg俺俺er在Opti巴巴mizing 跋Transac暗暗t-SQL: 跋Advance凹凹d Progr熬熬amming 凹Techniq暗暗ues (SQ癌癌L Forum板板 Press,耙耙 1997)中中哀描述的方法為基基拔礎(chǔ)的。與傳統(tǒng)的的扳自聯(lián)接相比,按窗口函數(shù)的引入入捌,使解決方案更更扒為有效扒。凹V。懊1岸.疤 擺通用求中位數(shù)的氨方法法柏使用自聯(lián)接查找版中間間數(shù):霸其原理是:壩首先進(jìn)行自連接癌,獲獲得笛卡爾積壩;其次計(jì)算各記記半錄sal字段的的岸差并轉(zhuǎn)換為符號(hào)

39、號(hào)稗函數(shù)艾,熬V。氨即:襖sign俺(拜拜e挨.百sal 疤-版 d耙.把sal盎)扳以及各個(gè)記錄s癌癌al字段是否相相礙同拜,用下列語句實(shí)實(shí)瓣現(xiàn):唉e。安case爸 哀when壩 e班.罷sal 礙=奧 d絆.斑sal 懊then版 1 扮else芭 0 百end拌;然后再進(jìn)行分分背組巴,并計(jì)算組內(nèi)s艾艾al字段的平均均懊值。吧k。拌如果一列數(shù)為奇辦數(shù)個(gè)個(gè)數(shù),則這列俺數(shù)必定關(guān)于中間間柏一個(gè)數(shù)的挨abs埃(哀sum哀(辦sign氨(澳e唉.翱sal 瓣-把 d霸.隘sal癌)疤成對(duì)稱。如果一一霸列數(shù)為偶數(shù)個(gè)數(shù)數(shù)半,則這列數(shù)必定定傲關(guān)于中間的兩個(gè)個(gè)熬數(shù)成對(duì)稱。捌g。背select百 矮avg矮(

40、暗sal哎)翱 捌from罷 扳(敗 唉-找到中間位位埃置的sal值案 把select敖敖 e凹.耙sal絆 絆from扮 empInf傲傲o e叭,胺 empInf按按o d奧 暗group吧 壩by哎 e疤.擺sal柏?cái)[ 哀having背背 癌sum吧(拜奧傲爸case背 傲when澳 e爸.佰sal 芭=安 d矮.奧sal 唉then爸 1 斑else捌 0 傲end癌j。扳巴扳 佰)=柏 班abs扳扳(隘sum扮(胺sign敖(吧e暗.霸sal 斑-扒 d哀.哀sal跋)八-end a敖敖bs奧叭e。)t襖根據(jù)第一個(gè)自聯(lián)半接表表EMP計(jì)算辦中間數(shù),而該表表叭返回了所有工資資壩的笛卡兒積

41、(G跋跋ROUP BY靶靶百 E.SAL會(huì)會(huì)版去掉重復(fù)值)。板板HAVING子子拜句使用函數(shù)SU骯骯M計(jì)算E.SA跋跋L等于D.SA俺俺L的次數(shù);如果果白這個(gè)值大于等于于皚E.SAL且大大敗于D.SAL次次暗數(shù),那么該行就就皚是中間數(shù)。在S氨氨ELECT列表表襖中加入SUM就就搬可以觀察到這種種岸情況:叭z。跋select瓣 半avg白(柏sal板)礙 按from疤 襖(稗 胺-找到中間位位頒置的sal值艾 背select伴伴 e絆.奧sal跋,柏count藹(搬e艾.拌sal八)襖 ncount版版,柏x。氨百sum阿(癌case靶 拌when百 e霸.案sal 啊=傲 d版.哀sal 板t

42、hen霸 1 啊else懊 0 昂end八)凹 sum0瓣,按h。柏敖abs辦(盎sum按按(啊sign柏(疤e柏.半sal 氨-搬 d辦.柏sal岸)矮 搬)跋 abs0皚e。般 搬from敗 empInf埃埃o e芭,笆 empInf按按o d埃 懊group邦 搬by熬 e吧.版sal挨隘 鞍having擺擺 拜sum般(哎巴霸白case扒 盎when拜 e壩.跋sal 捌=霸 d跋.芭sal 柏then瓣 1 版else挨 0 白end骯3。敖挨癌 拔)=捌 疤abs襖襖(隘sum稗(靶sign扒(礙e爸.癌sal 擺-矮 d扳.昂sal哀)霸-end a奧奧bs昂T。)t半800罷挨

43、佰7瓣瓣傲1傲暗6罷1100敗板7罷氨1鞍敖4伴1500凹邦7斑挨1佰把2半2200半跋7板邦1邦扒0暗2500礙絆7啊芭1哀安2昂2750礙哎7哀皚1翱白4瓣3000擺懊7拌瓣1案邦6啊2唉.DB2昂,Oracle笆笆 擺數(shù)據(jù)庫擺使用窗口函數(shù)C捌OUNT(*)板 OVER和R辦辦OW_NUMB奧奧ER,查找中間間伴數(shù):凹a。拌select罷 敗avg癌(sal) 矮from啊(矮-通過分析函斑數(shù)為為查詢添加3八列:啊total癌,half,x背背h版 盎select半 sal,拜 礙count霸(*) ove懊懊r() 阿total拔, 哀 flo百百or(瓣count罷(*) ove唉唉r

44、()/拜2半) 百half把,疤 row罷罷_number啊啊() over笆笆(骯order伴 拌by百 sal) 奧xh佰 扳from礙 empInf把把o拔)熬where啊 (盎mod般(total,啊啊2胺)=八0板 隘and礙 xh 凹in耙(half,h按按alf+懊1岸)凹扳偶數(shù)行,取中間間辦兩行的值半 矮or拔 (扒mod啊(total,安安2礙)=辦1挨 柏and吧 xh=hal靶靶f+隘1伴)柏 辦熬奇數(shù)行,取中間間瓣行的值傲執(zhí)行結(jié)果:跋2。扳2昂000昂=(笆1500疤+伴2500哀)/2昂3.笆Oracle礙礙數(shù)據(jù)庫艾使用函數(shù)巴MEDIAN稗(Oracle昂昂 Data

45、ba班班se 跋10g八)或頒PERCENT懊懊ILE_CON敖敖T岸(Oracle唉唉9i 哎及以上版本拔):瓣Q。疤-使用于啊Oracle壩10g邦 絆及以上版本傲select奧 癌median艾(sal) 爸 搬from瓣 empInf唉唉o 疤J。頒-使用于稗Oracle9絆絆i 艾及以上版本鞍 盎select敖 翱percent背背ile_con艾艾t稗(盎0.5氨)背 礙 withi白白n 霸group耙(暗order版 氨by俺 sal) 盎 拌from板 empInf敗敗o 拜t。辦說明:盎對(duì)于Oracl澳澳e8i Dat傲傲abase,使使半用DB2解決方方般案。對(duì)于Ora稗

46、稗cle8i D澳澳atabase阿阿之前的版本,可可按以采用Post癌癌greSQL/襖MySQL解決決暗方案。壩v。擺4.哀SQL Ser襖襖ver板 數(shù)據(jù)庫敖(sqlser阿阿ver2005佰佰以上版本)哀1。懊使用窗口函數(shù)C哎OUNT(*)挨 OVER和R藹藹OW_NUMB背背ER,可得到中中拌間數(shù):叭j。-創(chuàng)建數(shù)據(jù)表翱create疤 瓣table百 empInf巴巴o(百 罷name奧 笆varchar頒頒(壩20巴),熬 sal 俺int)熬-向表插入數(shù)翱據(jù)拜insert拌 稗into襖 empInf癌癌o 班values隘(靶王宏岸,懊800爸);百Q(mào)。襖insert半 扮int

47、o捌 empInf按按o 案values凹(襖留心會(huì)邦,癌1100癌);叭t。澳insert案 八into癌 empInf熬熬o 板values白(氨張三瓣,吧1500版);芭h。傲insert熬 版into罷 empInf靶靶o 礙values扳(伴李薇霞翱,般3000班);耙t。百insert班 埃into擺 empInf搬搬o 拌values艾(哀大大村版,昂2500白);骯w。靶insert敖 爸into扳 empInf辦辦o 霸values八(伴楊偉柏,拌2750板);爸h。笆insert壩 皚into笆 empInf跋跋o 佰values敖(擺華陽壩,盎2200拌);吧v。-查詢挨

48、select柏 藹*背 跋from百 empInf扒扒o 壩order絆 案by邦 sal熬n。王宏800白留心會(huì)捌瓣1100拔張三奧俺藹1500熬華陽擺盎壩2200岸大大村扳隘2500俺楊偉骯翱哀2750按李薇霞拔氨3000-獲得中位數(shù)稗select辦 敖avg盎(爸sal暗)瓣 凹from翱(胺 氨select襖襖 sal把,鞍 背count八(*)癌 敖over耙()罷 total岸,百 搬 藹floor瓣(拜count案(*)凹 襖over熬()/艾2癌)耙 half霸,疤 row絆_number邦邦()癌 巴over白(俺order哀 巴by板 sal敗)藹 xh疤s。爸 百from

49、搬 empInf疤疤o) t伴where矮 隘(捌捌xh 唉%捌2般=扒0 把a(bǔ)nd辦 xh 辦in(八half矮,昂half白+鞍1按)挨-偶數(shù)行,取取皚中間兩行的值版M。懊 敖or拔拔 哀(扳xh 扮%把 2耙=拔1 搬and把 xh矮=壩half八+壩1昂)昂 阿-數(shù)行,取中中班間行的值敗w。佰三、各種方案總澳結(jié)瓣1.佰DB2和SQL唉唉 Server哀哀 解決方案的唯唯瓣一差別是語法的的班稍許不同:SQ爸爸L Serve翱翱r用哀“拌%吧”胺求模,而DB2唉唉和Oracle唉唉使用MOD函數(shù)數(shù)岸;其余的都相同同矮。埃S。百2.搬內(nèi)聯(lián)視圖X返回回扮三個(gè)不同的計(jì)數(shù)數(shù)背值,TOTAL壩壩和h

50、alf辦T,還用到由R板板OW_NUMB邦邦ER生成的RN襖襖。這些附加列有有矮助于求解中間數(shù)數(shù)伴。檢驗(yàn)內(nèi)聯(lián)視圖圖背X的結(jié)果集,就就爸會(huì)看到這些列表表礙示的意義:巴G。版背3.癌根據(jù)第一個(gè)自聯(lián)聯(lián)佰接表EMP計(jì)算算拜中間數(shù),而該表表胺返回了所有工資資班的笛卡兒積(G霸霸ROUP BY凹凹拜 E.SAL會(huì)會(huì)搬去掉重復(fù)值)。白白HAVING子子扳句使用函數(shù)SU扮扮M計(jì)算E.SA澳澳L等于D.SA笆笆L的次數(shù);如果果按這個(gè)值大于等于于矮E.SAL且大大岸于D.SAL次次巴數(shù),那么該行就就按是中間數(shù)。在S挨挨ELECT列表表扮中加入SUM就就拜可以觀察到這種種阿情況:捌u。盎 安-找到中間位位哀置的sa

51、l值拜 疤select拌拌 e背.白sal白,鞍count昂(伴e盎.絆sal拔)氨 ncount拌拌,版x。盎盎sum暗(半case敖 艾when隘 e扮.罷sal 案=百 d懊.阿sal 按then霸 1 板e(cuò)lse艾 0 鞍end礙)叭 sum0柏,傲x。啊鞍abs埃(瓣sum翱翱(骯sign百(絆e俺.翱sal 搬-辦 d罷.拔sal叭)稗 叭)瓣 abs0板M。霸 壩from耙 empInf疤疤o e巴,辦 empInf岸岸o d唉 懊group案 辦by壩 e八.笆sal骯Oracle氨在Oracle昂 Databa昂昂se 擺10g百或Oracle柏柏9i Data昂昂base中

52、,可可藹以使用Orac叭叭le提供的函數(shù)數(shù)凹計(jì)算中間數(shù);對(duì)對(duì)爸于Oracle胺胺8i Data百百base,可以以八采用DB2解決決耙方案;其他版本本岸只能采用通用求求搬中位數(shù)的捌解決方案。顯然然壩可以用疤MEDIAN瓣函數(shù)計(jì)算中間值值奧,用隘PERCENT懊懊ILE_CON艾艾T胺函數(shù)也可以計(jì)算算般中間值就不那么么艾顯而易見了。傳傳版遞給PERCE翱翱NTILE_C昂昂ONT的值0.翱翱5是一個(gè)百分比比唉值。子句WIT暗暗HIN GRO拜拜UP (ORD盎盎ER BY S俺俺AL)確定PE斑斑RCENTIL跋跋E_CONT要要辦搜索哪些有序行行昂(記住,中間值值叭就是一組已排序序挨值的中間值

53、)。安安返回的值就是搜搜胺索的有序行中符符背合給定百分比(骯骯在這個(gè)例子中是是霸0.5,因?yàn)槠淦浒羶蓚€(gè)邊界值分別別罷為0和1)的值值拔。扳y。斑總之,通用解決鞍方案案適用于各種笆版本各種類型的的柏?cái)?shù)據(jù)庫,但效率率熬較低;挨K。拜Oracle 拔提供供了響應(yīng)的函耙數(shù),但對(duì)版本要要埃求較高;Sql頒頒server和和般Oracle 阿一樣,對(duì)版本有有班要求。暗v。計(jì)算眾數(shù)的方法一、準(zhǔn)備數(shù)據(jù)俺select柏 絆*邦 藹from昂 tb扮張三絆柏語文斑疤疤74懊張三巴艾數(shù)學(xué)扳敗敗83隘張三扮俺物理板癌癌93熬李四捌耙語文辦半半74昂李四扳懊數(shù)學(xué)白佰佰84靶劉洋翱巴語文巴板板81叭劉洋邦把數(shù)學(xué)敖敗敗82

54、埃劉洋骯疤物理啊拔拔86捌二、霸求眾數(shù)的一般方方懊法:敗-首先構(gòu)造C奧TE翱with跋 tbGrou爸爸p 傲as隘 爸(辦select稗 xm胺,氨count阿(*)罷 total 板from敖 tb 頒group叭 盎by叭 xm敖)礙D。暗-找出具有最暗大值值的所有記錄敗(即眾數(shù))方案1:半select澳 盎*傲 半from把 tbGrou襖襖p阿where俺 total哀=(案扮select矮 安max霸(扒total胺)板 襖from澳 tbGrou背背p絆 版芭求各組內(nèi)的最大大矮值哀f。)顯示結(jié)果:劉洋3張三3方案2:瓣select背 佰*吧 版from礙 般(佰拜select絆

55、xm扮,案total笆,稗dense_r骯骯ank昂()巴 八over斑(凹o(jì)rder壩 傲by襖 total 挨desc阿)拜 mc 澳from邦 tbGrou案案p礙Y。)t挨where笆 mc班班=襖1顯示結(jié)果:劉洋31張三31巴即該組數(shù)中有邦2靶個(gè)個(gè)眾數(shù)骯。氨注意皚:胺一組數(shù)可能沒有有擺眾數(shù)!氨此時(shí)CTE將返返斑回空集!把6。翱查詢出連續(xù)的記白錄板有一個(gè)表結(jié)構(gòu),阿fphm,ks唉唉hm扮,搬其記錄如下:2014,2014,2014,2014,2014,2014,2014,2014,2013,2013,2013,2013,2013,癌(頒第二個(gè)字段內(nèi)可笆能是是連續(xù)的數(shù)據(jù)擺,可能存在斷點(diǎn)點(diǎn)

56、熬。敖)皚要求查詢出連續(xù)芭的記記錄來。就像邦下面的這樣?2014,2014,2013,2013,安SELECT把 b.fphm澳澳, MIN (邦b.kshm)按 Start_壩HM, MAX靶靶 (b.ksh疤疤m) End_傲HM辦m。FROM (伴SELECT 般a.*, TO俺_NUMBER昂昂 擺(岸a.kshm 盎- ROWNU柏柏M唉) cc伴l。哀FROM (S昂ELECT *艾 FROM t芭芭 笆ORDER B擺擺Y白 fphm, 唉kshm) a唉唉0。) b搬GROUP B佰Y皚皚 b.fphm瓣瓣, b.cc案SELECT 翱b.fphm,襖襖 MIN (b澳澳.ks

57、hm) 伴Start_H襖襖M, MAX 挨(b.kshm扮扮) End_H按按M背Q。FROM (阿疤矮SELECT 版a.*, TO八_NUMBER斑斑 (a.ksh捌捌m - ROW挨挨NUM) cc霸霸 班皚FROM (板V。隘癌爸敖SELECT 罷* FROM 哀t 鞍ORDER B唉唉Y搬 fphm, 擺kshm扮x。) a) b熬哀GROUP B柏Y b.fph暗m, b.cc昂FPHM ST瓣ART_HM 白END_HM斑-柏- -笆- -傲-2013 2013 2014 2014 俺/隘/敖/絆/胺/靶/俺/傲/案/頒/癌/班/百/耙/搬i。擺查詢所有物品的盎最后后出庫時(shí)間阿

58、物品擺 敖出庫時(shí)時(shí)間疤 a 瓣 敗2005-3-把4癌a 皚 絆2005-12辦辦-3阿a 佰 巴2006-10把把-8鞍a 拌 皚2007-5-昂1搬b 邦 翱2006-1-敖1跋b 扮 胺2006-10唉唉-2鞍b 擺 擺2007-6-邦24挨c 跋 靶2006-12芭芭-2哎c 隘 白2007-3-斑8艾-頒-隘-柏-要求結(jié)果斑物品鞍 敗最后后出庫時(shí)間罷a 暗 頒頒2007-5-罷1絆b 埃 胺胺2007-6-岸24凹c 半 伴伴2007-3-翱8敖 啊select 霸mc,max(伴rq) fro按按m SQLnu俺俺mber gr拔拔oup by 凹mc板y。伴select 耙* f

59、rom 按SQLnumb白白er as a邦邦 鞍叭where e般xists (壩懊伴select 芭top 1 *唉 from S佰佰QLnumbe擺擺r as b 按where b扒扒.mc=a.m扮扮c order哎哎 by rq 扳desc笆Z。)疤select 懊* from 凹table埃 as a e阿阿xits (s隘隘elect t爸爸op 1 * 斑from t八八able a般般s b whe拌拌re b.耙耙靶物品敖=a.氨物品扳 order敗敗 by 版出庫時(shí)間爸 desc)按X。巴農(nóng)歷】計(jì)算方法扳- (陽歷稗轉(zhuǎn)陰歷) 背因?yàn)檗r(nóng)歷的日期斑,是是由天文學(xué)家礙推算出來的

60、,到到扳現(xiàn)在只有到20耙耙49年的,以后后耙的有了還可以加加板入!首先建一表表哎,放初始化資料料頒l。扒1.創(chuàng)建表癌CREATE 埃TABLE S擺擺olarDat疤疤a巴(柏敖 yearId安安 int no伴伴t null,拌拌跋 data c矮矮har(7) 霸not nul皚皚l,版敖 dataIn阿阿t int n佰佰ot null翱翱)俺p。2.插入數(shù)據(jù)INSERT INTO SolarData SELECT 1900,0 x04bd8,19416 UNION ALL SELECT 1901,0 x04ae0,19168UNION ALL SELECT 1902,0 x0a570,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論