產(chǎn)品經(jīng)理學(xué)SQL的正確姿勢(二)

以下所有的查詢語句,符號都要用英文

基本查詢和查詢模型

還記得上篇最后的練習(xí)嗎?

  select * from beauty;

這就是最簡單的查詢,我們一起來分析下:

  • select代表查詢的意思。
  • * 代表查出所有列,也就是字段。
  • from 后面接要查詢的表名。
    上面這句話的意思就是,查出beauty表所有的信息。是不是一目了然?

但是我們覺的信息太多了,不想要這么多,只想查出表中所有美女的名字等級

那么我們要怎么來思考并寫出語句呢?這里我給出一個(gè)思維模型。寫語句前我們先問自己兩個(gè)問題:

  1. 我要查詢那張表?
  2. 我需要什么信息(字段或者說列)
    想明白了嗎?好,我們跟著這思路來:
select 列1,列2,...列n from 表名

我要查的表是beauty,想查出的名字(name)和等級(level)。那么套進(jìn)去,語句如下:

select name,level from beauty;

運(yùn)行一下,是不是出現(xiàn)自己想要的結(jié)果了?趁熱我們再來一句:

我們現(xiàn)在想查出表中所有美女的名字,年紀(jì)等級

想一想,我們怎么來做?練習(xí)一下吧。

where子句

這時(shí),是不是有疑問了?為什么都是查出所有的行?我們只想查出一行信息怎么查呢?那我們把上面的模型更新一下:

select 列1,列2,...列n from 表名 where 列 運(yùn)算符 值;

where接的就是要查詢的條件。

比如:我們要查出第二行所有信息,那么語句如下:

select * from beauty where id = 2;

運(yùn)行一下,是不是已經(jīng)把第二條信息查出來了?那我們來介紹下運(yùn)算符有什么?

= 等于
<> 不等于
> 大于
< 小于

= 大于等于
<= 小于等于

直接試驗(yàn)吧:

  1. 查出名字是張柏芝的所有信息。
  2. 查出id大于2的所有信息。
    試著寫下吧。
where子句之模糊查詢

記得google搜索查詢東西嗎?所有的條件都是不準(zhǔn)確的,但信息我們依然能搜索出來,他是怎么做到的?
我們可以在where字句中使用like關(guān)鍵字,它主要是用于檢索與特定字符串匹配的數(shù)據(jù),我們來試下:

1.現(xiàn)在我們要查詢出名字中包含的所有信息:

select * from beauty where name linke '%玲%'

結(jié)果如何?%我們叫做通配符,必須被單引號括起來。通配符的作用就是在通配符的位置配備任意字符。上面這語句的意思就是,不管前后,只要包含玲就查出來。
但是通配符除了%號還有其他的,試著google下:

  1. 查出都有些什么通配符?
  2. 試著每個(gè)通配符都用下,看看效果。
where之IN子句

是不是覺得where字句很有意思?現(xiàn)在我們有一個(gè)需求:

  • 假設(shè),beauty里有一千條美女的數(shù)據(jù),而我們只需要篩選出其中幾條不連續(xù)ID的(必需ID為1,99,199)的數(shù)據(jù),怎么辦呢?

按照上面我們學(xué)習(xí)的東西,如果要查出來,我們是不是的寫三條

select * from beauty where id = 1;
select * from beauty where id = 99;
select * from beauty where id = 199;

是不是感覺特別費(fèi)勁?有沒有發(fā)現(xiàn)一個(gè)規(guī)律?前面語句都一樣只是后面的ID不同?要是能把ID都包含起來就好了。IN 子句的意思就包含,試下查詢出beauty 表中id 為1,和3的數(shù)據(jù):

select * from beauty where id in(1,3)

IN除了可以寫具體值,還有包含一條其他的查詢語句。不過這個(gè)后面在說。對了,不要忘記加逗號。

where之復(fù)合查詢

不知你有沒有發(fā)現(xiàn),前面的where都只講了一個(gè)條件,要是我們有多個(gè)條件呢?比如:查詢等級為7,且年齡等于36的美女名字。怎么辦?我們來試下下面語句:

select name from beauty where level = 7 and age = 36

執(zhí)行結(jié)果如何?在查詢條件中,多個(gè)條件可以使用邏輯運(yùn)算符連接。上面語句and 就邏輯運(yùn)算符。總共有三:

andnot,or

分別查下是什么意思?并且寫寫試試。

統(tǒng)計(jì)函數(shù)

現(xiàn)在來個(gè)比較好玩兒的,身為產(chǎn)品,是不是經(jīng)常要統(tǒng)計(jì)一些平均值,總數(shù)量之類的?哈,先來一個(gè)例子吧:

計(jì)算出等級的平均值。

思路依舊如上,只是在列上要加點(diǎn)小東西,先認(rèn)識一下:

count()計(jì)算行數(shù)
avg()求平均函數(shù)
sum()求總和
min()求最小
max() 求最大
有疑惑先放著,跟著來,我們查的表(beauty),要查出的字段(level),語句如下:

select level from beauty;

要查出平均值,函數(shù)為avg(),只需加在需要的列上,如下:

select avg(level) from beauty;

結(jié)果出來了吧?接下來,查一查下面的:

  • 查出等級的總和。
  • 查出表里有多少行。
order by子句

學(xué)了統(tǒng)計(jì)函數(shù)調(diào)節(jié)下胃口,現(xiàn)在來學(xué)習(xí)下排序:
首先我們先查出所有信息,然后突然想按照等級給他們排序下,怎么辦?
執(zhí)行下面這語句試下:

select * from beauty order by level

如果想倒著來呢?試著在level后再加個(gè)desc試下。
練完后,換一下 desc 和 asc都試下,有沒有發(fā)現(xiàn)什么?

基本篇到此結(jié)束,下篇預(yù)告:

  • 分組查詢
  • having子句
  • 連表查詢(內(nèi)連接,外連接,交叉連接)
  • 子查詢
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容