學習MySQL第七天

?夕陽無限好? ? ? ? ? ?

? ? ? ? ? ? 只是近黃昏

一、子查詢

? ? ? ? 1.1 定義

????????將一個查詢語句嵌套到另一個查詢語句內部的查詢

? ? ? ? 我們通過具體示例來進行演示,這一篇博客更側重于通過具體的小問題來引導大家獨立思考,然后熟悉子查詢相關的知識點

? ? ? ? 1.2 問題1

????????誰的工資比Tom高

方式1:
SELECT name,salary
FROM employees
WHERE name='Tom'SELECT NAME,salary
FROM employees
WHERE salary > 500方式2:自連接
SELECT t2.NAME,t2.salary
from employees t1,employees t2
WHERE t2.salary > t1.salary  AND 
t1.name = 'Tom'方式3:子查詢
# 外部
SELECT name,salary
FROM employees
WHERE salary > (
# 內部SELECT salary FROM employeesWHERE name ='Tom'
)

? ? ? ? 1.3 稱謂的規范

? ? ? ? (1) 外查詢(主查詢)、內查詢(子查詢)?
? ? ? ? (2) 子查詢(內查詢)在主查詢之前一次執行完成
? ? ? ? (3) 子查詢的結果被主查詢(外查詢)使用

? ? ? ? 1.4 注意事項

? ? ? ? (1) 子查詢要包含在括號內
????????(2) 將子查詢放在比較條件的右側,提高可讀性
? ? ? ? (3) 單行操作符對應單行子查詢,多行操作符對應多行子查詢

? ? ? ? 1.5 子查詢分類

????????1.單行子查詢和多行子查詢
????????子查詢部分只返回一個值供使用,就比如C語言中副函數每次return只返回一個值,這種情況叫做單行子查詢
????????2.根據內查詢是否被執行多次
????????分為相關子查詢和不相關子查詢
????????不相關子查詢:子查詢固定返回的值不受外部的影響

二、單行子查詢

? ? ? ? 2.1 單行操作符: = > < >= <=> !=
? ? ? ? 2.2 練習1:查詢工資大于id為3的員工工資的員工信息
SELECT id,name,salary
from employees
WHERE salary > (SELECT salaryFROM employeesWHERE id=3
)

? ? ? ? 2.3 練習2:返回top_id與id=3相同的員工的工資比他多的 name、id
SELECT name,id,salary
FROM employees
WHERE top_id = (SELECT top_idFROM employeesWHERE id = 3
) 
AND salary > (SELECT salaryFROM employeesWHERE id =3
)

? ? ? ? 2.4 練習3:返回公司里面工資最少的人的信息,包含name、id、top_id、salary
SELECT name,id,top_id,salary
FROM employees
WHERE salary = (SELECT MIN(salary)FROM employees
)

? ? ? ? 2.5 問題4:查詢最低工資大于top_id為1的部門的最低工資的部門top_id和最低工資
SELECT top_id,MIN(salary)
FROM employees
GROUP BY top_id
HAVING MIN(salary) > (SELECT MIN(salary)FROM employeesWHERE top_id = 1
)

三、多行子查詢

? ? ? ? 3.1 引言

? ? ? ? 與單行查詢不同的是,內查詢返回多行,也就是多個值,你用一個可以選擇其中的一個作為你的選擇,你也可以全部都接收,但需要用同等數量的字段來接受

? ? ? ? 3.2 命令語句

? ? ? ? (1) IN 等于列表中的任意一個
? ? ? ? (2) ANY 只選一個
? ? ? ? (3) SOME ANY的別名和ANY作用一樣
? ? ? ? (4) ALL 全部選擇

? ? ? ? 3.3 練習: 這里演示一個 IN
# 查找工資等于各個top_id中最低工資的人員姓名
SELECT name,salary
FROM employees
WHERE salary IN (SELECT MIN(salary)FROM employeesGROUP BY top_id
)

? ? ? ? 3.4?練習: 這里演示ALL
按照top_id進行分組,求平均工資最小的那一組
SELECT top_id,AVG(salary)
FROM employees
GROUP BY top_id
HAVING avg(salary)<=ALL(# 小于所有部門的最小值就相當于值最小的那個組SELECT AVG(salary)FROM employeesGROUP BY top_id 					
)

????????3.5 注意

? ? ? ? 這里我們要特別注意下空值問題,下面的題目中,我們的department_id中包含一個空值,當我們對其內查詢時,就會出現錯誤,此時我們可以通過加注判斷條件來避免

? ? ? ? 報錯演示

# 查詢已經分配好部門的員工信息
# 示例
SELECT name,department_id
FROM employees
WHERE department_id NOT IN (SELECT department_idFROM employees
)

四、相關子查詢

? ? ? ? 4.1 引入

? ? ? ? 在這里,我們采用具體練習的方法來帶領大家一步一步的深入了解什么是相關子查詢

? ? ? ? 4.2 練習1:查詢員工中工資大于本部門平均工資的員工的name,salary

? ? ? ? 我們先從查詢員工中工資大于本公司平均工資的員工的name,salary 開始,方便大家進行對比發現

# 查詢員工中工資大于本公司平均工資的員工的name,salary
SELECT name,salary
FROM employees
WHERE salary > (SELECT AVG(salary)FROM employees
)

?

? ? ? ? 然后我們用兩步逐步去對比發現相關子查詢特點

# 方式1:
SELECT name,salary,top_id
FROM employees t1
WHERE salary > (SELECT AVG(salary)FROM employees t2WHERE top_id = t1.top_id
)

? ? ? ? 這里是利用查詢過程中,是一條一條進行的特點,通過自連接的方式,建立類似于for循環的方式,動態更新AVG(salary),實現分部門、逐員工檢查

# 方式2
SELECT e.name,e.salary
FROM employees e,(# 在此中的查詢以一張表對的形式返回,定義別名為 t,同時后面比較時需要用AVG(salary),但是出了這個括號,AVG(salary)就將作為一個列名出現,但是不能被原樣調用,所以取一個別名 avg。SELECT top_id,AVG(salary) avgFROM employeesGROUP BY top_id) t
WHERE e.top_id = t.top_id
AND e.salary > t.avg

? ? ? ? 4.3 練習2
# 查詢員工的id,salary,按照departments中的manger_id進行排序
SELECT id,salary
FROM employees 
ORDER BY (SELECT mange_idFROM departmentsWHERE employees.department_id=departments.department_id
)

? ? ? ? 在上面命令基礎上,展示更多的信息

SELECT id,salary,name,(SELECT nameFROM departmentsWHERE employees.department_id=departments.department_id
) 'names',(SELECT mange_idFROM departmentsWHERE employees.department_id=departments.department_id
) 'mange_id'
FROM employees 
ORDER BY (SELECT mange_idFROM departmentsWHERE employees.department_id=departments.department_id
)

? ? ? ? 4.4 小結論

????????在 SELECT中,除了 LIMIT 和 GROUP BY中,其他位置都可以聲明子查詢

? ? ? ? 4.5?EXISTS / NOT EXISTS
# 查詢公司所有管理者的信息
SELECT DISTINCT t1.name, t1.top_id, t1.id
FROM employees t1,employees t2
WHERE t1.id = t2.top_id

? ? ? ? (1) EXISTS首先執行外層查詢,再執行內層查詢?

? ? ? ? (2) 取出外層表中的第一行數據,代入子查詢中執行

? ? ? ? (3) 如果子查詢返回結果,則保留該行(對于EXISTS)或排除該行(對于NOT EXISTS)

? ? ? ? (4) 接著處理外層表中的下一行,重復上述過程?

五、結語

????????山不在高,有仙則名;水不在深,有龍則靈。希望我們都可以通過自己的努力成為那個關鍵的要素

須知少日拏云志,曾許人間第一流。我們還年輕,我們還有無限可能!

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

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

相關文章

Nginx 常見面試題

一、nginx常見錯誤及處理方法 1.1 404 bad request 一般原因&#xff1a;請求的Header過大 解決辦法&#xff1a; 配置nginx.conf 相關設置1. client_header_buffer_size 16k; 2. large_client_header_buffers 4 64k;1.2 413 Request Entity Too Large 一般原因&#xff1…

LeetCode 每日一題 2025/3/31-2025/4/6

記錄了初步解題思路 以及本地實現代碼&#xff1b;并不一定為最優 也希望大家能一起探討 一起進步 目錄 3/31 2278. 字母在字符串中的百分比4/1 2140. 解決智力問題4/2 2873. 有序三元組中的最大值 I4/3 2874. 有序三元組中的最大值 II4/4 1123. 最深葉節點的最近公共祖先4/5 1…

Docker Compose 常用命令 運行 docker-compose.yaml

Docker Compose 中有兩個重要的概念 服務 (service)&#xff1a;一個應用的容器&#xff0c;實際上可以包括若干運行相同鏡像的容器實例。 項目 (project)&#xff1a;由一組關聯的應用容器組成的一個完整業務單元&#xff0c;在 docker-compose.yml 文件中定義。 為了更方便…

深度學習中的 Batch 機制:從理論到實踐的全方位解析

一、Batch 的起源與核心概念 1.1 批量的中文譯名解析 Batch 在深度學習領域標準翻譯為"批量"或"批次"&#xff0c;指代一次性輸入神經網絡進行處理的樣本集合。這一概念源自統計學中的批量處理思想&#xff0c;在計算機視覺先驅者Yann LeCun于1989年提出…

Unity Internal-ScreenSpaceShadows 分析

一、代碼結構 // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)Shader "Hidden/Internal-ScreenSpaceShadows" {Properties {_ShadowMapTexture ("", any) "" {} // 陰影貼圖紋理&…

Token+JWT+Redis 實現鑒權機制

TokenJWTRedis 實現鑒權機制 使用 Token、JWT 和 Redis 來實現鑒權機制是一種常見的做法&#xff0c;尤其適用于分布式應用或微服務架構。下面是一個大致的實現思路&#xff1a; 1. Token 和 JWT 概述 Token&#xff1a;通常是一個唯一的字符串&#xff0c;可以用來標識用戶…

RPC與其他通信技術的區別,以及RPC的底層原理

1、什么是 RPC&#xff1f; 遠程過程調用&#xff08;RPC&#xff09; 是一種協議&#xff0c;它允許程序在不同計算機之間進行通信&#xff0c;讓開發者可以像調用本地函數一樣發起遠程請求。 通過 RPC&#xff0c;開發者無需關注底層網絡細節&#xff0c;能夠更專注于業務邏…

簡潔的 PlantUML 入門教程

評論中太多朋友在問&#xff0c;我的文章中圖例如何完成的。 我一直用plantUML,也推薦大家用&#xff0c;下面給出一個簡潔的PlantUML教程。 &#x1f331; 什么是 PlantUML&#xff1f; PlantUML 是一個用純文本語言畫圖的工具&#xff0c;支持流程圖、時序圖、用例圖、類圖、…

互聯網三高-高性能之JVM調優

1 運行時數據區 JVM運行時數據區是Java虛擬機管理的內存核心模塊&#xff0c;主要分為線程共享和線程私有兩部分。 &#xff08;1&#xff09;線程私有 ① 程序計數器&#xff1a;存儲當前線程執行字節碼指令的地址&#xff0c;用于分支、循環、異常處理等流程控制? ② 虛擬機…

淺談StarRocks 常見問題解析

StarRocks數據庫作為高性能分布式分析數據庫&#xff0c;其常見問題及解決方案涵蓋環境部署、數據操作、系統穩定性、安全管控及生態集成五大核心領域&#xff0c;需確保Linux系統環境、依賴庫及環境變量配置嚴格符合官方要求以避免節點啟動失敗&#xff0c;數據導入需遵循格式…

P1332 血色先鋒隊(BFS)

題目背景 巫妖王的天災軍團終于卷土重來&#xff0c;血色十字軍組織了一支先鋒軍前往諾森德大陸對抗天災軍團&#xff0c;以及一切沾有亡靈氣息的生物。孤立于聯盟和部落的血色先鋒軍很快就遭到了天災軍團的重重包圍&#xff0c;現在他們將主力只好聚集了起來&#xff0c;以抵…

大文件上傳之斷點續傳實現方案與原理詳解

一、實現原理 文件分塊&#xff1a;將大文件切割為固定大小的塊&#xff08;如5MB&#xff09; 進度記錄&#xff1a;持久化存儲已上傳分塊信息 續傳能力&#xff1a;上傳中斷后根據記錄繼續上傳未完成塊 塊校驗機制&#xff1a;通過哈希值驗證塊完整性 合并策略&#xff1a;所…

【動手學深度學習】卷積神經網絡(CNN)入門

【動手學深度學習】卷積神經網絡&#xff08;CNN&#xff09;入門 1&#xff0c;卷積神經網絡簡介2&#xff0c;卷積層2.1&#xff0c;互相關運算原理2.2&#xff0c;互相關運算實現2.3&#xff0c;實現卷積層 3&#xff0c;卷積層的簡單應用&#xff1a;邊緣檢測3.1&#xff0…

Opencv計算機視覺編程攻略-第十一節 三維重建

此處重點討論在特定條件下&#xff0c;重建場景的三維結構和相機的三維姿態的一些應用實現。下面是完整投影公式最通用的表示方式。 在上述公式中&#xff0c;可以了解到&#xff0c;真實物體轉為平面之后&#xff0c;s系數丟失了&#xff0c;因而無法會的三維坐標&#xff0c;…

大廠不再招測試?軟件測試左移開發合理嗎?

&#x1f449;目錄 1 軟件測試發展史 2 測試左移&#xff08;Testing shift left&#xff09; 3 測試右移&#xff08;Testing shift right&#xff09; 4 自動化測試 VS 測試自動化 5 來自 EX 測試的寄語 最近兩年&#xff0c;互聯網大廠的招聘中&#xff0c;測試工程師崗位似…

windows10下PointNet官方代碼Pytorch實現

PointNet模型運行 1.下載源碼并安裝環境 GitCode - 全球開發者的開源社區,開源代碼托管平臺GitCode是面向全球開發者的開源社區,包括原創博客,開源代碼托管,代碼協作,項目管理等。與開發者社區互動,提升您的研發效率和質量。https://gitcode.com/gh_mirrors/po/pointnet.pyto…

git pull 和 git fetch

關于 git pull 和 git fetch 的區別 1. git fetch 作用&#xff1a;從遠程倉庫獲取最新的分支信息和提交記錄&#xff0c;但不會自動合并或修改當前工作目錄中的內容。特點&#xff1a; 它只是更新本地的遠程分支引用&#xff08;例如 remotes/origin/suyuhan&#xff09;&am…

前端開發中的單引號(‘ ‘)、雙引號( )和反引號( `)使用

前端開發中的單引號&#xff08;’ &#xff09;、雙引號&#xff08;" "&#xff09;和反引號&#xff08; &#xff09;使用 在前端開發中&#xff0c;單引號&#xff08;’ &#xff09;、雙引號&#xff08;" "&#xff09;和反引號&#xff08; &…

程序化廣告行業(69/89):DMP與PCP系統核心功能剖析

程序化廣告行業&#xff08;69/89&#xff09;&#xff1a;DMP與PCP系統核心功能剖析 在數字化營銷浪潮中&#xff0c;程序化廣告已成為企業精準觸達目標受眾的關鍵手段。作為行業探索者&#xff0c;我深知其中知識的繁雜與重要性。一直以來&#xff0c;都希望能和大家一同學習…

Amodal3R ,南洋理工推出的 3D 生成模型

Amodal3R 是一款先進的條件式 3D 生成模型&#xff0c;能夠從部分可見的 2D 物體圖像中推斷并重建完整的 3D 結構與外觀。該模型建立在基礎的 3D 生成模型 TRELLIS 之上&#xff0c;通過引入掩碼加權多頭交叉注意力機制與遮擋感知注意力層&#xff0c;利用遮擋先驗知識優化重建…