自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

工作面試必備:SQL 中的各種連接 JOIN 的區(qū)別總結(jié)!

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
ON條件是在生成臨時(shí)表時(shí)使用的條件,它不管ON中的條件是否為真,都會(huì)返回左邊表中的記錄(以左連接為例)。WHERE條件是在臨時(shí)表生成好后,再對(duì)臨時(shí)表產(chǎn)生的數(shù)據(jù)進(jìn)行過(guò)濾條件篩選。

前言

盡管大多數(shù)開(kāi)發(fā)者在日常工作中經(jīng)常用到Join操作,如Inner Join、Left Join、Right Join等,但在面對(duì)特定查詢(xún)需求時(shí),選擇哪種Join類(lèi)型以及如何使用On和Where子句往往成為一大挑戰(zhàn)。特別是對(duì)于初學(xué)者而言,這些概念可能顯得抽象且難以區(qū)分。在實(shí)際應(yīng)用中,錯(cuò)誤地使用Join類(lèi)型或混淆On與Where子句的功能,都可能導(dǎo)致數(shù)據(jù)查詢(xún)結(jié)果的不準(zhǔn)確或遺漏關(guān)鍵信息。

今天大姚給大家講解一下SQL中關(guān)于Join、Inner Join、Left Join、Right Join、Full Join、On、Where區(qū)別和用法。

SQL連接JOIN圖解

圖片圖片

數(shù)據(jù)庫(kù)表結(jié)構(gòu)和對(duì)應(yīng)數(shù)據(jù)

本文咱們用的是MS Sql Server作為數(shù)據(jù)操作示例。

Students 學(xué)生表:

圖片圖片

Class 班級(jí)表:

圖片圖片

Join(where聯(lián)立查詢(xún))

概念:用于兩表或多表之間數(shù)據(jù)聯(lián)立查詢(xún)。

select * from Students s,Class c where s.ClassId=c.ClassId

圖片圖片

Inner Join(內(nèi)連接查詢(xún))

概念:與Join相同,兩表或多表之間聯(lián)立查詢(xún)數(shù)據(jù),因此我們?cè)谑褂枚啾韏oin查詢(xún)的時(shí)候既可以使用where關(guān)聯(lián),也可以是inner join關(guān)聯(lián)查詢(xún)。

select * from Students s inner join  Class c  on s.ClassId=c.ClassId

圖片圖片

Left Join(左連接查詢(xún))

概念:以左表中的數(shù)據(jù)為主,即使與右表中的數(shù)據(jù)不匹配也會(huì)把左表中的所有數(shù)據(jù)返回。

select * from Students s left join  Class c on s.ClassId=c.ClassId

圖片圖片

Right Join(右連接查詢(xún))

概念:與Left Join的用法相反,是以右表中的數(shù)據(jù)為主,即使左表中不存在匹配數(shù)據(jù)也會(huì)把右表中所有數(shù)據(jù)返回。

select * from Students s right join  Class c  on s.ClassId=c.ClassId

圖片圖片

Full Join(全連接查詢(xún))

概念:返回表中所有的數(shù)據(jù)數(shù)據(jù),無(wú)論匹配與否。

select * from Students s Full JOIN  Class c  on s.ClassId=c.ClassId

圖片圖片

On、Where的異同

這兩個(gè)概念中也是絕大多數(shù)人無(wú)法區(qū)分到底它們兩者之間有何區(qū)別,我什么時(shí)候使用On,什么時(shí)候使用Where,下面將分別展示兩者的異同。

On條件的作用:

ON的使用無(wú)論是左右內(nèi)全都使用到了On來(lái)進(jìn)行關(guān)聯(lián)!

對(duì)于inner join 的作用就是起到了與where相同的作用條件篩選:

select * from Students s inner join  Class c  on s.ClassId=c.ClassId and s.Sex='男'

圖片圖片

對(duì)于左右連接而言,無(wú)論查詢(xún)條件是否滿(mǎn)足都會(huì)返回對(duì)應(yīng)所指向的那邊的所有數(shù)據(jù):

select * from Students s left join  Class c  on s.ClassId=c.ClassId and s.Sex='男'

圖片圖片

對(duì)于Full Join 而言無(wú)論,只有同時(shí)滿(mǎn)足的時(shí)候才會(huì)返回全部關(guān)聯(lián)的數(shù)據(jù),假如有一方不滿(mǎn)足返回以左邊的表數(shù)據(jù)為基準(zhǔn)返回:

--全連接
select * from Students s full join  Class c  on s.ClassId=c.ClassId
 
--全連接加on查詢(xún)
select * from Students s full join  Class c  on s.ClassId=c.ClassId and s.Sex='男'

圖片圖片

圖片圖片

WHERE條件的作用:

WHERE條件在臨時(shí)表生成后的過(guò)濾階段應(yīng)用,對(duì)最終結(jié)果進(jìn)行篩選。此時(shí)LEFT JOIN的“保留左表所有記錄”特性已失效,WHERE 會(huì)過(guò)濾掉不符合條件的行(包括左表記錄),如下所示:

僅返回右表 ClassId=1 的匹配記錄,左表中無(wú)匹配的記錄會(huì)被過(guò)濾掉。

select * from Students s left join Class c on s.ClassId=c.ClassId WHERE c.ClassId=1

區(qū)別總結(jié):

一句話(huà)概括:ON用作于生成臨時(shí)表時(shí)的條件篩選,WHERE用作于對(duì)臨時(shí)表中的記錄進(jìn)行過(guò)濾。

  • ON條件是在生成臨時(shí)表時(shí)使用的條件,它不管ON中的條件是否為真,都會(huì)返回左邊表中的記錄(以左連接為例)。
  • WHERE條件是在臨時(shí)表生成好后,再對(duì)臨時(shí)表產(chǎn)生的數(shù)據(jù)進(jìn)行過(guò)濾條件篩選。
責(zé)任編輯:武曉燕 來(lái)源: 追逐時(shí)光者
相關(guān)推薦

2023-10-08 07:37:44

SQL連接

2019-04-16 15:18:28

SQLJOIN數(shù)據(jù)庫(kù)

2010-09-09 15:51:22

sqlinner join語(yǔ)法

2023-02-28 07:40:09

編譯器Java線(xiàn)程安全

2019-03-18 15:00:48

SQLJoin用法數(shù)據(jù)庫(kù)

2020-02-16 12:05:35

javascript前端面試

2020-09-18 12:00:24

Spark SQLJoin數(shù)據(jù)庫(kù)

2010-05-21 17:30:28

2010-11-08 15:47:01

SQL Server外

2010-11-11 13:51:36

SQL Server內(nèi)

2009-05-12 10:55:06

SQLFOR XML模式

2010-09-09 15:43:13

SQLjoin語(yǔ)法

2017-10-20 11:12:12

數(shù)據(jù)類(lèi)型關(guān)鍵字對(duì)象

2023-06-07 07:43:57

數(shù)據(jù)庫(kù)JOIN類(lèi)型

2021-04-02 08:00:00

工程師IT首席技術(shù)官

2021-08-12 07:49:25

Git 索引HEAD

2018-04-03 15:20:07

數(shù)據(jù)庫(kù)MySQLjoin連接

2009-06-16 15:03:53

Hibernate保存Hibernate

2022-04-02 10:23:12

MySQL數(shù)據(jù)庫(kù)

2023-03-08 07:50:57

企業(yè)數(shù)據(jù)治理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)