SQL語句(三)—— DQL

目錄

基本語法

一、基礎查詢

1、查詢多個字段

2、字段設置別名

3、去除重復記錄

4、示例代碼

二、條件查詢

1、語法

2、條件列表常用的運算符

3、示例代碼

三、分組查詢

(一)聚合函數

1、介紹

2、常見的聚合函數

3、語法

4、示例代碼

(二)分組查詢

1、語法

2、where 與 having 區別

3、注意事項

4、示例代碼

四、排序查詢

1、語法

2、排序方式

3、注意事項

4、示例代碼

五、分頁查詢

1、語法

2、注意事項

3、示例代碼

六、DQL語言的實戰應用

(一)執行順序

(二)各個字句的作用

(三)實際書寫代碼的思路


????????DQL 英文全稱是Data Query Language,即數據查詢語言,用來查詢數據庫中表的記錄

????????在一個正常的業務系統中,查詢操作的頻次是要遠高于增刪改的。

????????當我們去訪問企業官網、電商網站,在這些網站中我們所看到的數據,實際都是需要從數據庫中查詢并展示的。而且在查詢的過程中,可能還會涉及到條件排序分頁等操作。

基本語法

DQL 查詢語句,語法結構如下:

select字段列表
from表名列表
where條件列表
group by分組字段列表
having分組后條件列表
order by排序字段列表
limit分頁參數

????????我們在講解這部分內容的時候,會將上面的完整語法進行拆分,分為以下幾個部分.

? ? ? ? ① 基本查詢 (不帶任何條件);② 條件查詢 (WHERE);③ 聚合函數 (count、max、min、avg、sum);④ 分組查詢 (group by);⑤ 排序查詢 (order by);⑥ 分頁查詢 (limit)

一、基礎查詢

1、查詢多個字段

????????在基本查詢的DQL語句中,不帶任何的查詢條件,查詢的語法如下:????????

select 字段1, 字段2, 字段3 ... from 表名 ;

select * from?表名 ;?

????????注意:* 號代表查詢所有字段,在實際開發中盡量少用(不直觀、影響效率)。

2、字段設置別名

select 字段1 [ as 別名1 ] , 字段2 [ as 別名2 ] ... from 表名;

select 字段1 [ 別名1 ] , 字段2 [ 別名2 ] ... from 表名;

????????注意:關鍵字 as 可以省略,方括號表示可以不添加。

3、去除重復記錄

select?distinct 字段列表 from 表名;

????????select 的意思是選擇,在這里選擇對應的字段的意思就是,選到了什么字段,什么字段就顯示出來,那一列就顯示出來,沒有被選擇到的就不顯示出來。

????????from 的意思是來自,后面接表名,也就是說明數據來源于哪個表。

4、示例代碼

(1)查詢指定字段 name, workno, age 并返回

select name,workno,age from emp;

(2)查詢返回所有字段

select id ,workno,name,gender,age,idcard,workaddress,entrydate from emp;
select * from emp;

(3)查詢所有人員的工作地址、起別名

select workaddress as '工作地址' from emp;
-- as可以省略
select workaddress '工作地址' from emp;

(4)查詢公司員工的上班地址有哪些(不要重復)

select distinct workaddress '工作地址' from emp;

二、條件查詢

1、語法

select 字段列表 from?表名 where?條件列表 ;

2、條件列表常用的運算符

(1)常用的比較運算符如下:

(2)常用的邏輯運算符如下:

3、示例代碼

(1)查詢年齡在15歲(包含) 到 20歲(包含)之間的員工信息

select * from emp where age >= 15 && age <= 20;
select * from emp where age >= 15 and age <= 20;
select * from emp where age between 15 and 20;

(2)查詢性別為女且年齡小于25歲的員工信息

select * from emp where gender = '女' and age < 25;

(3)查詢姓名為兩個字的員工信息

select * from emp where name like '__';
--like后面有兩條_,說明匹配兩個任意字符

(4)查詢身份證號最后一位是X的員工信息

select * from emp where idcard like '%X';
--%可以表示任意字符,'%X只要保證最后一位是X就行了'
select * from emp where idcard like '_________________X';

三、分組查詢

(一)聚合函數
1、介紹

? ? ? ? 聚合函數即將一列數據作為一個整體,進行縱向計算 。select 的作用就是選擇要展現的列,其后面可以接字段與聚合函數

????????select 后面接字段就是正常輸出一列;而接聚合函數,就是對這一列進行相應的處理,再展示出來,其行數會做出相應的調整。

????????直接引用表中原始字段,未經過聚合函數處理,這列則被稱為非聚合列。而經過聚合函數處理的列,則稱為聚合列

? ? ? ? 聚合函數可以單獨使用但是如當與非聚合列一起出現時,必須通過 group by?明確分組規則否則會導致語法錯誤

2、常見的聚合函數

3、語法

select 聚合函數(字段列表) from 表名 ;

??????注意:NULL值是不參與所有聚合函數運算的

4、示例代碼

(1)統計該企業員工數量

select count(*) from emp; -- 統計的是總記錄數
select count(idcard) from emp; -- 統計的是idcard字段不為null的記錄數

(2)統計該企業員工的最大年齡

select max(age) from emp;

(3)統計西安地區員工的年齡之和

select sum(age) from emp where workaddress = '西安';

(二)分組查詢
1、語法

select 字段列表 from?表名 [where?條件] group?by?分組字段名 [having?分組后過濾條件];

2、where 與 having 區別

(1)執行時機不同:where是分組之前進行過濾,不滿足where條件,不參與分組;而having是分組之后對結果進行過濾。

(2)判斷條件不同:where不能對聚合函數進行判斷,而having可以。

3、注意事項

(1)分組之后,查詢的字段一般為聚合函數和分組字段,查詢其他字段無任何意義。[重點]

? ? ? ? 例如,我根據性別 gender 分組,分組結為男與女,所以此時就會得到得到男與女兩組即男女兩行;但這兩行并沒有數據,僅知道一行存放男性的數據、一行存放女性的數據。

????????此時使用聚合函數max(age),就會在這兩行呈現對應數據,即男性的最大年齡與女性的最大年齡;再接gender字段,則在兩行中分別填放男、女;

????????但如果接 workplace 字段,性別男或性別女會對應多個工作地址,系統根本不知道顯示哪個。所以 select 的后面只能接作為分組依據的字段聚合函數

(2)執行順序

????????where > group by> 聚合函數 > having?

(3)支持多字段分組,具體語法為:group by columnA,columnB

4、示例代碼

(1)根據性別分組 , 統計男性員工和女性員工的數量

select gender, count(*) from emp group by gender ;

(2)查詢年齡小于45的員工 , 并根據工作地址分組 , 獲取員工數量大于等于3的工作地址

select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count >= 3;

(3)統計各個工作地址上班的男性及女性員工的數量

select workaddress, gender, count(*) '數量' from emp group by gender , workaddress ;

四、排序查詢

????????排序在日常開發中是非常常見的一個操作,有升序排序,也有降序排序

1、語法

select 字段列表 from 表名 order by 字段1 排序方式1 , 字段2 排序方式2 ;

2、排序方式

asc:升序(默認值)

desc:降序

3、注意事項

(1)如果是升序,可以不指定排序方式ASC,因為默認升序;

(2)如果是多字段排序,當第一個字段值相同時,才會根據第二個字段進行排序 ;

4、示例代碼

(1)根據年齡對公司的員工進行升序排序

select * from emp order by age asc;
select * from emp order by age;

(2)根據入職時間, 對員工進行降序排序

select * from emp order by entrydate desc;

(3)根據年齡對公司的員工進行升序排序 , 年齡相同 , 再按照入職時間進行降序排序

select * from emp order by age asc , entrydate desc;

五、分頁查詢

????????分頁操作在業務系統開發時,也是非常常見的一個功能,我們在網站中看到的各種各樣的分頁條,后臺都需要借助于數據庫的分頁操作

1、語法

select 字段列表 from 表名 limit 起始索引, 查詢記錄數 ;

2、注意事項

(1)起始索引從0開始,起始索引 = (查詢頁碼 - 1)* 每頁顯示記錄數

(2)分頁查詢是數據庫的方言,不同的數據庫有不同的實現,MySQL中是LIMIT。

(3)如果查詢的是第一頁數據,起始索引可以省略,直接簡寫為 limit 10。

3、示例代碼

(1)查詢第1頁員工數據, 每頁展示10條記錄

select * from emp limit 0,10;
select * from emp limit 10;

(2)查詢第2頁員工數據, 每頁展示10條記錄,即起始索引 = (頁碼-1) * 頁展示記錄數

select * from emp limit 10,10;

六、DQL語言的實戰應用

(一)執行順序

????????在講解DQL語句的具體語法之前,我們已經講解了DQL語句的完整語法,及編寫順序,現在我們要來說明的是DQL語句在執行時的執行順序,也就是先執行哪一部分,后執行哪一部分。

(二)各個字句的作用

from:指定要查詢的表。

where:篩選滿足條件的行。

group by:按照指定列對結果進行分組。

having:分組后,篩選滿足條件的行。

select:選擇要返回的列。

order by:對結果進行排序。

????????所以說一條語句執行的完整過程是:

????????from 先決定查詢哪個表,where 篩選滿足條件的行,group by再對指定的列進行分組,沒有參與分組的列可以忽略了,因為根本select不出來,接著having 對分組后的結果進行二次篩選,篩選滿足條件的行;

????????在前置操作完成后,select 就可以選擇需要輸出的列;

????????order by可以對輸出的結果進行相應的排序,如果需要分頁,則可以使用limit。

(三)實際書寫代碼的思路

????????題目:編寫一個SQL查詢,找出入職日期在2022年之后,所在部門員工平均工資超過5200的部門,統計這些部門的員工數量,最后按照員工數量從多到少排序。以下是表的具體內容:

-- 創建員工表
create table 員工 (員工編號 int primary key,員工姓名 varchar(50),部門 varchar(50),工資 decimal(10, 2),入職日期 date
);-- 插入示例數據
insert into 員工表 (員工編號, 員工姓名, 部門, 工資, 入職日期)
values (1, '愛麗絲', '人力資源部', 5000, '2022-01-01'),(2, '鮑勃', '信息技術部', 6000, '2022-03-15'),(3, '查理', '人力資源部', 5500, '2022-05-20'),(4, '大衛', '信息技術部', 7000, '2022-07-10'),(5, '伊芙', '財務部', 4500, '2022-09-05');

????????寫代碼的思路其實就是“代碼的書寫順序”,語句的書寫順序符合的是人的思路,語句的執行順序符合的是計算機的邏輯。【重點】

? ? ? ? 我們可以把書寫代碼的過程分為三部分分組之前分組分組之后

? ? ? ? 分組之前:第一步要知道,需要輸出哪幾列從哪個表得到數據,即 select 與 from。根據“統計這些部門的員工數量”,可以知道,我們需要輸出的有兩列:部門、數量;數量需要使用聚合函數 count。接著,找出分組之前的篩選條件(where),是“入職日期在 2022 年之后”。

? ? ? ? 分組:然后要確定分組條件(group by)我們已經知道了,輸出的兩列是部門與數量,因為輸出的列除了聚合函數以外,就是分組條件所以分組條件是部門。

? ? ? ? 分組之后:確定分組后的篩選條件(having)排序規則(order by)接著由“所在部門員工平均工資超過5200的部門”可知,在分組之后,我們還要根據平均工資 5200 進行相應的篩選;最后根據員工數量的多少進行排序。

? ? ? ? 三步之后,即可得到以下代碼:

select department,count(employee_id) 
fromemployees
where hire_date >= '2022-01-01'
group by department
having avg(salary) > 5200
order by count(employee_id) desc;

????????以上即為數據查詢語言 DQL 的所有內容,我們首先對整體語句拆分,作逐個擊破;然后對其整體的執行過程書寫思路作講解,從而能在日常代碼書寫中,將語句寫出。

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

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

相關文章

LENOVO聯想ThinkBook 16 G6 ABP(21KK)恢復預裝OEM原廠Win11系統鏡像

適用機型&#xff1a;【21KK】 鏈接&#xff1a;https://pan.baidu.com/s/1lbvIh4KTbqm8EZQZfxvNIQ?pwd7vp0 提取碼&#xff1a;7vp0 聯想原裝系統自帶所有驅動、出廠主題壁紙、系統屬性聯機支持標志、Office辦公軟件、聯想瀏覽器、聯想電腦管家、聯想軟件商店、聯想智能引…

# 基于人臉關鍵點的多表情實時檢測系統

基于人臉關鍵點的多表情實時檢測系統 在計算機視覺領域&#xff0c;人臉表情識別技術已經取得了顯著的進展。它不僅可以用于娛樂應用&#xff08;如動態表情包生成&#xff09;&#xff0c;還能在心理健康監測、智能安防、人機交互等領域發揮重要作用。今天&#xff0c;我將分…

在 Ubuntu24.04 LTS 上 Docker Compose 部署基于 Dify 重構二開的開源項目 Dify-Plus

一、安裝環境信息說明 硬件資源&#xff08;GB 和 GiB 的主要區別在于它們的換算基數不同&#xff0c;GB 使用十進制&#xff0c;GiB 使用二進制&#xff0c;導致相同數值下 GiB 表示的容量略大于 GB&#xff1b;換算關系&#xff1a;1 GiB ≈ 1.07374 GB &#xff1b;1 GB ≈ …

SQL Server存儲過程和觸發器的使用

存儲過程 &#xff08;1&#xff09;創建存儲過程&#xff0c;使用Employees表中的員工人數來初始化一個局部變量&#xff0c;并調用這個存儲過程。 1. Create PROCEDURE test number1 int output --輸出參數&#xff0c;可以從程序中返回信息 2. As 3. begin 4. D…

子類是否能繼承

繼承 父類&#xff1a; 子 類 構造方法 非私有 不能繼承 私有&#xff08;private&#xff09;不能繼承 成員變量 非私有 能繼承 私有&…

2025年【山東省安全員C證】考試題及山東省安全員C證考試內容

在當今建筑行業蓬勃發展的背景下&#xff0c;安全生產已成為企業生存與發展的基石。安全員作為施工現場安全管理的直接責任人&#xff0c;其專業能力和資質認證顯得尤為重要。山東省安全員C證作為衡量安全員專業水平的重要標準&#xff0c;不僅關乎個人職業發展&#xff0c;更直…

Spring 中的 bean 生命周期

&#x1f331; 一、什么是 Bean 生命周期&#xff1f; 在 Spring 容器中&#xff0c;一個 Bean 從“創建 → 初始化 → 使用 → 銷毀”&#xff0c;經歷了完整的生命周期。 Spring 提供了 多個擴展點 讓你可以在這些階段做事情&#xff0c;比如注入資源、日志記錄、連接資源、清…

Media streaming mental map

Media streaming is a huge topic with a bunch of scattered technologies, protocols, and formats. You may feel like hearing fragments without seeing the big picture. Let’s build that mental map together — here’s a high-level overview that connects everyt…

AIDD-深度學習 MetDeeCINE 破譯代謝調控機制

深度學習 MetDeeCINE 破譯代謝調控機制 目錄 使用 FEP/REMD 和 DFT 方法準確預測藥物多靶點絕對結合自由能的新途徑。Scorpio 框架利用對比學習優化核苷酸序列表示&#xff0c;提升基因組分析效率&#xff0c;尤其在未知序列的分類和泛化能力上表現出色。LPM 模型整合多模態擾…

【2】搭建k8s集群系列(二進制)之安裝etcd數據庫集群

一、etcd服務架構 Etcd 是一個分布式鍵值存儲系統&#xff0c;Kubernetes 使用 Etcd 進行數據存儲&#xff0c;所以先 準備一個 Etcd 數據庫&#xff0c;為解決 Etcd 單點故障&#xff0c;應采用集群方式部署&#xff0c;這里使用 3 臺組建集群&#xff0c;可容忍 1 臺機器故障…

fastGPT—前端開發獲取api密鑰調用機器人對話接口(HTML實現)

官網文檔鏈接&#xff1a;OpenAPI 介紹 | FastGPT 首先按照文檔說明創建api密鑰 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

cpp自學 day19(多態)

一、基本概念 同一操作作用于不同的對象&#xff0c;產生不同的執行結果 &#x1f449; 就像「按F1鍵」&#xff1a;在Word彈出幫助文檔&#xff0c;在PS彈出畫筆設置&#xff0c;?同一個按鍵觸發不同功能 &#xff08;1&#xff09;多態類型 類型實現方式綁定時機?靜態多態…

Java 大視界 -- Java 大數據在航天遙測數據分析中的技術突破與應用(177)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

人臉考勤管理一體化系統(人臉識別系統,簽到打卡)

人臉考勤管理一體化系統 項目介紹 本項目是基于Flask、SQLAlchemy、face_recognition庫的人臉考勤管理一體化系統。 系統通過人臉識別技術實現員工考勤打卡、人臉信息采集、人臉模型訓練等功能。 項目采用前后端分離的技術框架&#xff0c;基于Flask輕量級Web框架搭建后端服務…

單調棧學習C++

目錄 一&#xff0c;每日溫度 二&#xff0c;下一個更大的元素I 三&#xff0c;下一個更大的元素II 四&#xff0c;接雨水 小結&#xff1a; 單調棧是一種特殊的棧結構&#xff0c;里面的元素按照單調遞增或者遞減的順序排列。常用于解決元素左邊或者右邊比它大或者小的問…

網絡釣魚攻擊的威脅和執法部門的作用(第一部分)

在當今的數字世界中&#xff0c;網絡犯罪分子不斷開發新技術來利用個人、企業和政府機構。 最普遍和最具破壞性的網絡犯罪形式之一是網絡釣魚——一種社會工程手段&#xff0c;用于欺騙人們提供敏感信息&#xff0c;例如登錄憑據、財務數據和個人詳細信息。 隨著網絡釣魚攻擊…

左值與右值,空間與數據

左值是空間&#xff0c;右值是數據 編程總是對“數據”&#xff0c;對"存放數據的空間"操作 a返回一個當前的數據&#xff0c;存放到一個臨時空間中&#xff0c;自身的空間中的數據再進行運算 a直接對自身空間中的數據進行運算 其余知識&#xff1a; 1.變量名的意…

無人機飛行術語科普!

一、基礎操作類 1. 炸機 指無人機意外墜毀或嚴重損壞&#xff08;如撞樹、撞樓、失控摔機等&#xff09;。 例句&#xff1a;“今天風太大&#xff0c;差點炸機&#xff01;” 2. 一鍵放生 調侃某些情況下無人機失控飛丟&#xff0c;無法找回&#xff08;源自某些品牌…

模擬算法(一):一維數組模擬

目錄 模擬的概念 例1&#xff1a;開關燈 算法思路&#xff1a; 代碼如下&#xff1a; 輸入輸出&#xff1a; 例2&#xff1a;序列操作和查詢 算法思路&#xff1a; 代碼如下&#xff1a; 輸入輸出&#xff1a; 例3&#xff1a;數組折疊 算法思路&#xff1a; 代碼如…

MySQL 基礎入門

寫在前面 關于MySQL的下載安裝和其圖形化軟件Navicat的下載安裝,網上已經有了很多的教程,這里就不再贅述了,本文主要是介紹了關于MySQL數據庫的基礎知識。 MySQL數據庫 MySQL數據庫基礎 MySQL數據庫概念 MySQL 數據庫&#xff1a; 是一個關系型數據庫管理系統 。 支持SQL語…