07 單表查詢
一、單表查詢的語法
SELECT 欄位1,欄位2... FROM 表名
WHERE 條件
GROUP BY field
HAVING 篩選
ORDER BY field
LIMIT 限制條數
二、關鍵字的執行優先順序(重點)
重點中的重點:關鍵字的執行優先順序
from
where
group by
having
select
distinct
order by
limit
1.找到表:from
2.拿著where指定的約束條件,去檔案/表中取出一條條記錄
3.將取出的一條條記錄進行分組group by,如果沒有group by,則整體作為一組
4.將分組的結果進行having過濾
5.執行select
6.去重
7.將結果按條件排序:order by
8.限制結果的顯示條數
三、where約束
where子句中可以使用
1.比較運算子:>、<、>=、<=、<>、!=
2.between 80 and 100 :值在80到100之間
3.in(80,90,100)值是10或20或30
4.like 'xiaomagepattern': pattern可以是%或者_。%小時任意多字元,_表示一個字元
5.邏輯運算子:在多個條件直接可以使用邏輯運算子 and or not
四、group by 分組
一旦分組之後 只能檢視分組的欄位,如果想檢視組內的資訊,我們要通過聚合函式
count() 總數量
max() 求最大值
min() 求最小值
avg() 求平均值
sum() 求和
group_concat() 組內的資訊根據逗號連線
#1、首先明確一點:分組發生在where之後,即分組是基於where之後得到的記錄而進行的
#2、分組指的是:將所有記錄按照某個相同欄位進行歸類,比如針對員工資訊表的職位分組,或者按照性別進行分組等
#3、為何要分組呢?
取每個部門的最高工資
取每個部門的員工數
取男人數和女人數
小竅門:‘每’這個字後面的欄位,就是我們分組的依據
#4、大前提:
可以按照任意欄位分組,但是分組完畢後,比如group by post,只能檢視post欄位,如果想檢視組內資訊,需要藉助於聚合函式
五、having過濾
複製程式碼
HAVING與WHERE不一樣的地方在於
#!!!執行優先順序從高到低:where > group by > having
#1. Where 發生在分組group by之前,因而Where中可以有任意欄位,但是絕對不能使用聚合函式。
#2. Having發生在分組group by之後,因而Having中可以使用分組的欄位,無法直接取到其他欄位,可以使用聚合函式
六、order by 查詢排序
按單列排序
SELECT * FROM employee ORDER BY age;
SELECT * FROM employee ORDER BY age ASC;
SELECT * FROM employee ORDER BY age DESC;
按多列排序:先按照age升序排序,如果年紀相同,則按照id降序
SELECT * from employee
ORDER BY age ASC,
id DESC;
七、limit 限制查詢的記錄數:
示例:
SELECT * FROM employee ORDER BY salary DESC
LIMIT 3; #預設初始位置為0
SELECT * FROM employee ORDER BY salary DESC
LIMIT 0,5; #從第0開始,即先查詢出第一條,然後包含這一條在內往後查5條
SELECT * FROM employee ORDER BY salary DESC
LIMIT 5,5; #從第5開始,即先查詢出第6條,然後包含這一條在內往後查5條
參考地址:https://www.cnblogs.com/majj/p/9170351.html