1. 程式人生 > >07 單表查詢

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