【MySQL】(8) 聯合查詢

一、聯合查詢的作用

? ? ? ? 由于范式的規則,數據分到多個表中,想要查詢完整的信息,就需要聯合查詢多張表。比如查詢學生的學生信息和所在班級的信息,就需要聯合查詢學生表和班級表。

二、聯合查詢過程

? ? ? ??案例:查詢學生姓名為孫悟空的詳細信息,包括學學個人信息和班級信息。

 # 課程表
insert into course (name) values ('Java'), ('C++'), ('MySQL'), ('操作系統'), ('計算機網絡'), ('數據結構');# 班級表
insert into class(name) values ('Java001班'), ('C++001班'), ('前端001班');# 學生表
insert into student (name, sno, age, gender, enroll_date, class_id) values ('唐三藏', '100001', 18, 1, '1986-09-01', 1),('孫悟空', '100002', 18, 1, '1986-09-01', 1),('豬悟能', '100003', 18, 1, '1986-09-01', 1),('沙悟凈', '100004', 18, 1, '1986-09-01', 1),('宋江', '200001', 18, 1, '2000-09-01', 2),('武松', '200002', 18, 1, '2000-09-01', 2),('李逹', '200003', 18, 1, '2000-09-01', 2),('不想畢業', '200004', 18, 1, '2000-09-01', 2);# 成績表
insert into score (score, student_id, course_id) values(70.5, 1, 1),(98.5, 1, 3),(33, 1, 5),(98, 1, 6),(60, 2, 1),(59.5, 2, 5),(33, 3, 1),(68, 3, 3),(99, 3, 5),(67, 4, 1),(23, 4, 3),(56, 4, 5),(72, 4, 6),(81, 5, 1),(37, 5, 5),(56, 6, 2),(43, 6, 4),(79, 6, 6),(80, 7, 2),(92, 7, 6);

1、確定聯合查詢的表

? ? ? ? 學生表 student 和班級表 class,進行笛卡爾積

2、過濾掉班級號不匹配的信息

? ? ? ? 學生表和班級表都有 id,需要指定是哪個表的 id。

3、篩選出指定學生

4、篩選出想要的字段,并精簡表名

三、內連接

? ? ? ? 上面的示例就是內連接。?

1、語法

select 字段 from 表1 別名1, 表2 別名2 where 連接條件 and 其他條件;select 字段 from 表1 別名1 [inner] join 表2 別名2 on 連接條件 where 其他條件;

2、示例1:查詢“唐三藏”同學的成績。

? ? ? ? 查詢的表:student、score。

? ? ? ? 確定連接條件需要查看表結構:s.id = sc.student_id。

? ? ? ?其他條件:s.name = '唐三藏'。

? ? ? ?字段:s.name、sc.score。

3、示例2:查詢所有同學的總成績、個人信息。

? ? ? ? 查詢的表:student、score。

? ? ? ? 連接條件:s.id = sc.student_id。

? ? ? ? 分組查詢:sc.student_id,① 唯一。② 對哪個表的列求和,就對那個表的列進行分組。

? ? ? ? 查詢字段:s.id、s.sno、s.name、s.age、s.gender、s.enroll_date、sc.s(分組后,這些字段的值對于某一組都是確定的,可以在分組后查詢)、avg(sc.score)(聚合函數的值也是確定的)。

? ? ? ? 查詢結果:

4、示例3:查詢所有同學的個人信息、每門課的成績

? ? ? ? 查詢表:student、score、course。

? ? ? ? 連接條件:

? ? ? ? 查詢結果:

? ? ? ? 也可以使用:

????????工作中盡量少對大表關聯查詢,最多關聯 3 個表,因為很耗資源。

四、外連接

  • 左外連接:以左表為基準,顯示左表所有值,顯示右表匹配的值,沒有匹配的就顯示 NULL。
  • 右外連接:跟左外連接反著來。
  • 全連接:左、右都全顯示,沒有匹配的就顯示 NULL。(MySQL 不支持

????????內連接是有匹配的才顯示,外連接沒有匹配的也會顯示 NULL。

1、語法

-- 左外連接,表1完全顯? 
select 字段 from 表名1 left join 表名2 on 連接條件;-- 右外連接,表2完全顯?
select 字段 from 表名1 right join 表名2 on 連接條件;

2、示例1:查詢沒有參加考試的同學信息

? ? ? ? 該查詢就無法使用內連接完成

? ? ? ? 查詢的表:student、score。

? ? ? ? 連接條件:s.id = sc.student_id。

? ? ? ? 沒有參加考試的同學:同學信息要全顯示,沒有匹配的成績顯示 NULL

????????其它條件:sc.score is?null。(注意不要用 =,null 與任意值做計算都是 null)

3、示例2:查詢沒有學生的班級

五、自連接

? ? ? ? 自連接是自己跟自己做笛卡爾積。上面的連接都是列與列的比較,有時候我們想要同一列中行與行的比較,但MySQL 又不支持直接比較行與行。就需要用自連接,把行轉為列。

? ? ? ? 比如我們想要比較同一個學生的 score 字段的不同課程成績:

1、示例1:顯示所有 'Java' 比 'MySQL' 分數低的學生和成績信息

? ? ? ? 查詢的表:score sc1、score sc2、student s。

? ? ? ? 連接條件:sc1.student_id = sc2.student_id。同一個學生的成績進行比較。(自連接)

? ? ? ? ? ? ? ? ? ? ? ? ? sc1.student_id = student.id。

? ? ? ? 其它條件:sc1.class_id = Java 的編號,sc2.class_id = MySQL 的編號。(選出對應的課程)。sc1.score <?sc2.score。

2、示例2:通過課程名實現示例1

? ? ? ? 有時候希望實現用戶輸入 2 個課程名稱,就能直接查詢的功能。所以先把 score 表與 class 表關聯后,在對課程名進行篩選。

????????查詢的表:score sc1、class c1、score sc2、class c2。

? ? ? ? 連接條件:sc1.class_id = c1.id(代表課程1)

? ? ? ? ? ? ? ? ? ? ? ? ? sc2.class_id = c2.id(代表課程2)

? ? ? ? ? ? ? ? ? ? ? ? ??sc1.student_id = sc2.student_id(代表同一個學生)

? ? ? ? 其他條件:c1.name = 'Java', c2.name = 'MySQL'

? ? ? ? ? ? ? ? ? ? ? ? ??sc1.score <?sc2.score

六、子查詢

? ? ? ? 子查詢就是一個 select 語句的結果是另一個 select 語句的條件,可以嵌套多層,也叫嵌套查詢。子查詢只是把多條的查詢語句合并成一條查詢語句,在工作中不能嵌套太多,影響查詢效率。

1、語法

????????in 表示內層的 select 返回的是一個結果集。

2、單行子查詢。

? ? ? ? 內層只返回一行數據

????????示例:查詢 '不想畢業' 的同班同學

? ? ? ? 先要查詢 '不想畢業' 是哪個班的(內層返回1行),然后根據班級 id 查詢同班同學(外層)。最后排除 '不想畢業' 的信息。

3、多行子查詢

? ? ? ? 內層返回多行數據

? ? ? ? 示例:查詢 'Java' 或 'MySQL' 的成績信息。

? ? ? ? 先查詢 'Java' 或 'MySQL' 的課程 id(返回2行),然后根據課程 id 查詢成績信息。

4、多列子查詢

? ? ? ? 內層返回多列數據,外層條件與內層查詢的列要匹配

? ? ? ? 示例:查詢重復錄入的分數。

? ? ? ? 首先查詢重復的成績信息(分數、學生 id、課程 id,相同的分為一組,統計每組數據行數,計數大于1的則重復),再根據內層的查詢結果在外層查詢完整的成績信息(成績 id,分數、學生 id、課程 id)。

5、在 from 子句中使用子查詢

? ? ? ? from 后面接查詢的表,這個表可以是真實表或者臨時表,而子查詢的結果就是存儲在臨時表中。

? ? ? ? 示例:查詢大于 'Java001' 班平均分的成績信息。

? ? ? ? 先查找班級為 'Java001班' 的學生成績,即將 class、score、student 關聯,選出 class.name = 'Java001班' 的數據行,再求平均值,平均值存儲在臨時表中。

? ? ? ? 再將平均值臨時表與 score 表進行內連接,最后使用其它條件 score > avg。

七、合并查詢

? ? ? ? 想讓多個 select 查詢結果集一起返回,就用合并查詢。

1、union(結果集去重)

? ? ? ? 準備一個與 student 結構一致的 student2?表:

? ? ? ? 插入數據:

insert into student2 (name, sno, age, gender, enroll_date, class_id) values
('唐三藏', '100001', 18, 1, '1986-09-01', 1),
('劉備', '300001', 18, 1, '1993-09-01', 3),
('張飛', '300002', 18, 1, '1993-09-01', 3),
('關羽', '300003', 18, 1, '1993-09-01', 3);

? ? ? ? student 表數據:

? ? ? ??

????????查詢 student 表中 id < 3 的學生和 student2 表中所有學生(因為 union 去重,所以唐三藏只有一條數據):

2、union all(結果集不去重)

3、注意事項

  • 單表可以使用合并語句,但是建議使用 or

  • 合并查詢時,多張表的一定要對齊

八、插入查詢結果

? ? ? ? 插入的數據是查詢的結果

? ? ? ? 示例:將 student 表中 'C++001班' 的學生數據加入到 student2 表中。

? ? ? ? 查看 student 表中 'C++001班' 的學生:

? ? ? ? 將查詢結果插入到 student2 表中(注意:不使用 values,null 表示給自增的 id 占位):

? ? ? ? 插入后的 student2:

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

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

相關文章

圖漾官網Sample_V1版本C++語言完整參考例子---單相機版本

文章目錄 1.參考例子 主要梳理了圖漾官網Sample_V1版本的例子 1.參考例子 主要增加了從storage區域讀取相機參數的設置&#xff0c;使用圖漾PercipioViewer軟件&#xff0c;如何將相機參數保存到srorage區&#xff0c;可參考鏈接&#xff1a;保存相機參數操作 保存參數設置 注…

關于本地端口啟動問題

如何啟動一個本地端口 1. Node.js (使用Express框架) 使用node.js的方法 注意&#xff1a;下列bash命令最好在管理員權限運行的cmd窗口中進行&#xff0c;否則可能會有權限錯誤 首先&#xff0c;確保您已經安裝了Node.js和npm。然后&#xff0c;創建一個新的Node.js項目并安…

產銷協同的作用是什么?又如何對各部門發揮作用?

目錄 一、產銷協同的對象有哪些&#xff1f; 1. 客戶需求 2. 市場趨勢 3. 供應鏈伙伴 4. 企業戰略目標 二、產銷協同的作用是什么&#xff1f; 1. 提高客戶滿意度 2. 降低企業成本 3. 增強市場競爭力 4. 優化資源配置 三、產銷協同對各部門怎么發揮作用&#xff1f;…

React Router v7 從入門到精通指南

一、設計思想與核心原理 1. 設計哲學 組件即路由&#xff1a;路由以 <Route> 組件形式聲明&#xff0c;與 React 組件樹深度集成聲明式導航&#xff1a;通過 <Link> 和 useNavigate 實現無刷新路由跳轉動態匹配機制&#xff1a;路徑參數、通配符、優先級匹配規則…

Python爬蟲實戰:獲取網yi新聞網財經信息并做數據分析,以供選股做參考

一、引言 在財經領域,股市信息對投資者意義重大。網yi新聞作為知名新聞資訊平臺,其股市板塊蘊含豐富的最新股市熱點信息。然而,依靠傳統人工方式從海量網頁數據中獲取并分析這些信息,效率低下且難以全面覆蓋。因此,利用爬蟲技術自動化抓取相關信息,并結合數據分析和機器…

Spring Boot Actuator - 應用監控與管理

一、 Spring Boot Actuator 概述 Spring Boot Actuator是Spring Boot 提供的生產級監控與管理工具集&#xff0c;用于實時監控和運維管理應用。Actuator 通過HTTP 端點&#xff08;或 JMX 端點&#xff09;暴露應用的健康狀態、性能指標、日志信息、環境配置等關鍵數據&#x…

不同類型插槽的聲明方法和對應的調用方式

在 Vue 3 中&#xff0c;slot 用于讓組件的使用者可以向組件內部插入自定義內容。Vue 3 提供了多種聲明和使用插槽的方式&#xff0c;下面為你詳細介紹不同類型插槽的聲明方法和對應的調用方式。 1. 匿名插槽 聲明方法 在組件模板中直接使用 標簽來定義匿名插槽&#xff0c;它可…

DeepSeek 聯手 Word,開啟辦公開掛模式

目錄 一、DeepSeek 與 Word 結合的神奇之處二、前期準備&#xff0c;萬事俱備2.1 了解 DeepSeek2.2 確認軟件版本2.3 賬號與密鑰獲取 三、接入方法全解析3.1 OfficeAI 插件接入3.1.1 下載與安裝插件3.1.2 配置 API 密鑰 3.2 VBA 宏接入3.2.1 啟用開發者工具3.2.2 調整信任設置3…

云鑰科技紅外短波工業相機

云鑰科技的紅外短波相機是一款基于短波紅外&#xff08;SWIR&#xff0c;波長范圍約1-3微米&#xff09;技術的成像設備&#xff0c;專為高精度檢測、全天候成像及特殊場景應用設計。以下從核心技術、性能參數、應用場景及產品優勢等方面進行詳細介紹&#xff1a; ??一、核心…

得物 小程序 6宮格 分析

聲明 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 逆向過程 部分python代碼 if result …

第十六屆藍橋杯 2025 C/C++B組 第二輪省賽 全部題解(未完結)

目錄 前言&#xff1a; 試題A&#xff1a;密密擺放 試題B&#xff1a;脈沖強度之和 試題C&#xff1a;25之和 試題D&#xff1a;旗幟 試題H&#xff1a;破解信息 前言&#xff1a; 這是我后續刷到的第二輪省賽的題目&#xff0c;我自己也做了一下&#xff0c;和第一輪省賽…

conda和bash主環境的清理

好的&#xff01;要管理和清理 Conda&#xff08;或 Bash&#xff09;安裝的包&#xff0c;可以按照以下步驟進行&#xff0c;避免冗余依賴&#xff0c;節省磁盤空間。 &#x1f4cc; 1. 查看已安裝的包 先列出當前環境的所有安裝包&#xff0c;找出哪些可能需要清理&#xff…

【Linux】服務自啟動設置的方式

關于服務自啟動設置的方式,本文將介紹兩種方法。分別是systemd服務單元文件的配置和起容器的方式。 目錄 1 systemd服務單元文件的配置 [Unit] 部分 [Service] 部分 [Install] 部分 2 docker 1 systemd

面試篇 - LoRA(Low-Rank Adaptation) 原理

1. 問題背景 大模型微調的挑戰&#xff1a; 預訓練模型&#xff08;如GPT-3、LLaMA&#xff09;參數量巨大&#xff08;數十億至萬億級&#xff09;&#xff0c;直接微調所有參數&#xff1a; 計算開銷大&#xff1a;需更新全部權重&#xff0c;GPU顯存不足。 存儲冗余&#…

Flink Docker Application Mode 命令解析

Flink官方提供的 Docker 運行 Flink Application Mode 模式&#xff0c;逐句解讀含義&#xff0c;并且給予操作實例&#xff1a; 以下是 Flink 官方提供的 Docker 命令&#xff0c;用于在 Application Mode 下運行 Flink Job&#xff08;standalone-job 作為 JobManager&#…

20250427 對話1: 何東山的宇宙起源理論

對話1: 何東山的宇宙起源理論 以下內容綜述了何東山團隊有關宇宙起源的主要理論成果、方法體系及其學術影響。 何東山團隊基于惠勒-德威特方程&#xff08;Wheeler–DeWitt Equation, WDWE&#xff09;和德布羅意–玻姆量子軌道理論&#xff0c;推導出帶有額外“量子勢”項的…

Python實例題:ebay在線拍賣數據分析

目錄 Python實例題 題目 實現思路 代碼實現 代碼解釋 read_auction_data 函數&#xff1a; clean_auction_data 函數&#xff1a; exploratory_analysis 函數&#xff1a; visualize_auction_data 函數&#xff1a; 主程序&#xff1a; 運行思路 注意事項 Python實…

2025年具身智能科技研報

引言 本報告系統梳理了2025年具身智能領域的最新進展&#xff0c;基于國內外權威新聞源與行業研究報告&#xff0c;通過數據可視化與深度分析相結合的方式&#xff0c;呈現該領域多維發展態勢。從技術突破層面看&#xff0c;多模態大模型的突破性進展為具身智能注入新動能&…

緩存與數據庫一致性深度解析與解決方案

緩存與數據庫一致性深度解析與解決方案 一、一致性問題本質與挑戰 1. 核心矛盾分析 緩存與數據庫一致性問題源于數據存儲的異步性與分布性&#xff0c;核心挑戰包括&#xff1a; 讀寫順序不確定性&#xff1a;并發場景下寫操作順序可能被打亂&#xff08;如先寫緩存后寫數據…

npm如何安裝pnpm

在 npm 中安裝 pnpm 非常簡單,你可以通過以下步驟完成: 1. 使用 npm 全局安裝 pnpm 打開終端(命令行工具),運行以下命令: npm install -g pnpm2. 驗證安裝 安裝完成后,可以檢查 pnpm 的版本以確保安裝成功: pnpm --version如果正確顯示版本號(如 8.x.x),說明安…