MySQL基礎關鍵_005_DQL(四)

目? 錄

一、分組函數

1.說明

2.max/min

3.sum/avg/count

?二、分組查詢

1.說明

2.實例

(1)查詢崗位和平均薪資

(2)查詢每個部門編號的不同崗位的最低薪資

?3.having

(1)說明

(2)查詢除部門編號為 20,其余部門的平均薪資。

(3)計算每個部門平均薪資,查詢平均薪資?2000 以上的部門

4.組內排序

(1)利用 substring_index 截取字串

(2)利用 group_concat 拼接字符串

(3)查詢每個職位薪資最高的兩個員工

三、單表 DQL 執行次序總結

四、連接查詢

1.說明

2.笛卡爾積

3.內連接

(1)等值連接?

(2)非等值連接

(3)自連接

4.外連接

(1)左外連接(左連接)

(2)右外連接 (右連接)

5.全連接

6.多表連接查詢


一、分組函數

1.說明

  1. 執行原則:先分組,然后對每一組執行分組函數。若沒有 group by 分組語句,整張表數據自成一組;
  2. 分組函數也稱多行處理函數,因為有多個輸入,一個輸出;
  3. 分組函數自動忽略 null
  4. 因為執行次序,from --> where --> group by --> select --> order by。所以分組函數不能用于 where 之后;
  5. 以下分組函數可以組合使用

2.max/min

? ? ? ? 查詢員工的最高薪資和最低薪資。?

# 最高薪資
select max(salary) from employees;# 最低薪資
select min(salary) from employees;


3.sum/avg/count

  • 查詢全體員工的總薪資、平均薪資;
  • 查詢總員工數、有津貼的員工數。
# 總薪資
select sum(salary) from employees;# 平均薪資
select avg(salary) from employees;# 總員工數
select count(emp_no) from employees;# 有津貼的員工數
select count(commission) from employees;

  1. count(*) 和 count(1) 都是統計該組中總記錄行數,效果一致;
  2. count(字段) 統計的是該字段中不為 null 的總個數。?

?二、分組查詢

1.說明

  1. 語法格式:【group by 字段1, 字段2, 字段3……】;
  2. group by 的執行次序是在 where 之后;
  3. 當 select 語句中存在 group by,則 select 后只能有 參加分組的字段分組函數

2.實例

(1)查詢崗位和平均薪資

select job_title, avg(salary) from employees group by job_title;


(2)查詢每個部門編號的不同崗位的最低薪資

select dept_no, job_title, min(salary) from employees group by dept_no, job_title;


?3.having

(1)說明

  1. having 在 group by 之后,可以對分組之后的數據進行過濾;
  2. 只有存在 group by,才能使用 having
  3. 區別 where 過濾:where 是在分組之前過濾;
  4. 盡量使用 where 過濾,也就是越早過濾越好

(2)查詢除部門編號為 20,其余部門的平均薪資。

# having
select dept_no, avg(salary) from employees group by dept_no having dept_no != 20;# where(效率高,盡量使用)
select dept_no, avg(salary) from employees where dept_no != 20 group by dept_no;


(3)計算每個部門平均薪資,查詢平均薪資?2000 以上的部門

select dept_no, avg(salary) from employees group by dept_no having avg(salary) > 2000;


4.組內排序

(1)利用 substring_index 截取字串

select substring_index('I Miss You! I Miss You! I Miss You!', '!', 1);
-- 截取到第一次出現“!”的位置


(2)利用 group_concat 拼接字符串

select group_concat('I ', 'Love ', 'You!');


(3)查詢每個職位薪資最高的兩個員工

select substring_index(group_concat(emp_name, salary order by salary desc), ',', 2) from employees group by job_title; 


三、單表 DQL 執行次序總結

  1. from;
  2. where;
  3. group by;
  4. having;
  5. select;
  6. order by。

四、連接查詢

?1.說明

  1. 從一張表中查數據稱為單表查詢。從兩張以上的表查數據稱為多表查詢、連接查詢;
  2. 分類
    1. 語法出現時間
      1. SQL 92(較少使用);
      2. SQL 99。
    2. 連接方式
      1. 內連接:
        1. 等值連接;
        2. 非等值連接;
        3. 自連接。
      2. 外連接:
        1. 左外連接;
        2. 右外連接。
      3. 全連接(MySQL 不支持)。

2.笛卡爾積

  1. 當兩張表進行連接查詢時,若沒有任何條件進行過濾,最終的查詢結果是兩張表數據條數的乘積,這就是笛卡爾積;
  2. ?為了避免笛卡爾積現象的發生,就需要添加條件進行過濾;
  3. 但是,添加條件進行過濾后,匹配的次數并沒有減少
  4. 為提高執行效率和語句的可讀性,建議為表起別名

3.內連接

? ? ? ? 查詢兩張表中滿足條件的記錄,即 求兩張表的交集

(1)等值連接?

  • 連接時,條件為等量關系;
  • 實例:?查詢所有員工所在的部門、職位。
select e.emp_name, e.job_title, d.dept_name from employees e inner join departments d on e.dept_no = d.dept_no;-- inner 可以省略不寫
select e.emp_name, e.job_title, d.dept_name from employees e join departments d on e.dept_no = d.dept_no;


(2)非等值連接

  • 連接時,條件是非等量關系;
  • 實例:查詢每個員工的姓名、薪資、薪資等級。
select e.emp_name, e.salary, s.grade from employees e join salary_grades s on e.salary between s.min_salary and s.max_salary;


(3)自連接

  • 連接時,一張表看作是兩張表,自己和自己連接;
  • 實例: 查詢每個員工的姓名、直屬領導姓名。
select ee.emp_name as employee_name, er.emp_name as employer_name from employees ee join employees er on ee.manager_id = er.emp_no;


4.外連接

  1. 內連接是滿足條件的記錄,兩張表的交集;
  2. 外連接是除了查詢出滿足條件的記錄,再將其中的一張表的記錄全部查詢出來,若另一張表沒有與之匹配的記錄,則自動模擬 null 與之匹配
  3. 任何一個左連接都可以寫成右連接,反之亦然

(1)左外連接(左連接)

? ? ? ? 查詢所有部門信息,并找出每個部門下的員工。

select d.*, e.emp_name from departments d left outer join employees e on d.dept_no = e.dept_no;-- outer 可以省略不寫
select d.*, e.emp_name from departments d left join employees e on d.dept_no = e.dept_no;


(2)右外連接 (右連接)

? ? ? ? 查詢所有員工以及該員工的直屬領導。

select ee.emp_name employee_name, er.emp_name employer_name from employees er right join employees ee on ee.manager_id = er.emp_no;


5.全連接

  1. 將兩張表數據全部查詢出來,沒有匹配記錄則各自為對方模擬 null 進行匹配;
  2. MySQL 不支持,Oracle 支持。

6.多表連接查詢

? ? ? ? 查詢員工姓名、部門名稱、薪資等級。

select e.emp_name, d.dept_name, s.grade from employees e join departments d on e.dept_no = d.dept_no join salary_grades s on e.salary between s.min_salary and s.max_salary;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79206.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GAMES202-高質量實時渲染(Assignment 2)

目錄 作業介紹環境光貼圖預計算傳輸項的預計算Diffuse unshadowedDiffuse shadowedDiffuse Inter-reflection(bonus) 實時球諧光照計算 GitHub主頁:https://github.com/sdpyy1 作業實現:https://github.com/sdpyy1/CppLearn/tree/main/games202 作業介紹 物體在不同…

2025年- H21-Lc129-160. 相交鏈表(鏈表)---java版

1.題目描述 2.思路 當pa!pb的時候,執行pa不為空,遍歷pa鏈表。執行pb不為空,遍歷pb鏈表。 3.代碼實現 // 單鏈表節點定義 class ListNode {int val;ListNode next;ListNode(int x){valx;nextnull;}}public class H160 {// 主方法…

win10系統安卓開發環境搭建

一 安裝jdk 下載jdk17 ,下載路徑:https://download.oracle.com/java/17/archive/jdk-17.0.12_windows-x64_bin.exe 下載完畢后,按照提示一步步完成,然后接著創建環境變量, 在cmd控制臺輸入java -version 驗證: 有上面的輸出代表jdk安裝并配置成功。 二 安裝Android stu…

【算法基礎】選擇排序算法 - JAVA

一、算法基礎 1.1 什么是選擇排序 選擇排序是一種簡單直觀的排序算法,它的工作原理是:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再從剩余未排序元素中繼續尋找最小&#xf…

LabVIEW異步調用VI介紹

在 LabVIEW 編程環境里,借助結合異步 VI 調用,并使用 “Open VI Reference” 函數上的 “Enable simultaneous calls on reentrant VIs” 選項(0x40),達成了對多個 VI 調用執行效率的優化。以下將從多方面詳細介紹該 V…

Leetcode刷題 | Day50_圖論02_島嶼問題01_dfs兩種方法+bfs一種方法

一、學習任務 99. 島嶼數量_深搜dfs代碼隨想錄99. 島嶼數量_廣搜bfs100. 島嶼的最大面積101. 孤島的總面積 第一類DFS(主函數中處理第一個節點,DFS處理相連節點): 主函數中先將起始節點標記為已訪問DFS函數中不處理起始節點&…

深入理解網絡安全中的加密技術

1 引言 在當今數字化的世界中,網絡安全已經成為個人隱私保護、企業數據安全乃至國家安全的重要組成部分。隨著網絡攻擊的復雜性和頻率不斷增加,保護敏感信息不被未授權訪問變得尤為關鍵。加密技術作為保障信息安全的核心手段,通過將信息轉換為…

舊版本NotionNext圖片失效最小改動解決思路

舊版本NotionNext圖片失效最小改動解決思路 契機 好久沒寫博客了,最近在notion寫博客的時候發現用notionNext同步到個人網站時,圖片無法預覽。猜測是notion加了防盜鏈措施,去notionNext官方github上尋找解決方案,需要升級到4.8.…

深度學習筆記40_中文文本分類-Pytorch實現

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 | 接輔導、項目定制 一、我的環境 1.語言環境:Python 3.8 2.編譯器:Pycharm 3.深度學習環境: torch1.12.1cu113torchvision…

010302-oss_反向代理_負載均衡-web擴展2-基礎入門-網絡安全

文章目錄 1 OSS1.1 什么是 OSS 存儲?1.2 OSS 核心功能1.3 OSS 的優勢1.4 典型使用場景1.5 如何接入 OSS?1.6 注意事項1.7 cloudreve實戰演示1.7.1 配置cloudreve連接阿里云oss1.7.2 常見錯誤1.7.3 安全測試影響 2 反向代理2.1 正向代理和反向代理2.2 演示…

【 Node.js】 Node.js安裝

下載 下載 | Node.js 中文網https://nodejs.cn/download/ 安裝 雙擊安裝包 點擊Next 勾選使用許可協議,點擊Next 選擇安裝位置 點擊Next 點擊Next 點擊Install 點擊Finish 完成安裝 添加環境變量 編輯【系統變量】下的變量【Path】添加Node.js的安裝路徑--如果…

Python基本語法(自定義函數)

自定義函數 Python語言沒有子程序,只有自定義函數,目的是方便我們重復使用相同的一 段程序。將常用的代碼塊定義為一個函數,以后想實現相同的操作時,只要調用函數名就可以了,而不需要重復輸入所有的語句。 函數的定義…

OpenGL-ES 學習(11) ---- EGL

目錄 EGL 介紹EGL 類型和初始化EGL初始化方法獲取 eglDisplay初始化 EGL選擇 Config構造 Surface構造 Context開始繪制 EGL Demo EGL 介紹 OpenGL-ES 是一個操作GPU的圖像API標準,它通過驅動向 GPU 發送相關圖形指令,控制圖形渲染管線狀態機的運行狀態&…

極簡5G專網解決方案

極簡5G專網解決方案 利用便攜式即插即用私有 5G 網絡提升您的智能創新。為您的企業提供無縫、安全且可擴展的 5G 解決方案。 提供極簡5G專網解決方案 Mantiswave Network Private Limited 提供全面的 5G 專用網絡解決方案,以滿足您企業的獨特需求。我們創新的“…

html:table表格

表格代碼示例&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><!-- 標準表格。 --><table border"5"cellspacing&qu…

tkinter 電子時鐘 實現時間日期 可實現透明

以下是一個使用Tkinter模塊創建一個簡單的電子時鐘并顯示時間和日期的示例代碼&#xff1a; import tkinter as tk import time# 創建主窗口 root tk.Tk() root.overrideredirect(True) # 隱藏標題欄 root.attributes(-alpha, 0.7) # 設置透明度# 顯示時間的標簽 time_labe…

【報錯問題】 macOS 的安全策略(Gatekeeper)阻止了未簽名的原生模塊(bcrypt_lib.node)加載

這個錯誤是由于 macOS 的安全策略&#xff08;Gatekeeper&#xff09;阻止了未簽名的原生模塊&#xff08;bcrypt_lib.node&#xff09;加載 導致的。以下是具體解決方案&#xff1a; 1. 臨時允許加載未簽名模塊&#xff08;推薦先嘗試&#xff09; 在終端運行以下命令&#x…

AI實現制作logo的網站添加可選顏色模板

1.效果圖 LogoPalette.jsx import React, {useState} from react import HeadingDescription from ./HeadingDescription import Lookup from /app/_data/Lookup import Colors from /app/_data/Colors function LogoPalette({onHandleInputChange}) { const [selectOptio…

云原生后端架構的挑戰與應對策略

??個人主頁??:慌ZHANG-CSDN博客 ????期待您的關注 ???? 隨著云計算、容器化以及微服務等技術的快速發展,云原生架構已經成為現代軟件開發和運維的主流趨勢。企業通過構建云原生后端系統,能夠實現靈活的資源管理、快速的應用迭代和高效的系統擴展。然而,盡管云原…

【C++】模板為什么要extern?

模板為什么要extern&#xff1f; 在 C 中&#xff0c;多個編譯單元使用同一個模板時&#xff0c;是否可以不使用 extern 取決于模板的實例化方式&#xff08;隱式或顯式&#xff09;&#xff0c;以及你對編譯時間和二進制體積的容忍度。 1. 隱式實例化&#xff1a;可以不用 ex…