【MySQL】內連接和外連接

內連接和外連接

  • 前言
  • 正式開始
    • 內連接
    • 外連接
      • 左外連接
      • 右外連接

在這里插入圖片描述

前言

前一篇講多表查詢的時候講過笛卡爾積,其實笛卡爾積就算一種連接,不過前一篇講的時候并沒有細說連接相關的內容,本篇就來詳細說說表的連接有哪些。

本篇博客中主要用到的還是前一篇中的三張表:
在這里插入圖片描述
雇員表emp:
在這里插入圖片描述

部門表dept:
在這里插入圖片描述
薪資等級表:
在這里插入圖片描述

這三張表中沒有明確指出外鍵和主鍵約束,但是是有外鍵和主鍵約束的樣子的:
在這里插入圖片描述
其中不同薪資對應不同的薪資等級。

這三張表就不細說了,等會用例子慢慢了解。

正式開始

內連接

內連接實際上就是利用where子句對兩種表形成的笛卡兒積進行篩選,我前面博客中的查詢都是內連
接,這也是在開發過程中使用的最多的連接查詢。

說一下語法:

select 字段 from1 inner join2 on 連接條件 and 其他條件;

這里的連接條件能用and不斷級聯。

我前一篇中所講的語法格式和這里的語法格式不太一樣,我前一篇對兩個表進行連接的時候是這樣(假如說是對emp表和dept表進行連接,如果看不懂建議先看一下我前一篇博客:【MySQL】多表查詢、子查詢、自連接、合并查詢詳解,包含大量示例,包你會):
在這里插入圖片描述

這里給沒有看過我上一篇博客的同學簡單解釋一下:
在這里插入圖片描述

如果是用剛剛的語法的話就是這樣:
在這里插入圖片描述

解釋一下:
在這里插入圖片描述

兩種語法產生的效果都是一樣的。不過更推薦用inner join這個語法,至于為什么等會就知道了。

來個例子:

題目>>顯示SMITH的名字和部門名稱

首先明確一點,SMITH的名字在emp表中:
在這里插入圖片描述

但是部門名稱在dept表中:
在這里插入圖片描述

所以說這是一個多表查詢的問題,需要對這兩張表進行連接:
在這里插入圖片描述
但是這里沒有添加連接條件,就會導致產生一些無效的記錄。

比如說SMITH對應記錄有三條,每條都有著不同的部門,但是SMITH實際上是屬于20號部門的,對應dept連接出來的表中10和30號部門的信息沒有用。故要去掉這些無效信息。

而emp表和dept表中共同列屬性為deptno,需要根據deptno來對兩張表進行連接,那么這兩張表的連接條件就是二者的deptno要相等:
在這里插入圖片描述

這樣得到的記錄就都是有效的記錄了。

再加上題目的條件:SMITH的名字和部門名稱,那么就是名字必須位SMITH:
在這里插入圖片描述
不過這里的where也可以換成and:
在這里插入圖片描述
因為員工名為SMITH也可以算成是一個連接的條件,不過把它算成篩選條件在邏輯上更通暢,所以用where更好一點,更能體現出來過程性。

如果用where,表達的意思就是先用deptno作為鏈接條件來對這兩張表進行連接,連接好之后再用where對ename進行篩選,篩選出來的就是SMITH。邏輯更加清晰。

而用前一篇中的方法的話就會變成這樣:
在這里插入圖片描述
用的是where將表結構篩選出來。

再挑出來響應的列,結果就是這樣:
在這里插入圖片描述

邏輯上就是用on作為連接條件,用where作為篩選條件,更加清晰。

外連接

外連接可分為兩種,左外連接和右外連接。

左外連接

左外連接就是當兩張表進行連接的時候左表所有的數據都要顯示,就算右表對應行是沒有數據的,也必須要將左表的所有數據顯示出來,對應右表沒有數據的行會顯示為空。

上例子,不然看不懂,先創建兩張表,一張學生表:
在這里插入圖片描述

插入點數據:
在這里插入圖片描述

然后再建一張成績表:
在這里插入圖片描述

插入點數據:
在這里插入圖片描述

兩張表中的數據并不是所有都能一一對應上的,stu中id為3、4的在exam中沒有成績,而exam中id為11的在stu中沒有數據。

左外連接的語法:

select 列名 from 表名1 left join 表名2 on 連接條件 and 其他連接條件;

此時如果將stu放到表名1,exam放到表名2:
在這里插入圖片描述
此時stu中3、4沒有成績的也會顯示出來,右表中對應列的數據為空。

但如果用內連接就不會顯示不完整的數據:
在這里插入圖片描述

如果把exam放到表名1位置:
在這里插入圖片描述

對應id為11的在stu中沒有數據,但是還是會將其顯示,右表沒有數據的會顯示為空。

所以左外連接即在左表必須顯示全,右表根據篩選條件連接,如果條件不滿足就會顯示為空。

來個題目:

題目>>查詢所有學生的成績,如果這個學生沒有成績,也要將學生的個人信息顯示出來

很簡單,其實就是剛剛的示例:
在這里插入圖片描述

右外連接

和左外連接同理。右表中的數據必須完全顯示。

其實有了左外連接都不需要右外連接了,因為我們在寫sql語句的時候完全可以調整兩個表名字的位置,這樣就能起到同樣的效果。

語法:

select 列名 from 表名1 right join 表名2 where 連接條件1 and 連接條件2 ...;

演示一下:
在這里插入圖片描述
以右表的exam為主。

再來:
在這里插入圖片描述

效果都是一樣的。我甚至感覺左外連接看起來更方便一點。

很簡單,不細說了。

題目>>對stu表和exam表聯合查詢,把所有的成績都顯示出來,即使這個成績沒有學生與它對應,也要顯示出來

也是剛剛的示例:
在這里插入圖片描述

再來一個開頭給出的三張表的例子:

題目>>列出部門名稱和這些部門的員工信息,同時列出沒有員工的部門

其實三dept表有4個部門,但是有一個部門沒有員工,這個在生活中也是有的,比如說一個公司某項業務規模還比較小,但是不妨礙開一個空部門,等以后業務擴大了之后再向這個空部門中添加員工。

在這里插入圖片描述
看著不太方便,排個序:
在這里插入圖片描述

這樣看起來就好多了。

到此結束。。。

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

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

相關文章

快速去除Word文檔密碼,全面解決你的困擾

如果你忘記了Word文檔密碼,或者想解密和去除Word文檔密碼,下面是簡單步驟:第一步,百度搜索【密碼帝官網】找到官方網站;第二步,點擊“立即開始”,進入用戶中心,上傳需要解密的文件。…

中部A股第一城,長沙如何贏商?

文|智能相對論 作者|范柔絲 長沙的馬路,都很有故事。 一條解放西路,是全國人民都爭相打卡的娛樂地標;一條太平街,既承載了歷史的厚重又演繹著現代的鮮活...... 但如果來到河西的桐梓坡路,風景會變得截然不同。 沿…

應用軟件安全編程--28SSL 連接時要進行服務器身份驗證

當進行SSL 連接時,服務器身份驗證處于禁用狀態。在某些使用SSL 連接的庫中,默認情況下不 驗證服務器證書。這相當于信任所有證書。 對 SSL 連接時要進行服務器身份驗證的情況,示例1給出了不規范用法(Java 語言)示例。示例2 給出了規范用法(J…

安裝MySQL搭建論壇

課前默寫: 1、nginx配置文件的區域有哪些 ①全局區域 ②events區域 ③http區域 2、區域模塊的作用 全局區域模塊主要是用戶和工作進程 events區域模塊配置最大連接數時需先配置:vim /etc/limits.conf 因為系統默認最大是1024 http區域模塊:代理地…

BUUCTF [HBNIS2018]excel破解 1

BUUCTF:https://buuoj.cn/challenges 題目描述: 得到的 flag 請包上 flag{} 提交。來源: https://github.com/hebtuerror404/CTF_competition_warehouse_2018 密文: 下載附件,得到一個attachment.xls文件。 解題思路&#xff…

計算機視覺的應用19-基于pytorch框架搭建卷積神經網絡CNN的衛星地圖分類問題實戰應用

大家好,我是微學AI,今天給大家介紹一下計算機視覺的應用19-基于pytorch框架搭建卷積神經網絡CNN的衛星地圖分類問題實戰應用。隨著遙感技術和衛星圖像獲取能力的快速發展,衛星圖像分類任務成為了計算機視覺研究中一個重要的挑戰。為了促進這一…

git的用法

目錄 一、為什么需要git 二、git基本操作 2.1、初始化git倉庫 2.2、配置本地倉庫的name和email 2.3、認識工作區、暫存區、版本庫 三、git的實際操作 3.1 提交文件 3.2 查看git狀態以及具體的修改 3.3 git版本回退 git reset 3.1 撤銷修改 四、git分支管理 4.…

vue el-table (固定列+滾動列)【橫向滾動條】確定滾動條是在列頭還是列尾

效果圖&#xff1a; 代碼實現&#xff1a; html&#xff1a; <script src"//unpkg.com/vue2/dist/vue.js"></script> <script src"//unpkg.com/element-ui2.15.14/lib/index.js"></script> <div id"app" style&quo…

【數據結構】樹如何定義 | 如何存儲 | 實際應用

前言 如上圖&#xff0c;A中的孩子的個數是不固定的。我們無法精確的每個不同的根結點有多少個孩子。所以并不能精確知道需要定義多少個孩子節點。 struct TreeNode {int val;struct TreeNode* child1;struct TreeNode* child2;struct TreeNode* child3;//...//這樣顯然是不能…

springboot 攔截器中使用@Value注解為null

攔截器中獲取配置參數為null 代碼如下&#xff1a; 解決方式一&#xff1a; 檢查你的WebMvcConfigurer實現類&#xff0c;比如我的是CCBWebMvcConfig 將攔截器以bean的形式注入&#xff1a; 我之前的寫法是new 一個放進去的&#xff0c;這種會導致Value為null AutowiredJSCCB…

2014年10月6日 Go生態洞察:Go在Google I/O和Gopher SummerFest的應用

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

《微信小程序開發從入門到實戰》學習二十七

3.4 開發參與投票頁面 3.4.2 借用偽造數據開發功能 為了便于開發&#xff0c;新建一個編譯模式&#xff1a; 之前沒看文章&#xff0c;每次都習慣性填完投票創建的信息提交再跳轉看效果。好累。 添加變異模式開發真方便。 另外&#xff0c;點擊提交后沒跳轉到投票頁面&#…

xorm源碼學習

文章目錄 XORM源碼淺析及實踐ORMORM vs. SQLXORM軟件架構 ORM 引擎 Engine——DBM*core.DB Golang&#xff1a;database/sql 源碼基本結構連接復用&#xff0c;提高性能。增加數據庫連接池數量連接管理 database/sql主要內容&#xff1a;sql.DB創建數據庫連接sql.Open()DB.conn…

Spring——感謝尚硅谷官方文檔

Spring——尚硅谷學習筆記 1 Spring簡介&#x1f47e;1.1 Spring概述1.2 Spring Framework1.2.1 Spring Framework特性1.2.2 Spring Framework五大功能模塊 2 IOC-IOC容器思想&#x1f47e;IOC容器思想IOC在Spring中的實現 3 IOC-基于XML文件管理Bean&#x1f47e;3.1 準備工作…

2023亞太杯數學建模A題思路 - 采果機器人的圖像識別技術

# 1 賽題 問題A 采果機器人的圖像識別技術 中國是世界上最大的蘋果生產國&#xff0c;年產量約為3500萬噸。與此同時&#xff0c;中國也是世 界上最大的蘋果出口國&#xff0c;全球每兩個蘋果中就有一個&#xff0c;全球超過六分之一的蘋果出口 自中國。中國提出了一帶一路倡議…

數據庫實驗四 索引創建與管理操作

數據庫實驗四 索引創建與管理操作 一、實驗目的二、設計性實驗三、觀察與思考 一、實驗目的 (1) 理解索引的概念與類型。 (2) 掌握創建、更改、刪除索引的方法。 (3) 掌握維護索引的方法。 二、設計性實驗 在數據庫job下創建worklnfo表。創建表的同時在id字段上創建名為inde…

【HarmonyOS】元服務卡片本地啟動拉起加桌沒問題,上架后拉起加桌時卡片展示異常

【關鍵字】 加桌選卡展示異常 、 2卡共用一個布局 、 代碼混淆 【問題現象】 元服務卡片在本地啟動拉起加桌時&#xff0c;多卡的選卡過程顯示是沒問題的。但是在上架后拉起加桌時&#xff0c;多卡的選卡過程卡片展示異常。 代碼邏輯是通過創建卡片的時候判斷卡片的尺寸大小…

數據結構與算法編程題13

設計算法將一個帶頭結點的單鏈表A分解為兩個具有相同結構的鏈表B、C&#xff0c;其中B表的結點為A表中值小于零的結點&#xff0c;而C表的結點為A表中值大于零的結點&#xff08;鏈表A中的元素為非零整數&#xff0c;要求B、C表利用A表的結點&#xff09; for example: A -1 2 …

SpringBoot + 通義千問 + 自定義React組件,支持EventStream數據解析!

一、前言 大家好&#xff01;我是sum墨&#xff0c;一個一線的底層碼農&#xff0c;平時喜歡研究和思考一些技術相關的問題并整理成文&#xff0c;限于本人水平&#xff0c;如果文章和代碼有表述不當之處&#xff0c;還請不吝賜教。 最近ChatGPT非常受歡迎&#xff0c;尤其是…