MySQL的左連接、右連接、內連接、外連接

一、前言

  • MySQL中的左連接右連接內連接全外連接是用于多表關聯查詢的核心操作。

二、內連接(INNER JOIN)

  • 定義返回兩個表中完全匹配的行,即只保留兩個表連接字段值相等的行。
  • 示例場景:查詢所有有選課記錄的學生及其課程成績。
SELECT * 
FROM student 
INNER JOIN score ON student.s_id = score.s_id;
  • 結果特點:僅輸出學生表和成績表中s_id完全匹配的行,未選課的學生不會出現。

三、左連接(LEFT JOIN / LEFT OUTER JOIN)

  • 定義以左表為基準,返回左表所有行,右表只顯示匹配的行,不匹配的字段以NULL填充。
  • 示例場景:列出所有學生及其選課成績(包括未選課的學生)。
SELECT * 
FROM student 
LEFT JOIN score ON student.s_id = score.s_id;
  • 結果特點:學生表數據完整,未選課學生的成績字段為NULL。

四、右連接(RIGHT JOIN / RIGHT OUTER JOIN)

  • 定義以右表為基準,返回右表所有行,左表只顯示匹配的行,不匹配的字段以NULL填充。
  • 示例場景:列出所有課程成績對應的學生信息(包括未關聯到學生的成績)。
SELECT * 
FROM student 
RIGHT JOIN score ON student.s_id = score.s_id;
  • 結果特點:成績表數據完整,無效學生ID的成績對應的學生字段為NULL。

五、全外連接(FULL OUTER JOIN)

  • 定義返回兩個表的所有行,不匹配的字段以NULL填充。
  • 示例場景:MySQL不直接支持FULL JOIN,需通過LEFT JOIN和RIGHT JOIN聯合查詢實現。
SELECT * 
FROM student 
LEFT JOIN score ON student.s_id = score.s_id
UNION
SELECT * 
FROM student 
RIGHT JOIN score ON student.s_id = score.s_id;
  • 結果特點:包含所有學生和成績記錄,未匹配部分用NULL填充。

六、總結

在這里插入圖片描述


七、拓展

  • 性能提示
    • 內連接通常效率最高,建議優先使用。
    • 避免對大表使用全外連接,可能引發性能問題。
  • NULL處理
    • 外連接中NULL字段需用COALESCE()或IFNULL()處理,例如:
SELECT student.s_name, COALESCE(score, 0) 
FROM student 
LEFT JOIN score ON student.s_id = score.s_id;
  • 自連接(Self Join):同一表的關聯查詢,如查詢員工及其上級
SELECT a.emp_name, b.emp_name AS manager
FROM employees a
LEFT JOIN employees b ON a.manager_id = b.emp_id;
  • 具體應用時需結合業務需求選擇連接方式,合理設計索引可顯著提升多表查詢效率

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

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

相關文章

前端面試寶典---數據類型

基本數據類型 對于基本類型在創建時無需使用 new 關鍵字 Bigint在實際開發不常用,如果對于精度要求高可以使用第三方庫,如decimal.js 基本數據類型介紹 undefined:當變量被聲明但未賦值,或者函數沒有返回值時,就會呈現…

Lua 函數使用的完整指南

在 Lua 中,函數是一等公民(First-Class Citizen),這意味著函數可以像其他值一樣被賦值、傳遞和操作。以下是 Lua 函數定義的完整指南,涵蓋基礎語法、高級特性、設計模式及性能優化。 在Lua 中,函數定義的完…

使用StockTV API對接印度金融市場數據全指南:K線、實時行情與IPO新股

一、印度金融市場數據特點 印度作為全球增長最快的主要經濟體之一,其金融市場具有以下顯著特征: 雙交易所體系:國家證券交易所(NSE)和孟買證券交易所(BSE)高流動性品種:Nifty 50指數成分股、銀行股等獨特交易機制:T2…

2021-10-26 C++繁忙通信兵

緣由繁忙的通訊兵,可以解決一下嗎-編程語言-CSDN問答 void 繁忙通信兵() {//緣由https://ask.csdn.net/questions/7544401?spm1005.2025.3001.5141int a 200, s1 8, s2 5, s3 45, p 0, n 0, c 0;std::cin >> n;while (a > n){a - s1 s2;if (a &l…

【Linux】進程控制:創建、終止、等待與替換全解析

文章目錄 前言一、重談進程創建二、進程終止2.1 正常終止的退出碼機制2.2 異常終止的信號機制2.3 進程常見的退出方法 三、進程等待:避免僵尸進程的關鍵3.1 進程等待的必要性3.2 進程等待的兩個系統調用接口3.2.1 wait()3.2.2 waitpid()區別 四、進程程序替換4.1 進…

基于Redis實現短信防轟炸的Java解決方案

基于Redis實現短信防轟炸的Java解決方案 前言 在當今互聯網應用中,短信驗證碼已成為身份驗證的重要手段。然而,這也帶來了"短信轟炸"的安全風險 - 惡意用戶利用程序自動化發送大量短信請求,導致用戶被騷擾和企業短信成本激增。本…

【后端開發】Spring MVC-常見使用、Cookie、Session

文章目錄 代碼總結初始化--RestController、RequestMapping傳遞參數單參數多參數 傳遞對象后端參數重命名(后端參數映射)--RequestParam必傳參數設置非必傳參數 傳遞數組傳遞集合傳遞JSON數據JSON語法JSON格式轉換JSON優點傳遞JSON對象 獲取URL中參數--P…

青少年編程考試 CCF GESP Python七級認證真題 2025年3月

Python 七級 2025 年 03 月 題號 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 B C A B B A A B C A B B A B A 1 單選題(每題 2 分,共 30 分) 第 1 題 下列哪個選項是python中的關鍵字? A. function B. class C. method D. object…

Vue 框架組件間通信方式

組件間通信方式 不管是 vue2 還是 vue3,組件通信方式很重要,以下是常見的幾種通信方式: props:可以實現父子組件、子父組件、甚至兄弟組件通信自定義事件:可以實現子父組件通信全局事件總線 $bus:可以實現…

SpringBoot學生成績管理系統設計與實現

概述 幽絡源本次分享的基于SpringBoot的學生成績管理系統項目,采用主流的Java技術棧開發,實現了從學生信息管理到成績統計分析的全流程數字化管理。 主要內容 管理員功能模塊 ??學生信息管理??:維護學生基本信息檔案,支持…

青少年編程與數學 02-016 Python數據結構與算法 01課題、算法

青少年編程與數學 02-016 Python數據結構與算法 01課題、算法 一、算法的定義二、算法的設計方法1. 分治法2. 動態規劃法3. 貪心算法4. 回溯法5. 迭代法6. 遞歸法7. 枚舉法8. 分支定界法 三、算法的描述方法1. **自然語言描述**2. **流程圖描述**3. **偽代碼描述**4. **程序設計…

Java 實現冒泡排序:[通俗易懂的排序算法系列之二]

引言 大家好!歡迎來到我的排序算法系列第二篇。今天,我們將學習另一種非常基礎且廣為人知的排序算法——冒泡排序 (Bubble Sort)。 冒泡排序的名字非常形象,它模擬了水中氣泡上升的過程:較小(或較大)的元素會像氣泡一樣,通過不斷交換,逐漸“浮”到數組的一端。 什么是…

struct結構體、union聯合體和枚舉

目錄 一、結構體的聲明和使用 1.1 結構體正常聲明和創建 1.2 結構體特殊聲明 1.3 結構體的自引用 二、結構體內存對齊 2.1 對齊規則 2.2 #pragma修改 三、結構體傳參 四、結構體位段 4.1 位段內存分配 4.2 位段內存應用 五、結構體中的柔性數組概念 六、union聯合…

大模型本地部署系列(2) Ollama部署DeepSeek-R1

成功運行截圖 部署步驟 我們進入到ollama的官網: Ollama?ollama.com/?編輯 找到上方的Models ,然后點擊 此時會跳轉到模型列表頁面: 點擊 deepseek-r1 鏈接進去,此時我們會看到下拉框中有各個版本的大模型,越往后…

繪制動態甘特圖(以流水車間調度為例)

import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np from matplotlib import cm# 中文字體配置(必須放在所有繪圖語句之前) plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] Fa…

PyTorch實現線性回歸的基礎寫法與封裝API寫法

目錄 1. 基礎寫法 1.1導包 2.2加載讀取數據 2.3原始數據可視化(畫圖顯示) 2.4線性回歸的(基礎)分解寫法 2.5定義訓練過程 2.PyTorch實現 線性回歸的封裝寫法(實際項目中的常用寫法) 2.1創建線性回歸模型 2.2定義損失函數 2.3定義優化器 2.4定義訓練過程 1…

python 常用的6個爬蟲第三方庫

Python中有非常多用于網絡數據采集的庫,功能非常強大,有的用于抓取網頁,有的用于解析網頁,這里介紹6個最常用的庫。 1. BeautifulSoup BeautifulSoup是最常用的Python網頁解析庫之一,可將 HTML 和 XML 文檔解析為樹形…

基于BP神經網絡的雜草智能識別系統(雜草識別、Python項目)

基于BP神經網絡的雜草智能識別系統 項目介紹 本項目是一個基于PyQt5和BP神經網絡的雜草智能識別系統。系統通過圖像處理和神經網絡技術, 能夠識別8種不同的雜草類別。用戶可以通過上傳圖片,系統會自動識別圖片中的雜草類別,并顯示識別結果和…

Python3筆記之號稱替代pip的uv包管理器

uv是什么? uv,這是一個由 Astral 團隊開發的極快速的Python包和項目管理工具,用Rust語言編寫。它集成了多種功能,旨在替代pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv等多個工具,提供更高效、更全面的Py…

IT管理思路

甲方CIO和IT管理者-如何做好組織級IT能力提升_嗶哩嗶哩_bilibili