資料庫_多表查詢_內連接&外連接

来源:https://www.cnblogs.com/iot502/archive/2022/07/21/16503600.html
-Advertisement-
Play Games

首先明確一下定義: 內連接:在多表查詢的時候,只檢索出表之間相互匹配的行(滿足匹配條件的行),結果中不包括兩個表之間不匹配的行。 一個不太準確但易懂的例子:比如有兩個表,表1存儲了 (1,2,3,4,5 )這五個數字。表2存儲了(3,4,5,6,7,8)這6個數字。多表查詢時兩個表的關聯條件是 “表 ...


首先明確一下定義:

內連接:在多表查詢的時候,只檢索出表之間相互匹配的行(滿足匹配條件的行),結果中不包括兩個表之間不匹配的行。

一個不太準確但易懂的例子:比如有兩個表,表1存儲了 (1,2,3,4,5 )這五個數字。表2存儲了(3,4,5,6,7,8)這6個數字。多表查詢時兩個表的關聯條件是 “表1 = 表2”.

那麼檢索的輸出就是取這兩個表的交集。,即 3,4,5.

外連接:在多表查詢的時候,處理檢索出內連接的數據外,還返回左表(或者右表)中不滿足匹配條件的行。這種連接稱為左(或者右)外連接。

還是上邊那個小例子:左外連接的返回結果為(1,2,3,4,5);右外連接的返回結果為(3,4,5,6,7,8).

如果是左外連接,則連接條件中左邊的表也稱為主表 ,右邊的表稱為從表 。如下簡圖:

如果是右外連接,則連接條件中右邊的表也稱為主表 ,左邊的表稱為從表

代碼實現:

下麵是代碼舉例中要用到的3個表

employees表:

+----------------+-------------+------+-----+---------+-------+
| Field          | Type        | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| employee_id    | int         | NO   | PRI | 0       |       |
| first_name     | varchar(20) | YES  |     | NULL    |       |
| last_name      | varchar(25) | NO   |     | NULL    |       |
| email          | varchar(25) | NO   | UNI | NULL    |       |
| phone_number   | varchar(20) | YES  |     | NULL    |       |
| hire_date      | date        | NO   |     | NULL    |       |
| job_id         | varchar(10) | NO   | MUL | NULL    |       |
| salary         | double(8,2) | YES  |     | NULL    |       |
| commission_pct | double(2,2) | YES  |     | NULL    |       |
| manager_id     | int         | YES  | MUL | NULL    |       |
| department_id  | int         | YES  | MUL | NULL    |       |
+----------------+-------------+------+-----+---------+-------+

departments表:

+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| department_id   | int         | NO   | PRI | 0       |       |
| department_name | varchar(30) | NO   |     | NULL    |       |
| manager_id      | int         | YES  | MUL | NULL    |       |
| location_id     | int         | YES  | MUL | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+

 locations表:

+----------------+-------------+------+-----+---------+-------+
| Field          | Type        | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| location_id    | int         | NO   | PRI | 0       |       |
| street_address | varchar(40) | YES  |     | NULL    |       |
| postal_code    | varchar(12) | YES  |     | NULL    |       |
| city           | varchar(30) | NO   |     | NULL    |       |
| state_province | varchar(25) | YES  |     | NULL    |       |
| country_id     | char(2)     | YES  | MUL | NULL    |       |
+----------------+-------------+------+-----+---------+-------+

 

註:以下所用語法:JOIN...ON 為 SQL99 中的多表查詢實現語法。

內連接:檢索返回員工姓名,部門名組成的表(需要用到employees表及departments表)

mysql> SELECT last_name,department_name
    -> FROM employees e  # 表1 JOIN 表2 ON 匹配條件;
    -> JOIN departments d
    -> ON e.department_id = d.department_id;   # 關聯條件

 

檢索返回員工姓名、部門名稱、部門所在城市組成的表。

mysql> SELECT last_name,department_name,city
    -> FROM employees e  
    -> JOIN departments d   
    -> ON e.department_id = d.department_id
    -> JOIN locations l 
    -> ON d.location_id = l.location_id;
    /*
    表1
    JOIN 表2
    ON 表1和表2的匹配條件
    JOIN 表3 
    ON 表2和表3的匹配條件;
    */

 

外連接:從兩個表中,檢索返回所有員工的姓名、部門名組成的表。

mysql> SELECT employee_id,department_name
    -> FROM employees e   # employees表為主表,departments表為從表。主表 LEFT OUTER JOIN 從表 ON 匹配條件;
    -> LEFT OUTER JOIN departments d   # 左外連接 
    -> ON e.department_id = d.department_id;

 


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

-Advertisement-
Play Games
更多相關文章
  • 在.Net Framework環境下,我們使用Windows Workflow Foundation(WF)作為項目的工作流引擎,可是.Net Core已經不支持WF了,需要為基於.Net Core的項目選擇新的工作流引擎。基本要求如下: 輕量級,部署和使用都很簡單。 有相當數量的用戶,往往使用的人 ...
  • Linux中的進程 進程:已經啟動的可執行程式的運行實例 1、PID:進程的ID(每一個新進程都有一個唯一的PID) 2、PPID:父進程的ID 3、任何一個進程都可以創建一個子進程 4、在redhat 7以上,所有進程的父進程: systemd 在redhat 5,6中,所有進程的父進程: ini ...
  • 第一步:Linux中啟用串口設備。【以樹莓派4B為例】 樹莓派4B有6個串口,參考上一篇《樹莓派4B串口配置與開發》,在 /boot/config.txt 中添加一行,開啟 uart2 功能: dtoverlay=uart2 重啟後,查看是否有多出來一個 /dev/AMA1 設備: $ ls -l ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 請註意k8s在1.24版本不支持docker容器,本文使用kubeadm進行搭建 1.查看系統版本信息以及修改配置信息 1.1 安裝k8s時,臨時關閉swap ,如果不關閉在執行kubeadm部分命令會報錯 swapoff -a 或直接註釋swa ...
  • Totally Accurate Battle Simulator for Mac是由游戲廠商Landfall所發行的一款休閑策略游戲,全面戰爭模擬器Mac版是一款非常具有魔性及挑戰性的游戲,游戲人物角色非常“沙雕”,感興趣的朋友快來看一看吧~ 詳情:全面戰爭模擬器 for Mac(休閑策略類游戲) ...
  • 背景 在生產過程中,由於磁碟空間、保留周期等因素,會對系統、應用等日誌提出要求,要求系統日誌定期進行輪轉、壓縮和刪除,從而減少開銷,而系統自帶的logrotate 則是一個簡單又實用的小工具,下麵著重介紹一下,滿足日常需求。 語法 Usage: logrotate [OPTION...] <conf ...
  • 六、DSL操作ES 6.1、RESTful風格介紹 REST(Representational State Transfer 表述性狀態轉移),是一組架構約束條件和原則,滿足這些約束條件和原則的應用程式或設計就是RESTful。就是一種定義介面的規範。有以下特征: 基於HTTP 可以使用XML格式定 ...
  • 一、ElasticSearch的倒排索引 1.1、資料庫存在的問題 問題1: 查詢title中包含"手機"的信息 SELECT * FROM goods WHERE title LIKE '%手機%' 使用模糊搜索,左邊有通配符,不會走索引,會全表掃描,性能低 問題2:查詢title中包含"我要買一 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...