【MySQL|第四篇】DQL語句(二)——數據查詢語言

4、排序分頁:

(1)排序:

????????查詢數據的時候進行排序,就是根據某個字段的值,按照升序或者降序的情況將記錄顯示出來

語法:

????????select col_name,...

????????from tb_name

????????order by col_name [asc|desc]

注意事項:

1. order by語句,只對查詢記錄顯示調整,并不改變查詢結果,所以執行權最低,最后執行

2. 排序的默認值是asc:表示升序(可以不寫),desc:表示降序

3. 如果有多個列排序,后面的列排序的前提是前面的列排好序以后有重復(相同)的值

????????先升序排第一列,如果第一列有重復的值,再降序排第二列,以此類推

案例:查看員工的id,名字和薪資,按照薪資的降序排序顯示,工資相同就按名字升序排

????????select id,last_name,salary

????????from s_emp

????????order by salary desc,last_name;

(2)分頁:

????????因為表中數據過多,我們并不能一次全都查詢出來交給前端去展示,而是需要每次按照提前設置好的要求,查詢一部分數據給用戶,當用戶點擊下一頁的時候,再查出下一部分數據給用戶。

語法:

????????select 字段列表

????????from 表名

????????limit 起始索引, 查詢記錄數;

案例1:查詢s_emp表中,前5條數據

????????select id,last_name

????????from s_emp

????????limit 0,5;

????????或者

????????select id,last_name

????????from s_emp

????????limit 5;

案例2:查詢s_emp表中第二頁數據,每頁顯示5條數據

????????select id,last_name

????????from s_emp

????????limit 5,5;

案例3:查詢s_emp表中,第n頁,每頁顯示size條數據

????????select id,last_name

????????from s_emp

????????limit (n-1)*size,size;

注意事項:

1. 起始索引從0開始.計算公式 : 起始索引 = (查詢頁碼 - 1* 每頁顯示記錄數

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

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

5、多表查詢:

多表查詢,又稱表聯合查詢,即一條sql語句涉及到的表有多張,表中的數據通過特定的連接,進行聯合顯示。

注意事項:阿里開發規范中要求多表連接必須給表起別名

(1)笛卡爾積:

????????在數學中,兩個集合XY的笛卡尓積(Cartesian product),又稱直積,表示為X × Y

????????例如,假設集合A={a, b},集合B={0, 1, 2},則兩個集合的笛卡爾積為{(a, 0), (a,1), (a, 2), (b, 0), (b, 1), (b, 2)}。

????????在數據庫中,如果直接查詢倆張表,那么其查詢結果就會產生笛卡爾積。例如這里:s_emp表中25條數據,s_dept表中12條數據,查詢倆張表,數據倆倆組合,會得到300條數據

????????其實,s_emp表中的每一條數據,和s_dept表中的每一條數據進行倆倆組合,這里面大多數的數據是沒有意義的,為了這種避免笛卡爾積的產生,在多表查詢的時候,可以使用連接查詢來解決這個問題。

注意:多表查詢本質上將多張小表組合成一張大表,同時要借助連接查詢去除無效的笛卡爾積。

(2)等值連接:

????????等值連接又稱為內連接(自然連接),將兩張具有關聯關系的列的數據連接起來,連接查詢where子句中用來連接兩個表的條件稱為連接條件或者連接謂詞,當連接運算為=的時候,稱之為等值連接。

語法:

????????select col_name....

????????from table_name1,table_name2

????????where [table_name1].[col_name]=[table_name2].[col_name]

????????或

????????select col_name....

????????from table_name1 inner join table_name2

????????on [table_name1].[col_name]=[table_name2].[col_name]

案例:查詢員工的名字、部門編號、部門名字

????????select last_name,dept_id,s_dept.id,name

????????from s_emp,s_dept

????????where s_emp.dept_id=s_dept.id;

為了表述的更加清楚,可以給每張表起別名

????????select se.last_name,se.dept_id,sd.id,sd.name

????????from s_emp se,s_dept sd

????????where se.dept_id=sd.id;

(3)不等值連接:

????????兩張沒有關聯關系(主外鍵)的表,通過某個特定場景的業務連接起來,為不等值連接

假設數據庫中還有一張工資等級表, salgrade

工資等級表 salgrade

  • gradeName 列表示等級名稱
  • losal 列表示這個級別的最低工資數
  • hisal 列表示這個級別的最高工資數
#新建等級表create table salgrade(id int primary key auto_increment,name varchar(20),minsal float,maxsal float);#往表中插入數據insert into salgrade(name,minsal,maxsal) values('初級工程師',0,1000);insert into salgrade(name,minsal,maxsal) values('中級工程師',1001,2000);insert into salgrade(name,minsal,maxsal) values('高級工程師',2001,3000);#刪除表drop table salgrade;

案例:查詢出員工的名字、職位、工資、工資等級名稱

select e.id, e.last_name, e.title, e.salary, s.name
from s_emp e, salgrade s
where e.salary between s.minsal and s.maxsal;

(4)自連接:

????????自連接就是一張表,自己和自己連接后進行查詢

案例1:查詢每個員工的名字以及員工對應的管理者的名字

????????select s1.id,s1.last_name,s2.id,s2.last_name manager_name

????????from s_emp s1,s_emp s2

????????where s1.manager_id = s2.id;

# 可理解s1為員工表,s2為經理表

(5)內連接:

內連接查詢:查詢兩表或多表中交集部分數據。

內連接從語法上可以分為: 隱式內連接 與 顯式內連接

隱式內連接語法:

? ? ? ? select 字段列表

????????from table_name1,table_name2

????????where 條件 ... ;

顯式內連接語法:

????????select 字段列表

????????from table_name1 [inner] join table_name2

????????on 連接條件 ... ;

案例1:查詢員工的姓名及所屬的部門名稱

隱式內連接實現

select se.id,se.last_name,se.dept_id,sd.id,sd.name
from s_emp se,s_dept sd
where se.dept_id = sd.id;

顯式內連接實現

select se.id,se.last_name,se.dept_id,sd.id,sd.name
from s_emp se inner join s_dept sd
on se.dept_id = sd.id;

注意事項:

一旦為表起了別名,就不能再使用表名來指定對應的字段了,此時只能夠使用別名來指定字段。

(6)外連接:

????????外連接分為,左外連接、右外連接

????????左外連接:保留表關系中所有匹配的數據記錄,包含關聯左邊表中不匹配的數據記錄

語法:

????????select col_name....

????????from table_name1 left [outer] join table_name2

????????on [table_name1].[col_name]=[table_name2].[col_name]

案例1:查詢所有員工,以及對應的部門的名字,沒有部門的員工也要顯示出來

#這里的outer,是可以省去不寫
select se.id,se.last_name,se.dept_id,sd.name
from s_emp se left outer join s_dept sd
on se.dept_id=sd.id;

????????

可以看出,左邊的第一張表中,新增的一條數據tom,原來等值連接不上,現在也被查詢出來了。

? ? ? ? 右外連接:保留表關系中所有匹配的數據記錄,包含關聯右邊表中不匹配的數據記錄。

語法:

????????select col_name....

????????from table_name1 right [outer] join table_name2

????????on [table_name1].[col_name]=[table_name2].[col_name]

案例1:查詢所有員工 以及對應的部門的名字,沒有任何員工的部門也要顯示出來

select se.id,se.last_name,se.dept_id,sd.namefrom s_emp se right outer join s_dept sdon se.dept_id=sd.id;

可以看出,右邊的第二張表中,新增的一條數據st,原來等值連接不上,現在也被查詢出來了

6、單行函數:

????????函數在計算機語言的使用中貫穿始終,函數可以把我們經常使用的代碼封裝起來,需要的時候直接調用即可。這樣既提高了代碼效率,又提高了可維護性 。

????????在 SQL 中我們也可以使用函數對檢索出來的數據進行函數操作。使用這些函數,可以極大地提高用戶對數據庫的管理效率。

????????SQL中的函數可以分為兩類:單行函數和聚合函數,本章我們重點討論單行函數。

????????單行函數接受參數返回一個結果,只對一行進行變換,每行返回一個結果,可以嵌套,參數可以是一列或一個值。

(1)數值函數:

案例展示:

案例1:返回-20的絕對值?select abs(-20);

案例2:返回32.56的四舍五入保留小數點后-2位??select round(32.56,-2);

案例3:將10轉化為二進制、八進制、十六進制??select bin(10),oct(10),hex(10);

(2)字符串函數:

案例展示:

案例1:將hello轉化為大寫,將GOOD轉化為小寫??select upper('hello'),lower('GOOD');

案例2:將helloworld字符串拼接??select concat('hello','world');

案例3:去除字符串中前后的空白字符??select trim(' hello world ');

案例4:將helloworld從第3個位置開始截取??select substr('helloworld',3);

(3)時間日期:

案例1:獲取當前時間,包括年月日??select curdate(),current_date();

案例2:獲取當前時間,包括小時、分鐘、秒??select curtime(),current_time();

案例3:獲取當前系統時間??select now(),sysdate();

案例4:獲取世間標準日期和時間??select utc_date(),utc_time();

案例5:獲取當前系統時間戳??select unix_timestamp();

案例6:將當前時間轉化為時間戳??select unix_timestamp(now());

案例7:將時間戳轉化為時間 select from_unixtime(1661789223);

案例8:返回當前是那年?select year(now());

案例9:返回當前時間的年月select extract(year_month from now());

案例10:將當前時間轉化為年--select date_format(now(),'%Y-%m-%d');

fm格式:

(4)流程控制:

????????流程處理函數可以根據不同的條件,執行不同的處理流程。

案例1:員工薪水大于1500,顯示藍領,否則白領

select id,last_name,salary,if(salary>2000,'藍領','白領')from s_emp;

案例2:顯示員工年薪薪水為null的用0計算

select id,last_name,salary,ifnull(salary,0)*13 sum_salfrom s_emp;

案例3:員工薪水大于2500,顯示金領,1500-2500藍領,否則白領

select id,last_name,salary,case when salary>2500 then '金領'when salary<=2500 and salary>=1500 then '藍領'else '白領' endas "rank"from s_emp;

案例4:按照員工編號指定3組員工

select id,last_name,salary,case id%3 when 1 then '1group'when 2 then '2group'else '3group' endas "group"from s_emp;

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

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

相關文章

百度文心X1.1發布!實測深度思考能力!

文章目錄背景模型實測效果事實性指令跟隨智能體模型技術解讀基準測試文心飛槳攜手共進總結背景 9月9日&#xff0c;WAVE SUMMIT深度學習開發者大會上&#xff0c;百度首席技術官、深度學習技術及應用國家工程研究中心主任王海峰正式發布了文心大模型X1.1深度思考模型&#xff…

基于Java+SpringBoot的B站評論系統架構設計與實踐深度解析

基于JavaSpringBoot的B站評論系統架構設計與實踐深度解析 前言 作為國內領先的視頻分享平臺&#xff0c;B站的評論系統承載著海量用戶的實時互動需求。本文將從架構師角度&#xff0c;基于JavaSpringBoot技術棧&#xff0c;深度解析評論系統的技術實現方案、核心難點及擴展性設…

賦能數字孿生:Paraverse平行云實時云渲染平臺LarkXR,提供強大的API與SDK用于二次開發和深度集成

在數字孿生滲透千行百業的今天&#xff0c;構建一個高保真、實時交互、可大規模訪問的虛擬孿生世界已成為核心需求。然而&#xff0c;對于開發者而言&#xff0c;從零開始構建實時云渲染、海量模型加載、數據雙向互通、多端適配、網頁嵌套&#xff0c;平臺定制化等底層技術難關…

基于Nginx實現反向代理、負載均衡與動靜分離完整部署指南

基于Nginx實現反向代理、負載均衡與動靜分離完整部署指南 文章目錄基于Nginx實現反向代理、負載均衡與動靜分離完整部署指南一、架構規劃與環境準備1.1 架構設計思路1.2 服務器規劃1.3 環境依賴二、部署Nginx負載均衡器2.1 安裝Nginx依賴包2.2 創建Nginx專用用戶2.3 編譯安裝Ng…

HTML5國慶網站源碼

一. 網站概述 本國慶主題網站以弘揚愛國主義精神為核心&#xff0c;通過豐富多元的交互功能與視覺設計&#xff0c;打造沉浸式國慶體驗空間。網站采用單頁面架構&#xff0c;通過平滑滾動實現各模塊的無縫銜接&#xff0c;涵蓋首頁、知識科普、互動體驗等十大功能板塊&#xf…

MySQL收集processlist記錄的shell工具mysql_collect_processlist

文章目錄安裝指南日志文件內容日志分析參考1.簡單檢索2.統計不同狀態的語句的數量3.按照時間統計注意事項倉庫這是一個純腳本工具&#xff0c;用于從MySQL的information_schema.processlist視圖中定期收集數據并保存到本地日志文件。支持MYSQL5.7-9.4版本。 template copy fro…

工業RFID現場網關模塊:實現多協議互通,128臺讀寫設備互連!

隨著工業4.0進程加速&#xff0c;企業對生產系統集成度的需求不斷增長。在工廠中常需整合不同品牌PLC、驅動器、機械臂、讀寫器等設備系統&#xff0c;這其中就會涉及到如Profinet、EtherNet/IP、EtherCAT、Modbus TCP、CC-LINK IE等不同通訊協議連接。雖可將部分設備直接與PLC…

黑馬點評高級篇第7節課 輸入INFO replication 顯示0個從節點,但是在7002節點又顯示它已經是7001節點的從節點了

問題描述在黑馬點評高級篇第七節課的這個位置??????&#xff0c;當我輸入INFO replication 的時候下面本應該顯示為connected_slaves: 2&#xff0c;但是我的顯示的是0。然后當我切換到7002端口的節點時&#xff0c;又顯示7002就是7001的從節點解決我看彈幕上說在7002和7…

pcb線路板打樣廠家有哪些?

在電子制造產業升級浪潮中&#xff0c;PCB打樣環節的效率與品質直接影響產品迭代速度。本文聚焦國內五家具備核心技術競爭力的PCB打樣廠商&#xff0c;深度解析其差異化優勢&#xff0c;為硬件開發者提供精準選型參考。獵板PCB作為國家高新技術企業&#xff0c;獵板PCB在高頻高…

【python實用小腳本-211】[硬件互聯] 桌面壁紙×Python夢幻聯動|用10行代碼實現“開機盲盒”自動化改造實錄(建議收藏)

1. 場景故事 “作為HR&#xff0c;我曾每天手動換壁紙提神&#xff0c;直到某天忙到忘記&#xff0c;結果被同事截圖當‘黑歷史’…” → 轉折點&#xff1a;用Python調用Windows API寫了個“隨機壁紙機”&#xff0c;開機自啟&#xff0c;每次登錄都是新風景&#xff0c;現在截…

集成學習 —— 梯度提升樹GBDT、XGBoost

目錄 一、梯度提升樹 1、殘差提升樹 Boosting Decision Tree 2、梯度提升樹 Gradient Boosting Decision Tree 二、構建案例 1、 初始化弱學習器(CART樹)&#xff1a; 2、 構建第1個弱學習器 3、 構建第2個弱學習器 4、 構建第3個弱學習器 5、 構建最終弱學習器 6、 構…

【船類】監控錄像下船舶類別檢測識別數據集:近7k圖像,6類,yolo標注

監控錄像下船舶類別檢測識別數據集概述 數據集包含 6900監控錄像下船舶類別圖像&#xff0c;6個標注類別&#xff1a; 散貨船、集裝箱船、漁船、雜貨船、礦砂船、客船 標注格式&#xff1a;yolo txt&#xff08;格式可轉&#xff0c;可直接訓練&#xff09; 標注工具&#…

用戶故事設計范式(As a... I want to... So that...)

我們來詳細解析一下用戶故事&#xff08;User Story&#xff09;&#xff0c;包括其結構、為什么重要、如何編寫好的用戶故事以及一個完整的示例。1. 用戶故事的基本結構&#xff1a;三段式模板最經典和通用的用戶故事模板就是您提到的三段式&#xff1a;As a [角色]:目的&…

【OpenGL】LearnOpenGL學習筆記20 - 實例化 Instancing

上接&#xff1a;https://blog.csdn.net/weixin_44506615/article/details/151156446?spm1001.2014.3001.5501 完整代碼&#xff1a;https://gitee.com/Duo1J/learn-open-gl | https://github.com/Duo1J/LearnOpenGL 實例化 Instancing 以往當我們在場景中要大量繪制相同模型…

MySQL主從不一致?DBA急救手冊:14種高頻坑點+3分鐘定位+無損修復!

MySQL「主從不一致」最常見的成因、快速定位思路以及可落地的修復手段 一、為什么會不一致&#xff1f;14 類高頻場景類別典型表現/觸發條件快速自檢命令/日志1. 從庫被寫入業務或 DBA 直連從庫 UPDATE/INSERTSHOW VARIABLES LIKE read_only 應為 ON2. 復制過濾規則主從 binlog…

AI 網站源碼:探秘 SUNO,革新音樂創作的 AI 先鋒

在當今數字化浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;正深刻地重塑各個領域&#xff0c;音樂創作也不例外。SUNO 作為一款引領潮流的音樂生成工具&#xff0c;宛如一顆璀璨新星&#xff0c;在音樂創作的天空中熠熠生輝&#xff0c;為音樂愛好者和創作者們帶來了前…

Linux:malloc背后的實現細節

目錄前言一、先搞懂基礎&#xff1a;程序的內存布局&#xff08;關鍵前提&#xff01;&#xff09;二、malloc的核心實現步驟&#xff08;4層架構拆解&#xff09;第1層&#xff1a;用戶調用 → 標準庫處理&#xff08;glibc的malloc.c&#xff09;第2層&#xff1a;堆內存池管…

什么是X11轉發?

X11 轉發&#xff08;X11 forwarding&#xff0c;ssh -X&#xff09;是一種 SSH 協議功能&#xff0c;它允許用戶在遠程服務器上運行圖形化應用程序&#xff0c;并通過本地的顯示設備和輸入輸出設備與這些程序進行交互。它被開發者廣泛使用&#xff0c;用于在大規模、異構的服務…

Android Kotlin 動態注冊 Broadcast 的完整封裝方案

在 Kotlin 中封裝動態注冊的 Broadcast 可以讓你更優雅地管理廣播的注冊和注銷&#xff0c;避免內存泄漏。下面是一個完整的封裝方案&#xff1a; 基礎封裝類 import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import …

VGG改進(8):融合Self-Attention的CNN架構

1. 自注意力機制簡介自注意力機制是Transformer架構的核心組件&#xff0c;它能夠計算輸入序列中每個元素與其他所有元素的相關性。與CNN的局部感受野不同&#xff0c;自注意力機制允許模型直接建立遠距離依賴關系&#xff0c;從而捕獲全局上下文信息。在計算機視覺中&#xff…