Mysql----左連接、右連接、內連接、全連接的區別

来源:https://www.cnblogs.com/xj-excellent/archive/2020/07/13/13292291.html
-Advertisement-
Play Games

最近,突然想起來資料庫有好些時間沒用到,所以,想把資料庫有關的知識回顧一下,所以接下來這個月,基本上會以資料庫的帖子來寫為主,首先,很多同學都會有個錯覺,覺得學習資料庫會sql語句的增刪改查就夠了,其實,這僅僅是片面的認知,掌握了這些還遠遠不夠,sql是你作為謀求生計的基本功,不會也得會,但是,要想 ...


  最近,突然想起來資料庫有好些時間沒用到,所以,想把資料庫有關的知識回顧一下,所以接下來這個月,基本上會以資料庫的帖子來寫為主,首先,很多同學都會有個錯覺,覺得學習資料庫會sql語句的增刪改查就夠了,其實,這僅僅是片面的認知,掌握了這些還遠遠不夠,sql是你作為謀求生計的基本功,不會也得會,但是,要想變得優秀,還得學習更多的,比如:存儲器、索引、事務等等。今天先和大家聊聊面試時技術官常會問你的:你說說看左連接與右連接以及全連接的區別,這個問題不管你是面試開發崗、測試崗甚至是產品崗,都會問到,接下來的慢慢看,就當回顧一下舊知識

  在具體的介紹之前,先準備兩張表,拿我自己的舉例:test001(看作左表) 、  test002(看作右表)

 

 

1.內連接

關鍵字:inner join

sql語句:select*  from  table_left(表名)   inner join table_right(表名)    on   table_left.id  = table_right.id 

註釋說明:結合兩張表的記錄,返回相關的查詢結果,返回的是兩個表的交集部分(即陰影部分),見下圖

 用我剛剛上面舉例的兩張表查詢一下:SELECT* FROM test001 INNER JOIN test002 ON test001.id=test002.id  

 兩張表都有主鍵id,內連接的查詢就是找出相同的主鍵以及主鍵附帶的欄位信息,這裡咱們可以把sql再改進一下,讓查詢結果看起來不是那麼累贅

sql語句 :   SELECT test001.id AS ID ,test001.username,test002.job FROM test001 INNER JOIN test002 ON test001.id=test002.id 

 

2.左連接

關鍵字:left join

sql語句:select*  from  table_left(表名)   left join table_right(表名)    on   table_left.id  = table_right.id 

註釋說明:left join 是left outer join 的簡寫,全稱其實是左外連接,屬於外連接的一種,左連接查詢,左表的信息全部展示出來,右表只會展示符合搜索條件的信息,不足的地方記為NULL

同樣的,用我剛剛最上面準備好的兩張表查詢一下:SELECT test001.id AS ID ,test001.username,test002.job FROM test001 LEFT JOIN test002 ON test001.id=test002.id  

 

3.右連接

關鍵字:right join

sql語句:select*  from  table_left(表名)   right join table_right(表名)    on   table_left.id  = table_right.id 

註釋說明:right join 是right outer join 的簡寫,全稱是右外連接,也屬於外連接的一種,右連接查詢,右表的信息全部展示出來,左表只會展示符合搜索條件的信息,不足的地方記為NULL

 如出一轍,用我剛剛最上面準備好的兩張表查詢一下:SELECT test002.id AS ID ,test001.username,test002.job FROM test001 RIGHT JOIN test002 ON test001.id=test002.id 

 

 看上圖的右連接查詢結果:右表的信息都有,左表的信息,有的就展示,沒有的有用NULL表示,很容易區別

4.全連接

關鍵字:union / union all

sql語句:(select colum1,colum2,colum3... from  table_left) union (select colum1,colum2,colum3... from  table_right

     (select colum1,colum2,colum3... from  table_left) union all (select colum1,colum2,colum3... from  table_right

全連接:實際上就是把兩張表合併,不管有的沒的,都先給整上來。

註意事項:①用union 時,完全相等的行,將會被合併,由於合併比較耗時,一般不直接使用 union 進行合併;通常採用union all 進行合併;

        ②被union 連接的sql 子句,單個子句中不用寫order by ,因為不會有排序的效果。但可以對最終的結果集進行排序;

       (select  colum1,colum2....from A order by id) union all (select  colum1,colum2... from B order by id); //沒有排序效果

       (select colum1,colum2... from A ) union all (select colum1,colum2... from B ) order by id; //有排序效果

同樣的,我用最開始最上面準備的兩張表,來進行全連接合併

 

 查詢結果看上圖:左表的欄位信息和右表的欄位信息都全部顯示,如果你想進行id排序也可以,加個order by id 

(SELECT test001.id,test001.username FROM test001)UNION ALL (SELECT test002.id,test002.job FROM test002) ORDER BY id

 友情提示:union會自動將完全重覆的數據去除掉;union all會保留那些重覆的數據;所以,建議大家合理使用,根據自己的需求進行sql查詢

 

本文註重原創,本著資源共用的原則,如若需要轉載,請註明出處:https://www.cnblogs.com/xj-excellent/p/13292291.html,文中如果有不對的地方請廣大網友指出,可直接留言評論,我們一起共勉,共同進步。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 容器是一種清理級、可移植、自包含的軟體打包技術,使應用程式可以在幾乎任何地方以相同的方式運行。 ...
  • #一、實驗目標 理解數據挖掘的基本概念,掌握基於Weka工具的基本數據挖掘(分類、回歸、聚類、關聯規則分析)過程。 #二、實驗內容 下載並安裝Java環境(JDK 7.0 64位)。 下載並安裝Weka 3.7版。 基於Weka的數據分類。 基於Weka的數據回歸。 基於Weka的數據聚類。 基於W ...
  • kafka在windows下的安裝與配置 By: 授客 QQ:1033553122 1.測試環境...................................................................................................... ...
  • 全文引擎使用全文索引中的信息來編譯可快速搜索表中的特定詞或片語的全文查詢。全文索引將有關重要的詞及其位置的信息存儲在資料庫表的一列或多列中。全文索引是一種特殊類型的基於標記的功能性索引,它是由 SQL Server 全文引擎生成和維護的。生成全文索引的過程不同於生成其他類型的索引。全文引擎並非基於特... ...
  • Apache Flink介紹 俗話說知子莫若父,要想瞭解一門技術就要看官方的介紹。Flink官網對Flink的介紹是這樣的: Apache Flink is a framework and distributed processing engine for stateful computations ...
  • 原文鏈接:原文來自個人公眾號—C you again 對於IT從業者來說,電腦網路是一門必修課,也是一塊硬骨頭,不論是你是在工作中還是面試時,都需要掌握一些網路技術。從本期開始,小編對電腦網路中出現的高頻知識點和題目進行收集整理,方便大家使用。 題目:計算並填寫下表 IP地址 111.181.2 ...
  • Redis通過主從複製完成數據遷移 進入新的伺服器,執行從庫配置,slaveof 命令配置當前Redis的主機,info命令可以查看Redis的信息。執行完slaveof命令後執行info命令查看master_link_status的值如果為up表示同步完成。這時候該Redis的角色為slave。 ...
  • docker Redis容器通過dump.rdb文件進行數據遷移或恢複數據 拉取Redis鏡像 # 拉取最新的Redis鏡像 $docker pull redis 進入舊的Redis容器保存數據 $docker exec -it old_aley_redis redis-cli 127.0.0.1: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...