MySQL進階8 分頁查詢(limit) - 【SQL查詢語法執行順序及大致結構】- 子查詢的3個經典案例


#進階8 分頁查詢
/* 應用場景: 當要顯示的數據,一頁顯示不全,需要分頁提交sql請求
   語法:
    select 查詢列表          #7
    from  表1   #執行順序:#1
    【join type join 表2   #2
     on 連接條件           #3
     where 篩選條件         #4
     group by 分組字段      #5
     having 分組后篩選或函數   #6
     order by 排序的字段        #8
    】
    limit offset, size ;            #9  
        #offset 要顯示條目的起始索引(從0開始,0想可以省略),size 要顯示的條目個數
    特點:
    ①limit語句放在查詢語句的,執行上語法上都在最后
    ②公式, 要顯示的頁數page ,每頁的條目數 size
        select 查詢列表
        from 表
        limit(page-1)*size ,size;
*/
#案例1: 查詢前五條員工信息
SELECT * FROM  employees LIMIT 0,5;
SELECT * FROM  employees LIMIT 5;

#案例2:查詢第11到第25條
SELECT * FROM employees LIMIT 11,15;

# 案例3:有獎金的員工信息,並且工資較高的前10項顯示出來
SELECT *
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC
LIMIT 10;
#--------------------------
    #課堂練習
#1.查詢所有學員的郵箱的用戶名(注: 郵箱中 @前的字符) ;instr() : 返回子串的索引下標
SELECT SUBSTR( email,1,INSTR(email,'@')-1)
FROM stuinfo;
#------------------------------------
    #子查詢的經典案例
    
#1:查詢工資最低的員工信息: last_name,salary
SELECT    last_name,salary
FROM employees
WHERE salary=(
    SELECT MIN(salary)
    FROM employees
);
#2:查詢平均工資最低的部門信息
    #方式1:
    #分組查詢平均工資
    #查詢最低的一組
    #查詢那個部門最低平均工資 = 最低的一組
SELECT AVG(salary) ag,department_id
    FROM employees
    GROUP BY department_id;
    
SELECT MIN(ag)
FROM (
    SELECT AVG(salary) ag,department_id
    FROM employees
    GROUP BY department_id
)ag_dep;

SELECT *,AVG(salary)
FROM employees
GROUP BY department_id
HAVING AVG(salary) = (
    SELECT MIN(ag)
    FROM (
        SELECT AVG(salary) ag,department_id
        FROM employees
        GROUP BY department_id
    )ag_dep
);
    #方式2:
    #①分組查詢平均工資
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id; 
    #②求出最低的(limit=1)平均工資的部門編號
SELECT department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary)
LIMIT 1;
    #③ 進行嵌套,輸出該部門信息
SELECT *
FROM departments
WHERE department_id =(
    SELECT department_id
    FROM employees
    GROUP BY department_id
    ORDER BY AVG(salary)
    LIMIT 1
);

#3: 查詢平均工資高於公司的平均工資的部門有哪些

#①查詢平均工資
SELECT AVG(salary)
FROM employees;

#② 查詢每個部門的
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id; 

#③ 進行篩選2的結果集: > ① 即可!

SELECT  *,AVG(salary) ag,department_id
FROM employees
GROUP BY department_id
HAVING ag >(
    SELECT AVG(salary)
    FROM employees
);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM