亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1、表連接的核心概念

1.1 為什么需要表連接?

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

2、內連接(INNER JOIN)

2.1 核心概念

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

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

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

2.2 案例

查詢員工及其部門名稱

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

方法一:

---隱式內連接寫法
select *from emp,dept where emp.deptno=dept.deptno;

方法二:

---標準內連接寫法
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;

結果

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;

結果

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

4.2 NULL值的處理

ifnull()函數(shù)

外連接結果中的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;

總結

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

相關文章

  • Mysql錯誤:Too many connections的解決方法

    Mysql錯誤:Too many connections的解決方法

    這篇文章主要給大家介紹了關于Mysql錯誤Too many connections的解決方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Mysql具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • MySQL存儲過程圖文實例講解

    MySQL存儲過程圖文實例講解

    雖然MySQL的存儲過程一般情況下是不會使用到的,但是在一些特殊場景中,還是有需求的,下面這篇文章主要給大家介紹了關于MySQL存儲過程的相關資料,需要的朋友可以參考下
    2022-03-03
  • mysql?count()函數(shù)不計算null和空值問題

    mysql?count()函數(shù)不計算null和空值問題

    這篇文章主要介紹了mysql?count()函數(shù)不計算null和空值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MySQL數(shù)據(jù)庫常用操作技巧總結

    MySQL數(shù)據(jù)庫常用操作技巧總結

    這篇文章主要介紹了MySQL數(shù)據(jù)庫常用操作技巧,結合實例形式總結分析了mysql查詢、存儲過程、字符串截取、時間、排序等常用操作技巧,需要的朋友可以參考下
    2018-03-03
  • mysql中全連接full join...on...的用法說明

    mysql中全連接full join...on...的用法說明

    這篇文章主要介紹了mysql中全連接full join...on...的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • MySQL?Server?層四個日志詳解

    MySQL?Server?層四個日志詳解

    這篇文章主要介紹了MySQL?Server?層四個日志,包括錯誤日志,查詢日志,二進制日志及慢查詢日志,本文結合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • mysql導出導入中文表解決方法

    mysql導出導入中文表解決方法

    在開發(fā)過程中會經(jīng)常用到mysql導出導入中文表,本文將詳細介紹其如何使用,需要的朋友可以參考下
    2012-11-11
  • MySQL修改表結構操作命令總結

    MySQL修改表結構操作命令總結

    這篇文章主要介紹了MySQL修改表結構操作命令總結,包含如刪除列、添加列、修改列、添加主鍵、刪除主鍵、添加唯一索引、添加普通索引等內容,需要的朋友可以參考下
    2014-12-12
  • sql模式設置引起的問題解決辦法

    sql模式設置引起的問題解決辦法

    這篇文章主要介紹了sql模式設置引起的問題解決辦法,文章圍繞主題展開詳細內容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Mysql的慢SQL優(yōu)化思路和規(guī)范詳解

    Mysql的慢SQL優(yōu)化思路和規(guī)范詳解

    這篇文章主要介紹了Mysql的慢SQL優(yōu)化思路和規(guī)范詳解,官方介紹索引是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結構。更通俗的說,數(shù)據(jù)庫索引好比是一本書前面的目錄,能加快數(shù)據(jù)庫的查詢速度,需要的朋友可以參考下
    2023-05-05

最新評論