最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL之表連接方式(內(nèi)連接與外連接)

 更新時間:2025年04月09日 09:04:16   作者:貓咪-9527  
這篇文章主要介紹了MySQL之表連接方式(內(nèi)連接與外連接),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1、表連接的核心概念

1.1 為什么需要表連接?

  • 問題:兩個表的數(shù)據(jù)需要關聯(lián)查詢(如學生表和成績表)
  • 笛卡爾積:未指定條件時,兩個表的所有記錄兩兩組合(效率低下,結(jié)果混亂)
  • 解決方案:通過連接條件篩選有效組合

2、內(nèi)連接(INNER JOIN)

2.1 核心概念

  • 定義:僅返回兩表中滿足連接條件的記錄

內(nèi)連接實際上就是利用where子句對兩種表形成的笛卡兒積進行篩選,我們前面學習的查詢都是內(nèi)連接,也是在開發(fā)過程中使用的最多的連接查詢。

  • 語法
select 字段 from 表1 inner join 表2 on 表1.id = 表2.id [and 其他篩選條件];
  • 等價寫法WHERE子句隱式內(nèi)連接
SELECT 字段 FROM 表1, 表2 WHERE 表1.id = 表2.id [and 其他篩選條件];

2.2 案例

查詢員工及其部門名稱

兩者寫法不同但是效果一致

方法一:

---隱式內(nèi)連接寫法
select *from emp,dept where emp.deptno=dept.deptno;

方法二:

---標準內(nèi)連接寫法
select *from dept inner join emp on emp.deptno=dept.deptno;

3、外連接(OUTER JOIN)

外連接分為左外連接和右外連接

3.1 左外連接(LEFT JOIN)

核心概念

  • 保留規(guī)則左表(第一個表)的所有記錄,右表無匹配時用NULL填充
  • 語法
select 字段 from 表1 left join 表2 on 鏈接條件 [and 其他篩選條件];

案例:查詢所有雇員及工資

-- 創(chuàng)建表
CREATE TABLE employees (emp_id INT, emp_name VARCHAR(30));
INSERT INTO employees VALUES (1, 'Alice'), 
(2, 'Bob'), (3, 'Charlie'), (4, 'David');

CREATE TABLE salaries (emp_id INT, salary INT);
INSERT INTO salaries VALUES (1, 5000), (2, 6000), (5, 7000);

-- 左外連接查詢
select *from employees s1 left join salaries s2 on s1.emp_id=s2.emp_id;

結(jié)果

3.2 右外連接(RIGHT JOIN)

核心概念

  • 保留規(guī)則右表(第二個表)的所有記錄,左表無匹配時用NULL填充
  • 語法
select 字段 from 左表 right join 右表 on 鏈接條件 [and 其他篩選條件];

案例:查詢所有工資,即使無對應雇員

select *from employees s1 right join salaries s2 
on s1.emp_id=s2.emp_id;

結(jié)果

3.3 左外與右外的等價性

-- 左外連接(保留左表)
SELECT * FROM A LEFT JOIN B ON A.id = B.id;

-- 等價于右外連接(保留右表)
SELECT * FROM B RIGHT JOIN A ON A.id = B.id;

建議:優(yōu)先使用左外連接,邏輯更直觀。

4、注意事項

4.1 ON與WHERE子句的區(qū)別

  • ON:用于指定連接條件,影響匹配邏輯。
  • on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。

  • WHERE:用于過濾已連接后的結(jié)果,會過濾掉外連接中的NULL值。
  • where條件是在臨時表生成好后,再對臨時表進行過濾的條件。這時已經(jīng)沒有l(wèi)eft join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉,on后的條件用來生成左右表關聯(lián)的臨時表,where后的條件對臨時表中的記錄進行過濾。

4.2 NULL值的處理

ifnull()函數(shù)

外連接結(jié)果中的NULL表示無匹配記錄,需在業(yè)務邏輯中處理(如顯示“無成績”)。

select s1.emp_id,emp_name,ifnull(salary,'無成績')salary 
from employees s1 left join salaries s2 on s1.emp_id=s2.emp_id;

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • MySQL去重中distinct和group?by的區(qū)別淺析

    MySQL去重中distinct和group?by的區(qū)別淺析

    今天無意中聽到有同事在討論,distinct和group by有什么區(qū)別,下面這篇文章主要給大家介紹了關于MySQL去重中distinct和group?by區(qū)別的相關資料,需要的朋友可以參考下
    2022-11-11
  • 使用Docker安裝并啟動MySQL從零到實戰(zhàn)的完整指南

    使用Docker安裝并啟動MySQL從零到實戰(zhàn)的完整指南

    在使用Docker進行應用程序開發(fā)和部署時,MySQL作為一個常用的數(shù)據(jù)庫管理系統(tǒng),經(jīng)常被使用,這篇文章主要介紹了使用Docker安裝并啟動MySQL的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-11-11
  • Mysql inner join on的用法實例(必看)

    Mysql inner join on的用法實例(必看)

    下面小編就為大家?guī)硪黄狹ysql inner join on的用法實例(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • mysql之innodb的鎖分類介紹

    mysql之innodb的鎖分類介紹

    本文將介紹mysql之innodb的鎖分類,需要了解更多的朋友可以參考下
    2012-11-11
  • MySQL數(shù)據(jù)庫的觸發(fā)器的使用

    MySQL數(shù)據(jù)庫的觸發(fā)器的使用

    這篇文章主要介紹了MySQL數(shù)據(jù)庫的觸發(fā)器的使用,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-09-09
  • 淺談MySQL8和MySQL5.7在自增計數(shù)上的區(qū)別

    淺談MySQL8和MySQL5.7在自增計數(shù)上的區(qū)別

    MySQL數(shù)據(jù)庫是一款非常流行的開源數(shù)據(jù)庫,其版本升級迅速,在使用過程中也發(fā)現(xiàn)了不同版本之間存在著一些區(qū)別,本文主要介紹了MySQL8和MySQL5.7在自增計數(shù)上的區(qū)別,感興趣的可以了解一下
    2023-10-10
  • mysql索引學習教程

    mysql索引學習教程

    在mysql 中,索引可以分為兩種類型 hash索引和 btree索引。這篇文章主要介紹了mysql索引的相關知識,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09
  • 淺談mysql 自定義函數(shù)

    淺談mysql 自定義函數(shù)

    本文主要是分析了一下在工作中寫的一個mysql的自定義函數(shù),很簡單,僅僅是希望能對大家理解mysql自定義函數(shù)有所幫助。
    2014-09-09
  • mysql中sum float類型使用小數(shù)點的方法

    mysql中sum float類型使用小數(shù)點的方法

    使用sum示和時如果是float類型的數(shù)據(jù)就會出現(xiàn)小數(shù)點了,那么要如何解決這個問題,下面介紹二種方法
    2013-11-11
  • MySQL聚簇索引和非聚簇索引的區(qū)別詳情

    MySQL聚簇索引和非聚簇索引的區(qū)別詳情

    這篇文章主要介紹了MySQL聚簇索引和非聚簇索引的區(qū)別詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-06-06

最新評論

南澳县| 兰溪市| 大埔县| 开江县| 福贡县| 海丰县| 九龙县| 明溪县| 华亭县| 原平市| 句容市| 绥滨县| 繁昌县| 嫩江县| 六安市| 任丘市| 礼泉县| 玛纳斯县| 建宁县| 巨鹿县| 阜平县| 渝中区| 孝昌县| 浑源县| 美姑县| 金堂县| 达拉特旗| 洛南县| 阳江市| 阿巴嘎旗| 改则县| 和平县| 泾源县| 上高县| 波密县| 巴彦县| 广州市| 崇信县| 大名县| 即墨市| 宜兰市|