SQL語句中不同的連接JOIN及SQL中join的各種用法
本文給大家較詳細的介紹了SQL語句中不同的連接JOIN及join的用法,感興趣的朋友跟隨小編一起看看吧為了從兩個表中獲取數(shù)據(jù),我們有時會用JOIN將兩個表連接起來。通常有以下幾種...
為了從兩個表中獲取數(shù)據(jù),我們有時會用JOIN將兩個表連接起來。通常有以下幾種連接方式:
JOIN or INNER JOIN(內(nèi)連接) : 這兩個是相同的,要求兩邊表同時有對應的數(shù)據(jù),返回行,任何一邊缺失數(shù)據(jù)就不顯示。
LEFT JOIN(左外連接):即使右邊的表中沒有匹配,也從左表返回所有的行。
RIGHT JOIN(右外連接):即使左邊的表中沒有匹配,也從右表返回所有的行。
FULL JOIN(全外連接):只要其中一個表中存在匹配就返回行。
如例,有g(shù)rade表(課程號sn,分數(shù)scroe,學號id),student表(學號id,學生姓名name),要查詢學生的姓名和成績
當JOIN或是INNER JOIN時,
SELECT
s.
name
,g.sn,g.score
from
student
as
s
join
grade
as
g
on
s.id = g.id
或者
SELECT
s.
name
,g.sn,g.score
from
student
as
s
inner
join
grade
as
g
on
s.id = g.id
結(jié)果集如下
當LEFT JOIN時,
SELECT
s.
name
,g.sn,g.score
from
student
as
s
left
join
grade
as
g
on
s.id = g.id
結(jié)果集如下
當RIGHT JOIN時,
SELECT
s.
name
,g.sn,g.score
from
student
as
s
right
join
grade
as
g
on
s.id = g.id
結(jié)果集如下
當FULL JOIN時,
SELECT
s.
name
,g.sn,g.score
from
student
as
s
full
join
grade
as
g
on
s.id = g.id
結(jié)果集如下
注意,兩個表連接時用on,在使用left join(right join或full join)時,on與where的區(qū)別是:
on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄
where條件是在臨時表生成好后再對臨時表進行過濾的條件,這時已經(jīng)沒有l(wèi)eft join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。如下圖,
on條件為黃色部分
SELECT
s.
name
,g.sn,g.score
from
student
as
s
left
join
grade
as
g
on
s.id = g.id
and
score =90
SELECT
s.
name
,g.sn,g.score
from
student
as
s
left
join
grade
as
g
on
s.id = g.id
where
score =90
下面看下SQL中join的各種用法
1.自然連接(natural join)
自然連接將表中具有相同名稱的列自動進行匹配,自然連接不必指定任何同等連接條件也不能認為指定哪些列需要被匹配,自然連接得到的結(jié)果表中,兩表中名稱相同的列只出現(xiàn)一次。
select
*
from
employee natural
join
department;
2.內(nèi)連接(inner join):產(chǎn)生的結(jié)果是A和B的交集(相同列里面的相同值)
內(nèi)連接查詢能將左表和右表中能關聯(lián)起來的數(shù)據(jù)連接后返回,返回的結(jié)果就是兩個表中所有相匹配的數(shù)據(jù)。
select
*
from
TableA
as
A
inner
join
TableB B
on
A.PK = B.PK;
select
*
from
TableA
as
A
inner
join
TableB B
on
A.PK > B.PK;
3.外連接(outer join)
內(nèi)連接是要顯示兩張表的內(nèi)存,而外連接不要求如此,外連接可以依據(jù)連接表保留左表,右表或全部表的行為而分為左外連接右外連接和全連接。
select
*
from
TableA
as
A
left
(
right
/
full
)
join
TableB
as
B
on
A.PA = B.PK;
Full Join:產(chǎn)生的結(jié)果是A和B的并集(如果沒有相同的值會用null作為值)
Left Join:產(chǎn)生表A的完全集,而B表中匹配的則有值(沒有匹配的則以null值取代)
Right Join:產(chǎn)生表B的完全集,而A表中匹配的則有值(沒有匹配的則以null值取代)
4.交叉連接(cross join)
又稱笛卡爾連接,交叉連接返回兩個集合的笛卡爾積。
select
*
from
TableA
cross
join
TableB;
參考鏈接:http://mazhuang.org/2017/09/11/joins-in-sql/
總結(jié)
以上所述是小編給大家介紹的SQL語句中不同的連接join及join的用法,希望對大家有所幫助。
SQL SERVER 2012數(shù)據(jù)庫自動備份的方法
文章主要為大家詳細介紹了SQL SERVER 2012數(shù)據(jù)庫自動備份的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下為了防止數(shù)據(jù)丟失,這里給大家介紹SQL SERVER2012數(shù)據(jù)自動備...
關于SQL server2008調(diào)試存儲過程的完整步驟
文章主要給大家分享介紹了關于sql server2008調(diào)試存儲過程的完整步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編...
SQL Server數(shù)據(jù)庫調(diào)整表中列的順序操作方法及遇到問題
文章主要介紹了SQL Server 數(shù)據(jù)庫調(diào)整表中列的順序操作,文中給大家通過詳細步驟介紹了需求及問題描述 ,需要的朋友可以參考下SQL Server 數(shù)據(jù)庫中表一旦創(chuàng)建,我們不建議擅自調(diào)...
SQL Server中的SELECT會阻塞SELECT相關資料
文章主要給大家介紹了SQL Server中的SELECT會阻塞SELECT的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧前言在SQL Server中...
Docker中部署mysql服務的方法及遇到的問題
文章主要介紹了Docker中部署mysql服務的方法及遇到的坑,本文是小編細心給大家收藏整理下來的,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下最近一直在學習搬運工,感覺...
利用數(shù)據(jù)庫trigger對安全進行監(jiān)控
最近幫一個朋友看他們的網(wǎng)站安全問題,他們非常擔心系統(tǒng)中的數(shù)據(jù)被篡改,因為一旦篡改可能就別人兌換東西或者套現(xiàn)走了就會造成損失,而最典型的修改一般都是利用事務性不一致和一些數(shù)據(jù)庫中的溢出等錯誤和直接獲取權(quán)...
win7下手動配置apache+php+mysql記
本來想學學php,于是就想搭建web服務器和sql環(huán)境,結(jié)果浪費掉了不少時間。大致的總結(jié)下,也算是長個記性。使用的安裝包分別是httpd-2.2.22-win32-x86-no_ssl.msi,php-5.2.5-Win32.zip和mysql-installer-communit...
完成Excel動態(tài)鏈接外部數(shù)據(jù)庫
我們有時需要在Excel中調(diào)取其他數(shù)據(jù)庫的數(shù)據(jù),并且希望其他數(shù)據(jù)庫數(shù)據(jù)改變時,Excel中調(diào)取的數(shù)據(jù)也隨之動態(tài)改變。下面介紹在Excel中通過“新建數(shù)據(jù)庫查詢”(MicrosoftQuery)的方法來實現(xiàn)動態(tài)鏈接數(shù)據(jù)庫。...
網(wǎng)站被sql注入的修復方法
近日,網(wǎng)站頻頻被黑。在網(wǎng)站里莫名其妙的多出一篇文章,還有多出一組貼圖。正在納悶是誰可以登陸我的后臺發(fā)表文章和圖片的時候,我的qq彈出消息,一個陌生人給我發(fā)消息,說我的網(wǎng)站有漏洞,還說是他弄了我的網(wǎng)站。不過還好,他給...
SQL 注入技術(shù)詳解
1.1概述1.2背景1.3字符編碼2.1綜合測試2.2測試過程2.3分析結(jié)果3.1繞過驗證3.2SELECT3.2.1直接利用...