MySQL多表查詢案例

多表查詢

本文介紹了多表查詢中的表關系概念和操作方法。主要內容包括:1.三種表關系類型(一對多、多對多、一對一)及其實現方式;2.多表查詢的四種連接方式(內連接、左外連接、右外連接、自連接)及語法;3.子查詢的使用方法;4.通過員工-部門-薪資等級表的實際案例,演示了9種典型查詢場景的實現方式,包括基礎查詢、條件篩選、分組統計、子查詢應用等。案例涵蓋了從簡單到復雜的多表查詢操作,展示了SQL在數據關聯分析中的強大功能。

多表關系

概念

一對多(多對一)

一張表中的一列可以和另外一張表中多條數據關聯,拿學生表和成績表舉例,一個學生有多個成績。

案例:部門與員工

多對多

拿學生表和科目表舉例,一個學生可以選擇多門課程,一個課程也可以被很多學生選擇;多對多關系實現需要借助第三張中間表。中間表至少包含兩個字段,將多對多的關系,拆成一對多的關系

案例:學生與課程

建立一個中間表

一對一

一張表中的一條數據對應另外一張表中的一列數據,比如一個人只有一張身份證,一張身份證對應一個人。一對一關系比較少見,因為一對一這種關系的表可以合并成一張表

多表查詢概述

內連接

兩張表交集的部分

隱式

select 字段列表 from 表一,表二 where 條件;

顯式

?select 字段列表 from 表一 inner join 表二 on 連接條件;

外連接

左外:左表所有數據包含交集部分

select 字段列表 from 表一 left join 表二 on 條件;

右外:右表所有數據包含交集部分

select 字段列表 from 表一 right join 表二 on 條件;

自連接

自連接查詢,顧名思義,就是自己連接自己,也就是把一張表連接查詢多次。

自連接的查詢語法:

?SELECT 字段列表 FROM 表A 別名A JOIN 表A 別名B ON 條件 ... ;

子查詢

SQL語句中嵌套SELECT語句,稱為嵌套查詢,又稱子查詢。

SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 ); 1

多表查詢案例

數據準備

emp員工表

create table emp(
id int auto_increment comment 'ID' primary key,
name varchar(50) not null comment '姓名',
age int comment '年齡',
job varchar(20) comment '職位',
salary int comment '薪資',
entrydate date comment '入職時間',
managerid int comment '直屬領導ID',
dept_id int comment '部門ID'
)comment '員工表';
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
dept(id);
INSERT INTO emp (id, name, age, job,salary, entrydate, managerid, dept_id)
VALUES
(1, '金庸', 66, '總裁',20000, '2000-01-01', null,5),
(2, '張無忌', 20, '項目經理',12500, '2005-12-05', 1,1),
(3, '楊逍', 33, '開發', 8400,'2000-11-03', 2,1),
(4, '韋一笑', 48, '開發',11000, '2002-02-05', 2,1),
(5, '常遇春', 43, '開發',10500, '2004-09-07', 3,1),
(6, '小昭', 19, '程序員鼓勵師',6600, '2004-10-12', 2,1),
(7, '滅絕', 60, '財務總監',8500, '2002-09-12', 1,3),
(8, '周芷若', 19, '會計',48000, '2006-06-02', 7,3),
(9, '丁敏君', 23, '出納',5250, '2009-05-13', 7,3),
(10, '趙敏', 20, '市場部總監',12500, '2004-10-12', 1,2),
(11, '鹿杖客', 56, '職員',3750, '2006-10-03', 10,2),
(12, '鶴筆翁', 19, '職員',3750, '2007-05-09', 10,2),
(13, '方東白', 19, '職員',5500, '2009-02-12', 10,2),
(14, '張三豐', 88, '銷售總監',14000, '2004-10-12', 1,4),
(15, '俞蓮舟', 38, '銷售',4600, '2004-10-12', 14,4),
(16, '宋遠橋', 40, '銷售',4600, '2004-10-12', 14,4),
(17, '陳友諒', 42, null,2000, '2011-10-12', 1,null);

dept部門表

salgrade薪資等級表

create table salgrade(
grade int,
losal int,
hisal int
) comment '薪資等級表';
insert into salgrade values (1,0,3000);
insert into salgrade values (2,3001,5000);
insert into salgrade values (3,5001,8000);
insert into salgrade values (4,8001,10000);
insert into salgrade values (5,10001,15000);
insert into salgrade values (6,15001,20000);
insert into salgrade values (7,20001,25000);
insert into salgrade values (8,25001,30000);

查詢案例

1、查詢員工的姓名、年齡、職位、部門信息
: emp , dept
連接條件: emp.dept_id = dept.id
select emp.name,age,job,dept.name from db5.emp,dept where emp.dept_id=dept.id;

2、查詢年齡小于30歲的員工的姓名、年齡、職位、部門信息(顯式內連接)
: emp , dept
連接條件: emp.dept_id = dept.id
select emp.name,age,job,d.name from db5.emp inner join dept d on emp.dept_id = d.id where age<30;

3、查詢擁有員工的部門ID、部門名稱
: emp , dept
連接條件: emp.dept_id = dept.id
select distinct d.id,d.name from dept d,db5.emp e where d.id=e.dept_id;

4、查詢所有年齡大于40歲的員工, 及其歸屬的部門名稱; 如果員工沒有分配部門, 也需要展示出
(外連接)
: emp , dept
連接條件: emp.dept_id = dept.id
select e.name,e.age,d.name from dept d left join emp e on d.id = e.dept_id where e.age>40;

5、查詢所有員工的工資等級
: emp , salgrade
連接條件 : emp.salary >= salgrade.losal and emp.salary <= salgrade.hisal
select e.*,s.* from db5.emp e,salgrade s where e.salary >= s.losal and e.salary <= s.hisal;
#或者
select e.*,s.* from db5.emp e,salgrade s where e.salary between s.losal and s.hisal;

6、查詢 "研發部" 所有員工的信息及 工資等級
: emp , salgrade , dept
連接條件 : emp.salary between salgrade.losal and salgrade.hisal ,
emp.dept_id = dept.id
查詢條件 : dept.name = '研發部'
select e.*,d.name,s.grade from emp e , dept d, salgrade s where e.dept_id=d.id and (e.salary between s.losal and s.hisal) and d.name='研發部';

7、查詢 "研發部" 員工的平均工資
: emp , dept
連接條件 : emp.dept_id = dept.id
select avg(salary) '平均工資',d.name from dept d left join emp e on d.id = e.dept_id where d.name='研發部';

8、查詢工資比 "滅絕" 高的員工信息。
. 查詢 "滅絕" 的薪資
select salary from emp where name='滅絕';
. 查詢比她工資高的員工數據
select * from emp where salary>(select salary from emp where name='滅絕');

9、查詢比平均薪資高的員工信息
. 查詢員工的平均薪資
. 查詢比平均薪資高的員工信息
select avg(salary) from emp;
select * from emp where salary>(select avg(salary) from emp);

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

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

相關文章

Dify 從入門到精通(第 36/100 篇):Dify 的插件生態擴展

Dify 從入門到精通&#xff08;第 36/100 篇&#xff09;&#xff1a;Dify 的插件生態擴展 Dify 入門到精通系列文章目錄 第一篇《Dify 究竟是什么&#xff1f;真能開啟低代碼 AI 應用開發的未來&#xff1f;》介紹了 Dify 的定位與優勢第二篇《Dify 的核心組件&#xff1a;從…

【已解決】在Spring Boot工程中,若未識別到resources/db文件夾下的SQL文件

在Spring Boot工程中&#xff0c;若未識別到resources/db文件夾下的SQL文件&#xff0c;通常與資源路徑配置、構建工具設置或代碼加載方式有關。以下是逐步排查和解決方案&#xff1a;??1. 確認SQL文件存放路徑??Spring Boot默認從類路徑&#xff08;classpath:&#xff09…

【Java】網絡編程(4)

1. 再談 UDP 報文長度&#xff1a;也是 2 個字節&#xff0c; 0 - 65535&#xff0c;也就是 64 kb。這表示一個 UDP 數據包一次最多只能傳輸 64 kb 的數據校驗和&#xff1a;驗證數據是否在傳輸過程中發生修改。數據在傳輸過程中可能受到信號干擾&#xff0c;發生 “比特翻轉”…

QT(事件)

一、事件前言事件是QT的三大機制之一&#xff0c;一定程度上信號和槽也屬于事件的一種 QT中的事件指哪些&#xff1a;窗口關閉&#xff0c;窗口顯示&#xff0c;敲擊鍵盤&#xff0c;點擊鼠標左鍵、鼠標右鍵、鼠標滾輪&#xff0c;文件拖放等等1、事件循環QT中的所有事件&#…

基于 Vue2+Quill 的富文本編輯器全方案:功能實現與樣式優化

在 Web 開發中&#xff0c;富文本編輯器是內容管理系統、博客平臺等應用的核心組件。本文將詳細介紹如何基于 Vue 和 Quill 構建一個功能完善、樣式精美的富文本編輯器&#xff0c;重點解決字體字號選項冗長、樣式不美觀及功能完整性問題&#xff0c;提供可直接部署使用的完整方…

C#內嵌字符串格式化輸出

內嵌字符串格式輸出 double speedOfLight 299792.458;System.Globalization.CultureInfo.CurrentCulture System.Globalization.CultureInfo.GetCultureInfo("nl-NL"); string messageInCurrentCulture $"The speed of light is {speedOfLight:N3} km/s.&quo…

ThreeJS程序化生成城市大場景底座(性能測試)

一、簡介基于矢量geojson數據構建建筑、植被、道路等&#xff0c;實現城市場景底座。涉及渲染的性能優化無非就是眾所周知的那些事兒。視錐剔除、mesh合并、減少draw call、四叉樹、八叉樹、數據壓縮、WebWorker、著色器優化等。下面是對東莞市數十萬建筑以及海量3D樹的渲染測試…

?電風扇離線語音芯片方案設計與應用場景:基于 8 腳 MCU 與 WTK6900P 的創新融合

?電風扇離線語音芯片方案設計與應用場景&#xff1a;基于 8 腳 MCU 與 WTK6900P 的創新融合一、引言在智能家居領域蓬勃發展的當下&#xff0c;用戶對于家電產品的智能化和便捷性需求日益增長。傳統的電風扇控制方式&#xff0c;如按鍵操作或遙控器控制&#xff0c;在某些場景…

(第四篇)spring cloud之Consul注冊中心

目錄 一、介紹 二、安裝 三、整合代碼使用 1、創建服務提供者8006 2、創建服務消費者80 3、Eureka、zookeeper和consul的異同點 一、介紹 Consul 是一套開源的分布式服務發現和配置管理系統&#xff0c;由 HashiCorp 公司用 Go 語言開發。它提供了微服務系統中的服務治理…

NAT 和 PNAT

核心概念與背景 IPv4 地址枯竭&#xff1a; IPv4 地址空間有限&#xff08;約 42.9 億個&#xff09;&#xff0c;早已分配殆盡。NAT/PNAT 是緩解此問題的最重要、最廣泛部署的技術。私有 IP 地址空間&#xff1a; IANA 保留了三個 IPv4 地址段專供私有網絡內部使用&#xff08…

windows系統創建FTP服務

一丶開啟FTP功能 控制面板->程序與功能->啟用或關閉windows功能->Internet Information Services->勾選FTP服務器二丶創建FTP服務 1丶控制面板->windows工具->Internet Information Services (IIS) 管理器2丶網站->添加FTP站點->輸入對應內容3丶點擊新…

DeepSeek補全IBM MQ 9.4 REST API 執行命令的PPT

DeepSeek補全了我在網上找到的PPT的一頁內容&#xff0c;幫了大忙了。人機協同&#xff0c;人工智能可以協助人更好的做事。下面的內容是講解IBM MQ REST API 執行IBM MQ命令的PPT: MQSC for REST Tailored RESTful support for individual MQ objects and actions are in the …

【swift】SwiftUI動畫卡頓全解:GeometryReader濫用檢測與Canvas繪制替代方案

SwiftUI動畫卡頓全解&#xff1a;GeometryReader濫用檢測與Canvas繪制替代方案一、GeometryReader的性能陷阱深度解析1. 布局計算機制2. 動畫中的災難性表現二、GeometryReader濫用檢測系統1. 靜態代碼分析器2. 運行時性能監控三、Canvas繪制優化方案1. 基礎Canvas實現2. 性能優…

悄悄話、合唱層次感:聲網空間音頻解鎖語聊新玩法

作為語聊房主播&#xff0c;我曾覺得線上相聚差點意思。多人開麥時聲音混雜&#xff0c;互動缺真實感&#xff0c;觀眾留不住&#xff0c;自己播著也沒勁。直到平臺接入聲網空間音頻&#xff0c;一切改觀&#xff0c;觀眾說像在真實房間聊天&#xff0c;留存率漲 35%&#xff0…

【工具】多圖裁剪批量處理工具

文章目錄工具核心功能亮點1. 批量上傳與智能管理2. 精準直觀的裁剪控制3. 一鍵應用與批量處理為什么這個工具能提升你的工作效率&#xff1f;統一性與一致性保證節省90%以上的時間專業級功能&#xff0c;零學習成本實際應用場景電子商務攝影工作內容創作教育領域技術優勢完全在…

如何提升需求分析能力

要系統性地提升需求分析能力&#xff0c;核心在于實現從一個被動的“需求記錄員”&#xff0c;向一個主動的、價值驅動的“業務問題解決者”的深刻轉型。要完成這一蛻變&#xff0c;必須在五個關鍵領域進行系統性的修煉與實踐&#xff1a;培養“穿透表象”的系統思維能力、掌握…

另類的pdb恢復方式

cdb中有pdb1,pdb2 需求&#xff1a;希望將在線熱備份pdb1的備份集a&#xff0c;恢復成pdb3&#xff0c;使得cdb中有pdb1,2,3 參考到的&#xff1a;RMAN備份恢復典型案例——跨平臺遷移pdb - 墨天輪 ORA-65122: Pluggable Database GUID Conflicts With The GUID Of An Existi…

HarmonyOS 實戰:用 @Observed + @ObjectLink 玩轉多組件實時數據更新

摘要 在鴻蒙&#xff08;HarmonyOS&#xff09;應用開發中&#xff0c;實時數據更新是一個繞不開的話題&#xff0c;尤其是在你封裝了很多自定義組件、需要多個組件之間共享和同步數據的場景里。過去我們可能會依賴父子組件直接傳參或全局狀態管理&#xff0c;但這樣寫會讓代碼…

云原生俱樂部-雜談2

說實話&#xff0c;雜談系列可能會比較少&#xff0c;因為畢竟大部分時間都是上的線上&#xff0c;迄今為止也是&#xff0c;和雷老師與WH的交流不是很多。這個系列僅僅是我在做其他筆記部分無聊的時候來寫的&#xff0c;內容也沒有規劃過&#xff0c;隨想隨寫。倒不是時間太多…

波浪模型SWAN學習(1)——模型編譯與波浪折射模擬(Test of the refraction formulation)

SWAN模型編譯與波浪折射模擬&#xff08;Test of the refraction formulation&#xff09;編譯過程算例簡介參數文件文件頭&#xff08;HEADING&#xff09;計算區域和網格地形數據邊界條件物理模塊設置輸出設置執行參數模擬結果由于工作原因&#xff0c;最近開始接觸波浪模型&…