久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

SQL的常見錯(cuò)誤有哪些

本篇內(nèi)容主要講解“SQL的常見錯(cuò)誤有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“SQL的常見錯(cuò)誤有哪些”吧!

成都創(chuàng)新互聯(lián)公司主營葫蘆島網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā)公司,葫蘆島h5重慶小程序開發(fā)搭建,葫蘆島網(wǎng)站營銷推廣歡迎葫蘆島等地區(qū)企業(yè)咨詢

1. Queries語句的執(zhí)行順序

SQL的常見錯(cuò)誤有哪些

SQL的入門門檻很低。很多人認(rèn)為會(huì)使用Join, Group By 語句就可以自詡專家了。但是“磚家”們真的知道SQL語句的執(zhí)行順序嗎?

SQL查詢不是以SELECT開始的,雖然我們編寫代碼時(shí),它們在編輯器中是從Select開始編寫的,但是實(shí)際執(zhí)行卻并不是從SELECT開始的。

數(shù)據(jù)庫首先使用FROM和JOIN執(zhí)行查詢,這就是為什么我們可以在WHERE中使用合并表中的值。

為什么我們不能在WHERE語句中篩選分組(GROUP BY) 的結(jié)果?因?yàn)镚ROUP  BY在WHERE之后才會(huì)被執(zhí)行。因此,我們需要通過HAVING進(jìn)行更進(jìn)一步的條件篩選。

常規(guī)情況下,SELECT是最后執(zhí)行語句。它決定了查詢結(jié)果需要輸出哪些列,并進(jìn)行何種聚合運(yùn)算。此外,WINDOW FUNCTION 在這一步被執(zhí)行。

這就是為什么當(dāng)我們嘗試在WHERE中篩選WINDOW FUNCTION的結(jié)果時(shí)會(huì)出現(xiàn)錯(cuò)誤。

注意:數(shù)據(jù)庫使用查詢優(yōu)化器來優(yōu)化查詢語句執(zhí)行。優(yōu)化器可能會(huì)更改某些操作的順序,以便查詢運(yùn)行得更快。以上的介紹是正對常見情況下,對SQL執(zhí)行幕后所發(fā)生事情的籠統(tǒng)的概述。

2. WINDOW FUNCTION 是做什么的?

SQL的常見錯(cuò)誤有哪些

很多人第一次遇到WINDOW FUNCTION時(shí)都覺得它似乎很神秘。為什么使用Window function作為分組可以聚合數(shù)據(jù)?

Window Function (WF) 通過特定語句簡化了許多操作步驟以方便語句運(yùn)行:

  • WF允許直接訪問當(dāng)前記錄前后的數(shù)據(jù)。參見LEAD和LAG函數(shù)。

  • WF可以使用GROUP BY對已經(jīng)聚合的數(shù)據(jù)執(zhí)行額外的聚合。見上圖中的示例:使用WF計(jì)算移動(dòng)累計(jì)銷售額。

  • ROW_NUMBER 可以遍歷每一行。還可以用來刪除重復(fù)的記錄。或者取一個(gè)隨機(jī)樣本。

  • 顧名思義,WF可以計(jì)算給定窗口的統(tǒng)計(jì)信息:

SQL的常見錯(cuò)誤有哪些

上面的WF計(jì)算的就是從第一個(gè)記錄到當(dāng)前記錄的累計(jì)總和。

Window Function值得你去專門花時(shí)間學(xué)習(xí)一下基本原理,不然很可能會(huì)把查詢語句寫得過于復(fù)雜以至于程序報(bào)錯(cuò)。

3. 利用CASE WHEN 計(jì)算平均值

SQL的常見錯(cuò)誤有哪些

CASE  WHEN類似于編程語言中的IF條件語句。當(dāng)我們需要對數(shù)據(jù)的某個(gè)子集計(jì)算統(tǒng)計(jì)信息時(shí),它的作用就顯現(xiàn)出來了。

上面的代碼計(jì)算了在美國銷售的產(chǎn)品的平均價(jià)格,但是這段代碼有一點(diǎn)小問題,也就是對于Else的編寫是有問題的。

在第一個(gè)個(gè)語句中,這段代碼將所有非美國產(chǎn)品價(jià)格設(shè)為0,這降低了總體平均價(jià)格。如果有很多非美國產(chǎn)品,平均價(jià)格可能接近于0。

SQL的常見錯(cuò)誤有哪些

在第二個(gè)例子中,它只計(jì)算了在美國銷售的產(chǎn)品的平均價(jià)格,這才是我需要的結(jié)果。請注意在這里使用CASE時(shí)不需要包括ELSE,因?yàn)樗J(rèn)為NULL。

SQL的常見錯(cuò)誤有哪些

請注意在使用CASE語句時(shí),一定要小心使用“else 0”。它對SUM沒有任何影響,但是會(huì)對AVG平均計(jì)算產(chǎn)生巨大影響。

4. 對存在缺失值的列執(zhí)行JOIN語句

SQL的常見錯(cuò)誤有哪些

SQL中有4種不同的JOIN: Inner,  Outer, Left和Right。當(dāng)我們在查詢中使用JOIN時(shí),它默認(rèn)為INNER JOIN。

雖然我對JOIN有一些研究學(xué)習(xí),但是我還是會(huì)犯一些小錯(cuò)誤。

如上圖所示執(zhí)行JOIN語句,結(jié)果顯示許多記錄都丟失了。為什么會(huì)這樣?明明是很簡單的JOIN語句。

真是的原因其實(shí)是表1和表2中string_field列存在許多NULL值。通常人們會(huì)認(rèn)為JOIN會(huì)保留NULL的記錄因?yàn)镹ULL等于NULL,難道不是嗎?

然后我運(yùn)行如下語句:

SQL的常見錯(cuò)誤有哪些

結(jié)果返回的是NULL。

對于這種情況,為了不丟失有NULL的記錄,解決方法應(yīng)該是利用COALESCE,將string_field中的NULL轉(zhuǎn)換為空字符串。

SQL的常見錯(cuò)誤有哪些

但需要注意的是,這樣做會(huì)將表1中每個(gè)包含NULL的記錄與表2中每個(gè)包含NULL的記錄全部匹配起來。

通過使用ROW_NUMBER() 的 WINDOW FUNCTION,我們可以移除這些重復(fù)的匹配:

  • 假設(shè)該數(shù)據(jù)表對每一行都有唯一的標(biāo)識(shí)符“某某某ID”和一個(gè)時(shí)間戳字段。

  • 只需保留每個(gè)標(biāo)識(shí)符的第一行,這樣就可以刪除重復(fù)項(xiàng)。

SQL的常見錯(cuò)誤有哪些

5. 對于復(fù)雜的查詢語句不會(huì)使用臨時(shí)表

SQL的常見錯(cuò)誤有哪些

SQL另外一大優(yōu)點(diǎn)就是能夠調(diào)試糾錯(cuò)。

我們可以拆分復(fù)雜的查詢語句并創(chuàng)建多個(gè)臨時(shí)表。然后可以對這些表運(yùn)行“完整性檢查”,以確保它們包含正確的記錄。在設(shè)計(jì)一個(gè)全新且重要的查詢或報(bào)告時(shí),強(qiáng)烈推薦使用這種方法。

SQL的常見錯(cuò)誤有哪些

臨時(shí)表的唯一缺點(diǎn)是數(shù)據(jù)庫中的查詢優(yōu)化器無法優(yōu)化該查詢。

當(dāng)需要保證執(zhí)行效率時(shí),可以將創(chuàng)建臨時(shí)表的語句用with語句重新定義、查詢。

SQL的常見錯(cuò)誤有哪些

到此,相信大家對“SQL的常見錯(cuò)誤有哪些”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享名稱:SQL的常見錯(cuò)誤有哪些
本文路徑:http://sd-ha.com/article2/ihecoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司網(wǎng)站收錄、App開發(fā)、App設(shè)計(jì)、搜索引擎優(yōu)化、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)