九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
SQL簡單查詢

我們使用SQL的主要目的,還是為了查詢,也就是從表中取出我們想要的數(shù)據(jù)。因此,查詢語句的使用是重中之重,也是學(xué)習(xí)SQL的重點(diǎn)。

1 運(yùn)算符


選取null記錄

什么是null值呢?就是缺失的值,也就是表中缺失的數(shù)據(jù)。比如我們往表格中插入數(shù)據(jù)時(shí),可能會發(fā)生遺漏,可以用下面的語句來查詢?nèi)笔?shù)據(jù):

where 列名 is null;

注意這里不能寫為 = null ,如果要查詢非缺失數(shù)據(jù),使用下列語句:

where 列名 is not null;

表示否定

可以用<>或者!=來表示不等的條件,除此之外,還有not運(yùn)算符,使用范圍更廣。舉個例子,登錄數(shù)據(jù)庫shell,現(xiàn)在我們要從cargo表中選出銷售價(jià)格大于10000的商品:

如果我們又想選擇售價(jià)小于10000的商品,可以用not運(yùn)算符:

這個查詢條件跟我們使用where sale_price < 10000 語句是等價(jià)的。

除此之外,還有 、-、*、/、and、or等運(yùn)算符,由于比較簡單易懂,就不一一介紹了。

2 聚合


聚合函數(shù)

什么是聚合函數(shù)?簡單的說,就是需要把數(shù)據(jù)合起來計(jì)算而產(chǎn)生的一系列函數(shù),常用的有以下幾個:

count:計(jì)算表中的行數(shù)

sum:計(jì)算數(shù)據(jù)的合計(jì)值(列)

avg:計(jì)算數(shù)據(jù)的平均值(列)

max:計(jì)算數(shù)據(jù)的最大值(列)

min:計(jì)算數(shù)據(jù)的最小值(列)

我們來看幾個例子,首先是count計(jì)算行數(shù):

當(dāng)count后跟列名時(shí),會返回列中非null值的行;若以count(*)(*號代表所有列)進(jìn)行查找,則會返回所有行,包括null值所在的行。

再來看看合計(jì)值sum:

這里我們選取了售價(jià)和成本兩列,進(jìn)行求和操作。在計(jì)算過程中,自動忽略null值,只進(jìn)行非null值的計(jì)算。

均值avg:

最大值和最小值:

計(jì)算商品的種類:

我們經(jīng)常會計(jì)算品類的數(shù)量,這是可在count函數(shù)中嵌套一個distinct關(guān)鍵字即可。

如上圖,我們在去除重復(fù)類型和未去重之間進(jìn)行對比。其他的任何聚合函數(shù)都可以使用distinct來達(dá)到去重的效果。

group by子句

group by,顧名思義,就是按表的一列或各列進(jìn)行分組,也可以看成對數(shù)據(jù)進(jìn)行排序后的行切割。舉個例子,我們想要知道cargo表中商品所有類型的數(shù)量,思路是先將商品按類型分組,再對各個組進(jìn)行count計(jì)數(shù)。對應(yīng)語句如下:

如果group by后的列有null值,也會參與分組,并且會顯示出null值的數(shù)量。

現(xiàn)在我們又想知道在電腦類別下,不同價(jià)位的機(jī)器有多少個,可以插入where子句進(jìn)行過濾:

如圖,當(dāng)有where子句出現(xiàn)時(shí),會先進(jìn)行過濾,然后對過濾后的數(shù)據(jù)進(jìn)行分組。

在使用group by子句時(shí),有幾點(diǎn)需要注意:

  1. 在select子句中只可以寫常數(shù)、聚合函數(shù)以及group by后指定的聚合列。但我們看到上圖中也有type列,是的,只有MySQL是支持這種寫法的。其他的RDBMS并不支持。

  2. group by子句中不可以寫列的別名,原因跟SQL語句的執(zhí)行順序有關(guān)。我們的書寫順序是select→from→where→group by,但執(zhí)行順序卻是from→where→group by→select,因?yàn)間roup by先于select執(zhí)行,所以你使用別名時(shí),系統(tǒng)并不會識別,自然會報(bào)錯。

  3. group by聚合后的結(jié)果是無序的。

  4. where子句中只可以使用條件表達(dá)式,不能使用聚合函數(shù)。事實(shí)上,只有select子句和后面馬上要說的having子句可以使用聚合函數(shù)。

  5. 在使用group by聚合列時(shí),若select子句中沒有使用聚合函數(shù),其效果相當(dāng)于對該列進(jìn)行去重(distinct)。但一般并不建議這么做,會加大理解難度。

having子句

having子句,只能對分組后的結(jié)果進(jìn)行過濾。其作用類似where子句,但只能用在group by之后。若沒有寫group by,則不可以使用having。

現(xiàn)在我們要從cargo表中找出商品類型個數(shù)恰好為2的商品:

如果去掉having子句:

通過對比可以看到,having子句的用法和where是類似的,都是在后面跟一個條件表達(dá)式,是對分組之后的結(jié)果進(jìn)行一些條件限制。

最后,having子句也是只可以寫常數(shù)、聚合函數(shù)以及group by中的列名。

3 排序


我們經(jīng)常會遇到排序的問題,先來看下我們的cargo表:

現(xiàn)在想讓表格按sale_price列,也就是售價(jià),進(jìn)行從小到大的排列??梢允褂胦rder by子句:

如上圖,可以看到order by默認(rèn)升序排列,關(guān)鍵字是asc(意為ascend);如果我們想要降序排列,可以在后面加上desc(意為descend)關(guān)鍵字:

特別要注意的是,order by子句中可以使用列的別名,原因是select子句的執(zhí)行順序在order by之前。

至此為止,基本的SQL語句就是這些了。特別要關(guān)注的是,SQL語句的書寫順序和執(zhí)行順序是不一樣的。我們先來看書寫順序:

select→from→where→group by→having→order by

而執(zhí)行順序卻是這樣的:

from→where→group by→having→select→order by

排序操作永遠(yuǎn)是在最后才完成的,牢記這兩個順序可以理解之前各個子句的書寫規(guī)則。

這一篇到此結(jié)束,下一篇就要開始對SQL的高級查詢了,敬請期待。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MySQL必知必會--分 組 數(shù) 據(jù)
MYSQL必知必會
查詢反模式
Oracle Group By 用法之 —— Having
group by搭配 order by解決排序問題
MySQL SELECT查詢
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服