以下所有的查詢語句,符號都要用英文
基本查詢和查詢模型
還記得上篇最后的練習(xí)嗎?
select * from beauty;
這就是最簡單的查詢,我們一起來分析下:
- select代表查詢的意思。
- * 代表查出所有列,也就是字段。
- from 后面接要查詢的表名。
上面這句話的意思就是,查出beauty表所有的信息。是不是一目了然?
但是我們覺的信息太多了,不想要這么多,只想查出表中所有美女的名字和等級
那么我們要怎么來思考并寫出語句呢?這里我給出一個(gè)思維模型。寫語句前我們先問自己兩個(gè)問題:
- 我要查詢那張表?
- 我需要什么信息(字段或者說列)
想明白了嗎?好,我們跟著這思路來:
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)吧:
- 查出名字是張柏芝的所有信息。
- 查出id大于2的所有信息。
試著寫下吧。
where子句之模糊查詢
記得google搜索查詢東西嗎?所有的條件都是不準(zhǔn)確的,但信息我們依然能搜索出來,他是怎么做到的?
我們可以在where字句中使用like關(guān)鍵字,它主要是用于檢索與特定字符串匹配的數(shù)據(jù),我們來試下:
1.現(xiàn)在我們要查詢出名字中包含玲的所有信息:
select * from beauty where name linke '%玲%'
結(jié)果如何?%我們叫做通配符,必須被單引號括起來。通配符的作用就是在通配符的位置配備任意字符。上面這語句的意思就是,不管前后,只要包含玲就查出來。
但是通配符除了%號還有其他的,試著google下:
- 查出都有些什么通配符?
- 試著每個(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)算符。總共有三:
and ,not,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)連接,外連接,交叉連接)
- 子查詢