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

MySQL中的交叉連接、自然連接和內(nèi)連接查詢詳解

 更新時間:2025年04月11日 11:47:22   作者:今天自洽了嗎  
這篇文章主要介紹了MySQL中的交叉連接、自然連接和內(nèi)連接查詢,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、引入

實際開發(fā)中往往需要針對兩張甚至更多張數(shù)據(jù)表進(jìn)行操作,而這多張表之間需要使用主鍵和外鍵關(guān)聯(lián)在一起,然后使用連接查詢來查詢多張表中滿足要求的數(shù)據(jù)記錄。

一條SQL語句查詢多個表,得到一個結(jié)果,包含多個表的數(shù)據(jù)。效率高。

多種連接查詢的類型:

  • cross
  • natural
  • using
  • on

二、交叉連接(cross join)

交叉連接(CROSS JOIN)是對兩個或者多個表進(jìn)行笛卡兒積操作,所謂笛卡兒積就是關(guān)系代數(shù)里的一個概念,表示兩個表中的每一行數(shù)據(jù)任意組合的結(jié)果。

比如:有兩個表,左表有m條數(shù)據(jù)記錄,x個字段,右表有n條數(shù)據(jù)記錄,y個字段,則執(zhí)行交叉連接后將返回m*n條數(shù)據(jù)記錄,x+y個字段。笛卡兒積示意圖如圖所示。

我希望查找員工編號、員工姓名、部門編號和部門名稱這4個字段的數(shù)據(jù),在員工表emp中可以查詢到員工編號、員工姓名、部門編號的數(shù)據(jù),在部門表dept中可以查詢到字段部門名稱的數(shù)據(jù),如果想同時查找這些數(shù)據(jù),需要使用多表查詢語法,交叉連接cross join:

查詢員工表emp:

select * from emp;

查詢部門表dept:

select * from dept;

一條SQL查詢兩個表:

select * from emp cross join dept;

表emp14條記錄,表dept4條記錄,交叉連接查詢后,14*4=56條記錄,交叉連接就是對這兩個表進(jìn)行笛卡爾乘積操作,笛卡爾乘積沒有實際意義,但是有理論意義。

關(guān)于交叉連接的寫法,MySQL中可以省略cross,Oracle中不可以省略不寫,上條SQL等價于:

select * from emp join dept;

三、自然連接(natural join)

交叉連接會查詢到許多冗余數(shù)據(jù),比如在員工表emp和部門表dept中,讓主鍵和外鍵關(guān)聯(lián)起來的外鍵deptno,沒有匹配到一起,造成數(shù)據(jù)冗余:

使用自然連接,可以自動匹配所有的同名列,讓同名列只在查詢中展示一次,提高查詢效率,

select * from emp natural join dept;

可以指定查詢的部分字段:

select empno,ename,deptno,dname from emp natural join dept;

當(dāng)查詢一個字段時,系統(tǒng)會分別從兩個關(guān)聯(lián)的表中查找,因此效率較低,為解決這個問題,我們可以在查詢目標(biāo)字段時,指定表名,格式為表名.字段名

select emp.empno,emp.ename,emp.deptno,dept.dname from emp natural join dept;

查詢結(jié)果和上述一致,但是查詢效率得到了提升。

此時,如果表名過長,查詢的SQL也會過長,在查詢時,我們可以為表起別名:

select e.empno,e.ename,d.dname,d.deptno
from emp e
natural join dept d;

四、內(nèi)連接

使用natural join 的缺點:會自動匹配表中所有的同名列,但是有的時候我們希望只匹配部分同名列,那么我們可以使用using子句,這屬于內(nèi)連接(inner join)

select * 
from emp as e
inner join dept as d
using(deptno);

using子句的缺點:關(guān)聯(lián)的字段,必須是同名的

解決方法:使用內(nèi)連接中的on子句

select * 
from emp e
inner join dept d
on (e.deptno = d.deptno);

五、總結(jié)

多表查詢的類型有:

  1. 交叉連接 cross join
  2. 自然連接 natural join
  3. 內(nèi)連接 - using子句
  4. 內(nèi)連接 - on子句

綜合來看:內(nèi)連接 - on子句的使用頻率最高。

六、補充

select *
from emp e
inner join dept d
on (e.deptno = d.deptno)
where sal > 3500;

條件:

1、篩選條件 where having

2、連接條件 on/using/natural

在SQL99語法當(dāng)中,篩選條件和連接條件是分開的。

總結(jié)

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

相關(guān)文章

  • mysql條件查詢and or使用方法及優(yōu)先級實例分析

    mysql條件查詢and or使用方法及優(yōu)先級實例分析

    這篇文章主要介紹了mysql條件查詢and or使用方法及優(yōu)先級,結(jié)合實例形式分析了mysql條件查詢and or基本功能、用法及優(yōu)先級相關(guān)操作技巧,需要的朋友可以參考下
    2020-04-04
  • MySQL日志配置與查看方法

    MySQL日志配置與查看方法

    作為數(shù)據(jù)庫管理員,我曾多次遇到因日志配置不當(dāng)導(dǎo)致的線上故障,今天我將結(jié)合多年一線運維經(jīng)驗,系統(tǒng)講解MySQL五大核心日志的配置與查看方法,并附上實際生產(chǎn)環(huán)境中的排錯案例,需要的朋友可以參考下
    2025-09-09
  • Mariadb數(shù)據(jù)庫的備份與恢復(fù)過程詳細(xì)介紹

    Mariadb數(shù)據(jù)庫的備份與恢復(fù)過程詳細(xì)介紹

    MariaDB是一個流行的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),備份與恢復(fù)數(shù)據(jù)是數(shù)據(jù)庫管理中非常重要的一個環(huán)節(jié),能夠保證數(shù)據(jù)的安全性和可靠性,這篇文章主要介紹了Mariadb數(shù)據(jù)庫的備份與恢復(fù)過程的相關(guān)資料,需要的朋友可以參考下
    2025-10-10
  • MySQL表的基本查詢操作大全(這一篇夠了)

    MySQL表的基本查詢操作大全(這一篇夠了)

    表的增刪查改,簡稱表的?CURD?操作?:?Create(創(chuàng)建),Update(更新),Retrieve(讀取),Delete(刪除),這篇文章主要介紹了MySQL表的基本查詢操作,感興趣的朋友一起看看吧
    2024-02-02
  • 用Eclipse連接MySQL數(shù)據(jù)庫的步驟

    用Eclipse連接MySQL數(shù)據(jù)庫的步驟

    這篇文章主要介紹了如何用Eclipse連接MySQL數(shù)據(jù)庫,需要的朋友可以參考下
    2015-08-08
  • MySQL的查詢緩存和Buffer Pool

    MySQL的查詢緩存和Buffer Pool

    這篇文章主要介紹了MySQL的查詢緩存和Buffer Pool,幫助大家更好的理解和學(xué)習(xí)MySQL 數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-11-11
  • MySQL 8中新增的這三大索引 隱藏、降序、函數(shù)

    MySQL 8中新增的這三大索引 隱藏、降序、函數(shù)

    這篇文章主要介紹了MySQL 8.x版本中新增的三大索引 隱藏索引、降索引序、函數(shù)索引,如果文章對你有點幫助,小伙伴們點贊、收藏、評論、分享走起呀
    2021-09-09
  • Mysql誤刪數(shù)據(jù)解決方案及kill語句原理

    Mysql誤刪數(shù)據(jù)解決方案及kill語句原理

    這篇文章主要介紹了Mysql誤刪數(shù)據(jù)解決方案及kill語句原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • MySQL中MTR的概念

    MySQL中MTR的概念

    這篇文章主要介紹了MySQL中MTR的概念,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-11-11
  • 玩轉(zhuǎn)?MySQL?庫表:庫和表的操作"通關(guān)指南"

    玩轉(zhuǎn)?MySQL?庫表:庫和表的操作"通關(guān)指南"

    文章主要介紹了MySQL數(shù)據(jù)庫的基本概念、結(jié)構(gòu)和操作方法,包括數(shù)據(jù)庫和MySQL服務(wù)端的區(qū)別,SQL語句分類,以及數(shù)據(jù)庫和表的創(chuàng)建、查看、修改和刪除等操作,最后還介紹了備份和恢復(fù)數(shù)據(jù)庫的方法
    2026-04-04

最新評論

宁陵县| 开化县| 屯门区| 长宁区| 北京市| 荥经县| 正宁县| 富阳市| 基隆市| 宁海县| 新乡县| 拉孜县| 武强县| 福鼎市| 旺苍县| 财经| 磐安县| 台山市| 波密县| 高平市| 安龙县| 宁强县| 平凉市| 富锦市| 万载县| 朝阳市| 无极县| 西和县| 黄平县| 安陆市| 曲水县| 梁平县| 芜湖县| 洪泽县| 三门县| 乌拉特后旗| 澳门| 富蕴县| 庆城县| 濮阳县| 开鲁县|