查詢命令深入
完整命令格式:
查詢
別名:可根據(jù)需求用AS
對表名或列名設置別名倡勇。
去重查詢:重復信息只保留一行蝗蛙,其他列信息沒有意義。
SELECT DISTINCT 列名 FROM 表名;
常用函數(shù):
-
MAX(列名)
:求該列的最大值 -
MIN(列名)
:求該列的最小值 -
AVG(列名)
:求該列的平均值 -
COUNT(*)
:統(tǒng)計行數(shù)
單表查詢
不存在列名重復問題乾吻,不需要加表名前綴燃观,沒有多表不需要ON
子句叽讳。
多表查詢
列名不重復追他,可以省略表名,列名重復需添加表名
條件
WHERE
子句岛蚤,可以根據(jù)條件將滿足條件的記錄顯示出來
舉個例子:顯示王姓同學的學號湿酸、姓名、出生日期的信息
SELECT sno,name,birthday FROM stu WHERE name LIKE '王%';
再舉個例子:顯示當月過生日的學生姓名灭美、出生日期
SELECT name,birthday FROM stu WHERE MONTH(birthday) = MONTH(NOW());
分組
GROUP BY
子句:和上面的若干組函數(shù)(聚合函數(shù))一起使用推溃。按照分組條件對記錄進行分組。對每組記錄進行組函數(shù)計算届腐。
單行分組:
舉個例子:按照員工工作分組铁坎,并統(tǒng)計每個工作的數(shù)量。
SELECT job,COUNT(*) FROM emp GROUP BY job;
注:出現(xiàn)在GROUP BY
字句中的列就可以出現(xiàn)在SELECT
子句中犁苏,否則就沒有實際意義硬萍。
多行分組:
舉個例子:統(tǒng)計每個部門中相同職位的數(shù)量
SELECT deptno,job,count(*) FROM emp GROUP BY deptno,job;
舉個例子:統(tǒng)計每個工作中相同部門的數(shù)量
SELECT deptno,job,count(*) FROM emp GROUP BY job,deptno;
過濾
HAVING
子句
使用舉例:顯示每個部門中相同職位人數(shù)超過1人的部門和職位信息
SELECT deptno,job,COUNT(*) FROM emp GROUP BY job,deptno HAVING COUNT(\*)>1;
使用舉例:統(tǒng)計每個職位的人數(shù),顯示職位是銷售員或文員的信息
SELECT job,COUNT(*) FROM emp WHERE job IN ('銷售員','文員') GROUP BY job;
也可以這樣寫
SELECT job,COUNT(*) FROM emp GROUP BY job HAVING job IN ('銷售員','文員');
說明:
- 區(qū)別執(zhí)行順序不一樣围详。(2的起因)
- 但若對組函數(shù)進行行過濾朴乖,組函數(shù)只能用在
HAVING
子句中祖屏,不能出現(xiàn)在WHERE
子句中。
排序
ORDER BY
子句:對指定列的數(shù)據(jù)進行升序或降序排列买羞。
升序:ORDER BY ECS
降序:ORDER BY DESC
按照工資升序袁勺,部門將序排列:
SELECT * FROM emp ORDER BY deptno,sal DESC;
按照部門分組求平均工資:
SELECT deptno,avg(sal) FROM emp GROUP BY deptno ORDER BY AVG(SAL) DESC;
查詢結果限定
LIMIT n,m
:表示從n+1
行開始顯示m
條記錄,MySQL從第0
行開始畜普。
LIMIT
常用于分頁,舉個例子:每頁顯示:10條數(shù)據(jù)
功能 | 實現(xiàn) |
---|---|
首頁 | LIMIT 0,10 |
第x頁 | LIMIT (x-1)*10,10 |
上一頁 | LIMIT(x-2)*10,10 |
下一頁 | LIMIT 10x,10 |
共page 頁 |
|
尾頁 | LIMIT (page-1)*10,10 |