MySQL 復合查詢和內外連接 -- 子查詢,多表查詢,自連接,合并查詢,表的內外連接

目錄

1. 子查詢

1.1 單行子查詢

1.2 多行子查詢

1.3 多列子查詢

1.4 在 from 子句中使用子查詢

2. 多表查詢

3. 自連接?

4. 合并查詢

4.1 union

4.2 union all

5. 表的內連接

6. 表的外連接


????????下列先給出該博客中所用到的所有表的數據。

? ? ? ? (1)部門表(dept)

? ? ? ? (2)?員工表(emp)

? ? ? ? (3)?薪資等級表(salgrade)

1. 子查詢

? ? ? ? 子查詢是指嵌入在其他 sql 語句中的 select 語句,也叫嵌套查詢。

1.1 單行子查詢

? ? ? ? 單行子查詢:指的是在子查詢語句中,返回的數據只有一行。-- 返回一個字段并且該字段只有一個值。

? ? ? ? 例1:查詢與 SMITH 同一個部門的員工

? ? ? ? 如上圖,MySQL 會先執行括號中的子語句,返回一個 ename = 'SMITH' 的部門號 deptno,然后再執行外部 select 語句,篩選部門號與 SMITH 相同的數據。?

1.2 多行子查詢

? ? ? ? 多行子查詢:指的是在子查詢語句中,返回的數據為多行。-- 返回一個字段并且該字段有多個值。

? ? ? ? (1)in 關鍵字:用于判斷一個數據是否在某一個集合當中

? ? ? ? 例1:查詢和 10 號部門的工作崗位相同的員工名字,崗位,工資,部門號但是不包含 10 號部門自己的員工

? ? ? ? 上述的查詢可以這樣理解,(1)查出 10 號部門有哪些崗位。(2)篩選出 emp 表中與 10 部門中崗位相同崗位的員工。(3)排除 10 號部門自己的員工。?

? ? ? ? 上述的語句中,子查詢到的 job 不只是一個值,所以被稱為多行子查詢。

? ? ? ? (2)all 關鍵字:用于在判斷的時候所有數據都要滿足條件。

? ? ? ? 例2:查詢工資比 30 號部門所有員工的工資高的員工的姓名、工資和部門號。

? ? ? ? 上圖中的做法是先找到 30 號部門中最高的工資,然后再篩選出大于最高工資的員工。

? ? ? ? 而上述的做法是先篩選出 30 號部門中所有員工的工資,然后再次篩選大于 30 號部門中所有員工工資的其他員工。?

? ? ? ? (3)any 關鍵字:用于在判斷時是否至少有一條數據滿足條件。

? ? ? ? 例3:顯示工資比 30 號部門中至少一名員工工資高的員工的姓名、工資、和部門號(包含自己部門的員工)。

? ? ? ? 換句話說,就是顯示比 30 號部門中最低工資要高的員工。

? ? ? ? 上圖為先篩選出 30 號部門中最低工資,然后篩選大于最低工資的員工。

? ? ? ? 而這個圖是先篩選出 30 號部門所有員工的工資,然后判斷的時候表示 sal 大于 30 號部門中任意一名員工的工資高即可。?

1.3 多列子查詢

? ? ? ? 多列子查詢:子查詢中返回的數據為多列。-- 返回多個字段,該字段可以有一個值也可以有多個值。其實上述例子中的情況為單列單行自查徐,單列多行子查詢,所以多行和多列是不沖突的。

? ? ? ? 例1:查詢和 SMITH 的部門和崗位完全相同的其他員工

? ? ? ? 上述的子查詢可以稱為多列單行子查詢,先查出 SMITH 的部門號和崗位,在利用部門號和崗位篩選出員工,最后在篩選掉 SMITH 自己。?

1.4 在 from 子句中使用子查詢

? ? ? ? 上述所有的子查詢都是在 where 子句中充當篩選條件。但是子查詢也可以在 from 子句中使用,這里要清楚一個概念,任何時刻查詢出來的臨時數據,在邏輯上本質都可以當作一張表

? ? ? ? 例1:顯示每個部門中高于該部門平均工資的員工的姓名、部門、工資以及部門平均工資

? ? ? ? 上圖中先是將每個部門的部門號和部門平均工資篩選出來作為一張臨時表,再將兩張表作笛卡爾積,篩選出兩張表中部門號相同且工資大于部門平均工資的員工信息。?

2. 多表查詢

? ? ? ? 如下圖所示,得到的結果稱為笛卡爾積,也就是兩張表每條數據的兩兩組合

? ? ? ? 其中有些數據是沒有意義的,比如第一條數據,SMITH 是屬于 20 號部門的,所有拼接上部門表中部門號為 10 的數據就不是一條合理的數據,可以利用兩張表相同的字段(上圖中的部門號)進行有意義的數據篩選

? ? ? ? 例1:顯示員工名、員工工資以及所在部門(不僅僅是部門號,還有部門信息)。則需要從 emp 表和 dept 表中得出數據,所以可以用以下查詢語句進行查詢:

? ? ? ? 例2:顯示各個員工的姓名、工資及工資級別。則需要從 emp 表和 salgrade 表中得到數據,可以通過員工工資在那個工資等級的范圍內進行有效數據的篩選:

3. 自連接?

? ? ? ? 自連接就是將兩張相同的表作笛卡爾積。由于兩張表的名字相同,所以作笛卡爾積的時候需要進行重命名

? ? ? ? 如上兩張圖所示,當沒有重命名對相同的表作笛卡爾積會報錯,重命名之后作笛卡爾積就不會報錯。?

? ? ? ? 例1:顯示員工 FORD 上級領導的編號和姓名(mgr 是員工領導的編號)。這個需求可以分為兩步來進行,一是找打 FORD 上級領導的編號,二是使用這個編號找到領導的信息,而這些信息都在 emp 表中,所以語句如下:

? ? ? ? 也可以將 emp 表先進行自連接,然后通過 FORD 上級領導編號 mgr 和員工編號 empno 相等的方式找到 FORD 上級領導的信息,語句如下:

4. 合并查詢

4.1 union

? ? ? ? union:該操作符用于取得兩個結果集的并集。當使用該操作符時,會自動去掉結果集中重復的行

? ? ? ? 例1:將工資大于 2500 或職位是 MANAGER 的人找出來

? ? ? ? 上述是使用了兩個篩選條件篩選出結果。?

? ? ? ? 而上圖是使用 union 將兩個查詢的結果集合并起來。?

4.2 union all

? ? ? ? union all:該操作符用于取得兩個結果集的并集。但是該操作符不對結果集中重復行去重

? ? ? ? 上述兩種合并查詢的時候列字段的個數和屬性必須相同才能進行拼接。?

5. 表的內連接

? ? ? ? 上述多表進行笛卡爾積之后都需要一個 where 語句進行有效數據的篩選,其實就叫做內連接,但是為了方便給其規定了一種內連接語法

select 字段 from 表1 inner join 表2 on 連接條件 and 其他條件;

? ? ? ? 例1:顯示 SMITH 的名字和部門名稱

? ? ? ? 上圖為之前使用 where 子句的寫法。

? ? ? ? 這個是使用內連接語法的寫法。?

6. 表的外連接

? ? ? ? (1)左外連接:在兩張表進行笛卡爾積之后,左表的數據完全顯示

select 字段 from 表名1 left join 表名2 ?on 連接條件;

? ? ? ? 如上圖所示,現在有兩張表,一個學生表,一個成績表,需要將學生表中的所有行數據篩選出來,就算學生沒有成績也需要篩選出來,這時候就可以使用左外連接

? ? ? ? (2)右外連接:?在兩張表進行笛卡爾積之后,右表的數據完全顯示

select 字段 from 表名1 right join 表名2 ?on 連接條件;

? ? ? ? 現在需要將成績表中所有行數據篩選出來,就算成績沒有對應的學生也要將右表的所有行進行顯示。

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

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

相關文章

【STM32+LAN9252+HAL庫】EtherCAT從站搭建 保姆級教程

目錄 一、生成協議棧及XML文件 二、使用stm32CuboMX配置外設 三、協議棧移植 鑒于本人對EtherCAT的掌握程度十分有限,這篇文章僅作為我搭建基礎從站的過程記錄不做更多講解。本文內容主要為SPI模式的基礎搭建,更多深入的學習資料和細節,大家…

【LeetCode 熱題 100】239. 滑動窗口最大值——(解法二)滑動窗口+單調隊列

Problem: 239. 滑動窗口最大值 題目:給你一個整數數組 nums,有一個大小為 k 的滑動窗口從數組的最左側移動到數組的最右側。你只可以看到在滑動窗口內的 k 個數字。滑動窗口每次只向右移動一位。返回滑動窗口中的最大值 。 【LeetCode 熱題 100】239. 滑…

MySQL 8.0 連接 5.x 服務器認證問題

總的來說,答案是:可以,但是需要特別注意認證方式的兼容性問題。 MySQL 8.0 引入了新的默認認證插件 caching_sha2_password,而 MySQL 5.x(及更早版本)使用的是 mysql_native_password。當你用一個 8.0 的客…

Spring原理揭秘(一)

什么是spring? spring框架是一個輕量級的開源的JavaEE框架。 所謂輕量級則是:占用空間小,代碼侵入性低,代碼耦合度低,降低代碼復雜度,可以輕易適配多種框架。 隨著spring的不斷發展,它所占用…

Visual Studio Code自用搜索技巧整理

多文件跨行搜索 用途 在多個日志文件中搜索跨行日志 方法 1.用VS Code打開待搜索文件所在的目錄; 2.按快捷鍵(CtrlShiftF)打開全局搜索; 3.點擊搜索框右側的開啟正則表達式; 4.輸入正則表達式,例如&…

Axure PR 9 驗證碼登錄 案例

大家好,我是大明同學。 這期內容,我們來用Axure來制作一個短信驗證登錄頁面的小案例。 驗證碼登錄小案例 創建手機號輸入框所需的元件 1.打開一個新的 RP 文件并在畫布上打開 Page 1。 2.在元件庫中拖出一個矩形元件,選中矩形元件&#xf…

監聽器模式

1. 問題背景 假設我們有一個 銀行賬戶管理系統,該系統需要監控用戶賬戶余額的變動,并在發生變動時,自動執行一些相關的操作,比如發送 余額變動通知(如短信、郵件等)。為了實現這一功能,我們希望…

帕魯杯應急響應賽題:知攻善防實驗室

一、背景信息 在這個跳躍的數字舞臺上,數據安全成了政企單位穩航的重要壓艙石。某政企單位,作為一艘駛向未來 的巨輪,對數據的把控絲毫不敢松懈。眼下,我們即將啟航一場無與倫比的探險——“信息安全探索之 旅”。 這趟旅程的目的…

【硬核數學】2.2 深度學習的“微積分引擎”:自動微分與反向傳播《從零構建機器學習、深度學習到LLM的數學認知》

歡迎來到本系列的第七篇文章。在上一章,我們用張量武裝了我們的線性代數知識,學會了如何描述和操作神經網絡中的高維數據流。我們知道,一個神經網絡的“前向傳播”過程,就是輸入張量經過一系列復雜的張量運算(矩陣乘法…

DAY 45 Tensorboard使用介紹

浙大疏錦行https://blog.csdn.net/weixin_45655710知識點回顧: tensorboard的發展歷史和原理tensorboard的常見操作tensorboard在cifar上的實戰:MLP和CNN模型 作業:對resnet18在cifar10上采用微調策略下,用tensorboard監控訓練過程…

2023年全國碩士研究生招生考試英語(一)試題總結

文章目錄 題型與分值分布完形填空錯誤 1:考察連詞 or 前后內容之間的邏輯關系錯誤2:錯誤3:錯誤4:這個錯得最有價值,因為壓根沒讀懂錯誤5:學到的短語: 仔細閱讀排序/新題型翻譯小作文大作文 題型…

react-數據Mock實現——json-server

什么是mock? 在前后端分離的開發模式下,前端可以在沒有實際后端接口的支持下先進行接口數據的模擬,進行正常的業務功能開發 json-server實現數據Mock json-server是一個node的包,可以在不到30秒內獲得零編碼的完整Mock服務 實現…

使用POI導入解析excel文件

首先校驗 /*** 校驗導入文件* param file 上傳的文件* return 校驗結果,成功返回包含成功狀態的AjaxResult,失敗返回包含錯誤信息的AjaxResult*/private AjaxResult validateImportFile(MultipartFile file) {if (file.isEmpty()) {return AjaxResult.er…

從0開始學習計算機視覺--Day06--反向傳播算法

盡管解析梯度可以讓我們省去巨大的計算量,但如果函數比較復雜,對這個損失函數進行微分計算會變得很困難。我們通常會用反向傳播技術來遞歸地調用鏈式法則來計算向量每一個方向上的梯度。具體來說,我們將整個計算過程的輸入與輸入具體化&#…

企業流程知識:《學習觀察:通過價值流圖創造價值、消除浪費》讀書筆記

《學習觀察:通過價值流圖創造價值、消除浪費》讀書筆記 作者:邁克魯斯(Mike Rother),約翰舒克(John Shook) 出版時間:1999年 歷史地位:精益生產可視化工具的黃金標準&am…

Day02_C語言IO進程線程

01.思維導圖 02.將當前的時間寫入到time. txt的文件中,如果ctrlc退出之后,在再次執行支持斷點續寫 1.2022-04-26 19:10:20 2.2022-04-26 19:10:21 3.2022-04-26 19:10:22 //按下ctrlc停止,再次執行程序 4.2022-04-26 20:00:00 5.2022-04-26 2…

FFmpeg中TS與MP4格式的extradata差異詳解

在視頻處理中,extradata是存儲解碼器初始化參數的核心元數據,直接影響視頻能否正確解碼。本文深入解析TS和MP4格式中extradata的結構差異、存儲邏輯及FFmpeg處理方案。 📌 一、extradata的核心作用 extradata是解碼必需的參數集合&#xff0…

【CV數據集介紹-40】Cityscapes 數據集:助力自動駕駛的語義分割神器

🧑 博主簡介:曾任某智慧城市類企業算法總監,目前在美國市場的物流公司從事高級算法工程師一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

SAP月結問題9-FAGLL03H與損益表中研發費用金額不一致(FAGLL03H Bug)

SAP月結問題9-FAGLL03H與損益表中研發費用金額不一致(S4 1709) 財務反饋,月結后核對數據時發現FAGLL03H導出的研發費用與損益表中的研發費用不一致,如下圖所示: 對比FAGLL03H與損益表對應的明細,發現FAGLL03H與損益表數據存在倍數…

HTML inputmode 屬性詳解

inputmode 是一個 HTML 屬性&#xff0c;用于指定用戶在編輯元素或其內容時應使用的虛擬鍵盤布局類型。它主要影響移動設備和平板電腦的輸入體驗。 語法 <input inputmode"value"> <!-- 或 --> <textarea inputmode"value"></texta…