




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
外部臨時表通過SQL語句創(chuàng)建,我們可以使用。首先,你要知道臨時表的創(chuàng)建語法結(jié)CREATETEMPORARYTABLE表(字段名字段類型跟普通表相比,臨時表有3個不同的特征臨時表的創(chuàng)建語法需要用到關(guān)鍵字臨時表創(chuàng)建完成之后,只有當(dāng)前連接可見,其他連接是看不到的,具有連接性臨時表在當(dāng)前連接結(jié)束之后,會被自動刪因為臨時表有連接性,不同連接創(chuàng)建相同名稱的臨時表也不會產(chǎn)生,適合并發(fā)程殘留在數(shù)據(jù)庫中。因此,我們就可以利用這些特點,用臨時表來SQL查詢的中間結(jié)剛剛提到,臨時表可以簡化復(fù)雜查詢,具體是怎么實現(xiàn)的呢?我來介紹一舉個例子,超市經(jīng)營者想要查詢2020年12月的一些特定商品銷售數(shù)量、進貨數(shù)量、返廠數(shù)量,那么,我們就要先把銷售、進貨、返廠這3個模塊分開計算,用臨時表來中間首先,我們統(tǒng)計一下在2020年12月的商品銷售數(shù)據(jù)假設(shè)我們的銷售流水表(mysales)如下所示我們可以用下面的SQL語句,查詢出每個單品的銷售數(shù)量和銷售金額,并存入臨時代代123456789mysql>CREATETEMPORARYTABLE->->--用查詢的結(jié)果直接生->ty)->SUM(salesvalue)AS->->->GROUPBY->ORDERBYQueryOK,2rowsaffected(0.01Records:2Duplicates:0Warnings:mysql>SELECT*FROM++++|itemnumberTY|salesvalue++++|1|5.000|411.18|2|5.000|24.75++++2rowsinset(0.01需要注意的是,這里我是直接用查詢結(jié)果來創(chuàng)建的臨時表。因為創(chuàng)建臨時表就是為了存放某個查詢的中間結(jié)果。直接用查詢語句創(chuàng)建臨時表比較快捷,而且連接結(jié)束后臨時表就會被自動刪除,不需要過多考慮表的結(jié)構(gòu)設(shè)計問題(比如冗余、效率等)。到這里,我們就有了一個單品銷售統(tǒng)計的臨時表。接下來,我們計算一下2020年月的進貨信息我們的進貨數(shù)據(jù)包括進貨單頭表(imorhead)和進貨單明細表(imordetails)。進貨單頭表包括進貨單編號、供貨商編號、倉庫編號、操作員編號和驗收日期:進貨單明細表包括進貨單編號、商品編號、進貨數(shù)量、進貨價格和進貨金我們用下面的SQL語句計算進貨數(shù)據(jù),并且保存在臨時表里1mysql>CREATETEMPORARYTABLE223456789->SELECTty)ty,SUM(b.importvalue)AS->FROMdemo.importheadaJOINdemo.importdetails->ON->GROUPBYQueryOK,3rowsaffected(0.01sec)Records:3Duplicates:0Warnings:mysql>SELECT*FROM++++|itemnumberty|importvalue++++|1|5.000|290.00|2|5.000|15.00|3|8.000|40.00++++3rowsinset(0.00這樣,我們又得到了一個臨時表demo.myimport,里面保存了我們需要的進貨數(shù)據(jù)。我們的返廠數(shù)據(jù)表有2個,分別是返廠單頭表(returnhead)和返廠單明細(returndetails)返廠單頭表包括返廠單編號、供貨商編號、倉庫編號、操作員編號和驗收日返廠單明細表包括返廠單編號、商品編號、返廠數(shù)量、返廠價格和返廠金我們可以使用下面的SQL語句計算返廠信息,并且保存到臨時表代代123456789mysql>CREATETEMPORARYTABLE->SELECTty)ty,SUM(b.returnvalue)AS->FROMdemo.returnheadaJOINdemo.returndetails->ON->GROUPBYQueryOK,3rowsaffected(0.01Records:3Duplicates:0Warnings:mysql>SELECT*FROM++++|itemnumberty|returnvalue++++|1|2.000|115.00|2|1.000|3.00|3|1.000|5.00++++3rowsinset(0.00這樣,我們就獲得了單品的返廠信如果你跟著實際操作的話,你可能會有這樣一個問題:我們現(xiàn)在有3個臨時表,分別單品的銷售信息、進貨信息和返廠信息。那么,能不能把這3個表相互關(guān)聯(lián)起來信息都匯總到對應(yīng)的單品呢答案是不行,不管是用內(nèi)連接、還是用外連接,都不可以。因為無論是銷售信息、進貨信息,還是返廠信息,都存在商品信息缺失的情況。換句話說,就是在指定時間段內(nèi),某些商品可能沒有銷售,某些商品可能沒有進貨,某些商品可能沒有返廠。如果僅僅通過這3個表之間的連接進行查詢,我們可能會丟失某些數(shù)據(jù)。為了解決這個問題,我們可以引入商品信息表。因為商品信息表包含所有的商品,因此,把商品信息表放在左邊,與其他的表進行左連接,就可以確保所有的商品都包含在結(jié)果集中。凡是不存在的數(shù)值,都設(shè)置為0,然后再篩選一下,把銷售、進貨、返廠都是0的商品去掉,這樣就能得到我們最終希望的查詢結(jié)果:2020年12月的商品銷售數(shù)量、進貨數(shù)量和返廠數(shù)量。代碼如下所示mysql>->->-> ty,0)as --如果沒有銷售記錄,銷售數(shù)量設(shè)置為-> ty,0)as --如果沒有進貨,進貨數(shù)量設(shè)為-> ty,0)as --如果沒有返廠,返廠數(shù)量設(shè)為->->demo.goodsmaster --商品信息表放在左邊進行左連接,確保->LEFTJOINdemo.mysales->ON->LEFTJOINdemo.myimport->ON->LEFTJOINdemo.myreturn->ON->HAVING ty>0OR ty>0OR ty>0;--在結(jié)果集16 17|itemnumber|goodsname| ty| ty| ty18 19|1|書|5.000|5.000|2.00020|2|筆|5.000|5.000|1.00021|3|橡皮|0.000|8.000|1.00022 233rowsinset(0.00總之,通過臨時表,我們就可以把一個復(fù)雜的問題拆分成很多個前后關(guān)聯(lián)的步驟,把中間的運行結(jié)果起來,用于之后的查詢。這樣一來,就把面向集合的SL查詢變成了面向過程的編程模式,大大降低了難度。由于采用的方式不同,臨時表也可分為內(nèi)存臨時表和磁盤臨時表,它們有著各自的優(yōu)關(guān)于內(nèi)存臨時表,有一點你要注意的是,你可以通過指定引擎類型(比ENGINE=MEMORY),來告訴MySQL臨時表在內(nèi)存中好了,現(xiàn)在我們先來創(chuàng)建一個內(nèi)存中的臨mysql>CREATETEMPORARYTABLE->->itemnumber->groupnumber->branchnumber->)ENGINE=MEMORY;(臨時表數(shù)據(jù)存在內(nèi)存中QueryOK,0rowsaffected(0.00指定引擎,MySQL會默認引擎是InnoDB,并且把表存放在磁盤上。mysql>CREATETEMPORARYTABLE->->itemnumber->groupnumber->branchnumber->QueryOK,0rowsaffected(0.00現(xiàn)在,我們向剛剛的兩張表里都插入同樣數(shù)量的記錄,然后再分別做一個查1123456789mysql>SELECTCOUNT(*)FROM代++|count(*) |4355++1rowinset(0.00mysql>SELECTCOUNT(*)FROM++|count(*)+|4355+++1rowinset(0.21可以看到,區(qū)別是比較明顯的。對于同一條查詢,內(nèi)存中的臨時表執(zhí)行時間不到10毫秒,而磁盤上的表卻用掉了210毫秒。顯然,內(nèi)存中的臨時表查詢速度更快。不過,內(nèi)存中的臨時表也有缺陷。因為數(shù)據(jù)完全在內(nèi)存中,所以,一旦斷電,數(shù)據(jù)就我畫了一張圖,匯總了內(nèi)存臨時表和磁盤臨時表的優(yōu)缺這節(jié)課,我們學(xué)習(xí)了臨時表的概念,以及使用臨時表來中間結(jié)果以拆分復(fù)雜查詢的方法。臨時表可以在磁盤中,也可以通過指定引擎的辦法在內(nèi)存中,以加快存取速其實,臨時表有很多好處,除了可以幫助我們把復(fù)雜的SQL查詢拆分成多個簡單的查詢,而且,因為臨時表是連接的,不同的連接可以使用相同的臨時表名稱,相互間不會受到影響。除此之外,臨時表會在連接結(jié)束的時候自動刪除,不會占用磁盤空當(dāng)然,臨時表也有不足,比如會擠占空間。我建議你,在使用臨時表的時候,要從簡化查詢和
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省連云港市海州區(qū)2024-2025學(xué)年七年級上學(xué)期期末生物學(xué)試題(含答案)
- 水處理技術(shù)開發(fā)合同
- 人工智能金融風(fēng)險評估與控制手冊
- 生物學(xué)基因工程研究熱點練習(xí)題集編選
- 股份制公司運營指南
- 航空模型制造安全責(zé)任協(xié)議
- 高分子化學(xué)材料性質(zhì)題庫
- 語言學(xué)語言應(yīng)用知識問答
- 高中英語閱讀技巧課:如何快速找到文章主旨與細節(jié)教案
- 餐飲行業(yè)市場份額分析表
- GB/T 20972.2-2025石油天然氣工業(yè)油氣開采中用于含硫化氫環(huán)境的材料第2部分:抗開裂碳鋼、低合金鋼和鑄鐵
- 美團供應(yīng)鏈管理案例分析
- 《鈉離子電池產(chǎn)業(yè)發(fā)展白皮書》
- 深圳市一模+Z20名校聯(lián)盟+浙江名校協(xié)作體高三語文2月聯(lián)考作文題目解析及相關(guān)范文
- 2025中考作文預(yù)測
- 油氣田開發(fā)專業(yè)危害因素辨識與風(fēng)險防控
- 2025年浙江省衢州市常山糧食收儲有限責(zé)任公司招聘筆試參考題庫附帶答案詳解
- 假肢安裝合同范本
- 《重大基礎(chǔ)設(shè)施項目涉及風(fēng)景名勝區(qū)選址論證報告編制技術(shù)規(guī)范》編制說明
- 2025年浙江省寧波市外事服務(wù)中心招聘2人歷年高頻重點提升(共500題)附帶答案詳解
- 《工程制圖》題庫(含答案)
評論
0/150
提交評論