MySQL查詢語句進階知識集錦
前言
上次咱們簡單的學習了一下select的用法,對數據庫大概有了一些基本的了解。
咱們接著上次繼續來看叭!
查詢
數據如下
or查詢
我們在上學時,會聽到這樣的話,某某某,你把誰誰誰或者誰誰誰叫過來。
這樣子的話,我們我們要查詢的,就是一個或(or)的關系了。
or查詢只有滿足一個條件即可
sql
- -- 語法
- SELECT * from student WHERE <條件> or <條件> ...;
- -- 例如,查詢姓名為張三的或者姓名為小劉的數據
- SELECT * from student WHERE name="張三" or name="小劉";
執行結果
不等于(!=)查詢
上述我們查詢的,都是等于(=)操作,但是我們在上學時,還會有這種情況。
某個學生學習可好,背東西背的可快,放學的時候可能就人家一個人過了,這時候老師可能就說
除了某某某,其他學生本篇文章全部抄3遍,淦。。。
所以這時候就是反過來的查詢的,只需要排除某個人即可!
sql
- -- 語法
- SELECT * from student WHERE <條件>;
- -- 例如,查詢姓名不是張三的其他人,排除張三
- SELECT * from student WHERE name!="張三";
執行結果
in/not in查詢
學生們還都是年輕人,年齡大概都在20來歲,這時候老師說,班長,把年齡在19,20,21的人統計一下!
根據上述我們學過的知識,可能你是這樣嬸的。
- SELECT * from student WHERE age=19 or age=20 or age=21;
執行結果
通過三個or找到,其實這樣也沒錯,但是還有一種更簡單的。
sql
-- 語法SELECT * from student WHERE <列名> in (值1,值2,...) ...;-- 例如,需求同上SELECT * from student WHERE age in (19,20,21);
執行結果
not in 就是不在這個范圍的數據啦!
sql
- -- 查詢年齡不在19,20,21范圍的數據
- SELECT * from student WHERE age not in (19,20,21);
執行結果
between查詢
between適合進行范圍查詢!
sql
- -- 語法
- select * from 表 where <列> between <開始范圍> and <結束范圍>;
- -- 例如,查詢年齡時20-22歲的學生
- SELECT * from student WHERE age BETWEEN 20 and 22;
執行結果
同理,between還能用在時間上。
- select * from <表名> where <時間列> between <開始時間> and <結束時間>
模糊查詢(like)
假設現在數據如下,有三個姓張的。
老師可能突然有一天對你說,班長,把咱們姓張的列出來,我找他們談點事,咋辦???
我們只需要找,是以張開頭的,后面是啥無所謂。
所以就要用到like模糊查詢。
sql
- -- 語法 %表示匹配一個或多個字符
- select * from 表 where <列> like '[%]<字符串>[%]'
- -- 例如,查詢,以張開頭的
- SELECT * from student WHERE name like "張%";
執行結果
同理,這個%可以放在任意位置,他就是充當不確定的字符使用的,能夠自動匹配一個或多個。
例如
- ... WHERE name like "張%豐";
- 匹配:張三豐
- WHERE name like "%魚";
- 匹配:張甲魚
- WHERE name like "李%";
- 匹配:李四
- ...
限制(limit)
限制這個有點怪異,還是圖片舉例比較好。
數據如下
sql
- -- 前兩行
- SELECT * from student LIMIT 2;
- -- 從第2行開始后,再取4行
- SELECT * from student LIMIT 2,4;
- -- 同上,寫法不同
- SELECT * from student LIMIT 4 OFFSET 2
排序(order by)
不知道你有沒有發現,我們之前查找的順序都是正向的。
但是會有個問題,我們新增的數據,其實id是最大的,理論來說,應該要排在最前面。
所以,應該是倒序的是最好的。
sql
- -- 語法
- select * from <表名> order by <列> asc -- 從小到大排序
- select * from <表名> order by <列> desc -- 從大到小排序
- select * from <表名> order by <列1> desc,<列2> asc -- 先根據 列1 排序,如果數據相同,按照 列2 排序
例如
根據id正向排序
- SELECT * from student ORDER BY id ASC;
執行結果
根據id反向排序
- SELECT * from student ORDER BY id desc;
執行結果
hhh,這樣我們就把數據反過來了!!!
分組(groupby)
分組,這個可能是難為了一批人,其實分組的核心,在于理解這個壓縮這個概念。
假設數據如下
性別有男有女,如果我想知道,男的有多少個,女的有多少個怎么辦???我總不能數吧。。。
所以這時候,如果能吧,男的都拿出來,女的都拿出來,就像這樣!
然后我對拿出來進行壓縮成一條。
如果這個你懂了,那分組就懂了。
語法
- SELECT <列>,COUNT(<列>) from student GROUP BY <列>;
- -- 因為分組了某個列,所以就不能再展示其他列的信息了,因為壓在一塊了,顯示不了
- -- 但是可以通過count,sum等函數計算壓縮的個數,或者總值
例如
統計男女各多少人
- SELECT gender,COUNT(gender) from student GROUP BY gender;
執行結果
統計同一年齡多少人
- SELECT age,COUNT(age) as "數量" from student GROUP BY age;
執行結果
注意:group by必須在where之后,order by之前。
總結
本篇主要講述的是Mysql查詢語法,再單表查詢中,基本上就上述這么些的內容,但是從理論到事件,是需要時間的。
一定要勤加練習,什么是or查詢,like查詢注意事項,尤其是group by分組查詢,一定要多多思考和聯系。
如果在操作過程中有任何問題,記得下面留言,我們看到會第一時間解決問題。
不要輕易改變自己,因為你可能就是世界上那顆未加工的最亮的鉆石。