本篇內(nèi)容主要講解“SQL中的連接操作”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“SQL中的連接操作”吧!
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、二七網(wǎng)絡(luò)推廣、小程序開發(fā)、二七網(wǎng)絡(luò)營銷、二七企業(yè)策劃、二七品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供二七建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
利用連接操作,可以根據(jù)表與表之間的邏輯聯(lián)系從兩個或多個表中查詢數(shù)據(jù)。
早期的SQL版本,實現(xiàn)連接方法是在from子句中給出連接操作的表名,在where子句中
給出連接條件。
例如,從學(xué)生、課程和成績表中,產(chǎn)生課程的成績單。from子句列出連接運算的
3個表,where子句給出連接條件。在where子句的條件表達式中包含了連接條件和選擇
條件。
例1 從學(xué)生、課程和成績表中,產(chǎn)生數(shù)據(jù)庫課程的成績單。SQL語句是:
select 姓名,課程名,分?jǐn)?shù)
from學(xué)生S,課程C,成績G
where S.學(xué)號=G.學(xué)號AND G.課程號=C.課程號AND C.課程名稱='數(shù)據(jù)庫'
·SQL-92提供更豐富的連接操作,包括:內(nèi)連接、條件連接、自然連接、左外
連接、右外連接、全連接,同時增加了在from子句定義連接條件的方法。SQL-92中from
子句連接的語法格式:
from <表1> <連接類型> <表2> [on (<連接條件>)]
因此,上述產(chǎn)生學(xué)生數(shù)據(jù)庫課程成績單的SQL語句可以寫成:
select 姓名,課程名,分?jǐn)?shù)
from 學(xué)生S join 成績G on (S.學(xué)號=G.學(xué)號)
join課程C on (G.課程號=C.課程號)
where C.課程名稱='數(shù)據(jù)庫'
· 這種方法不僅簡化連接條件的表達方法,更重要是提高查詢效率。
SQL系統(tǒng)處理的邏輯順序是:
1、from子句中的連接條件
2、where子句中的連接條件與選擇條件
3、having子句中的篩選條件
所以,在使用支持SQL-92標(biāo)準(zhǔn)的系統(tǒng)時,建議用from子句定義連接條件。
關(guān)系R和S進行連接操作,且連接條件為P。若連接的結(jié)果中只保含R與S在P上相匹
配的元組,這種連接屬于內(nèi)連接(inner join)。用from子句表示內(nèi)連接的方法:
from R [inner] join S [on (<連接條件>)] 其中,inner可省略。
自然連接是等值連接的特例。
·設(shè)關(guān)系R和S進行連接操作,其連接條件為P。如果P是R與S中連接屬性的
等值比較,稱為等值連接。
·若R與S進行等值連接,且R與S的連接屬性名相同,稱為自然連接。
·自然連接的實現(xiàn)方法是在內(nèi)連接的基礎(chǔ)上,用select子句消除重復(fù)列。
有關(guān)系R和S,R與S的笛卡兒乘積稱為交叉連接。交叉連接的實現(xiàn)方法:在from子
句中定義交叉連接類型:from R cross join S。
關(guān)系R與S進行連接操作,連接條件為P。若連接操作的結(jié)果中除了R與S在P上內(nèi)連
接結(jié)果之外,還包括左邊關(guān)系R在內(nèi)連接操作中不相匹配的元組,而其對應(yīng)于S的屬性賦予
空值,這種連接稱為左外連接。左外連接的表示方法:from R left outer join S on
(<連接條件>)
關(guān)系R與S進行連接操作,連接條件為P。若連接操作的結(jié)果中除了R與S在P上內(nèi)連接
結(jié)果之外,還包括右邊關(guān)系S在內(nèi)連接操作中不相匹配的元組,而其對應(yīng)于R的屬性賦予空值
,這種連接稱為右外連接。右外連接的表示方法:from R right outer join S on (<連
接條件>)
全外連接是左外連接和右外連接的組合應(yīng)用。全外連接的表示方法:from R full
outer join S on (<連接條件>)
自連接:連接操作可以利用別名的方法實現(xiàn)一個表自身的連接。實質(zhì)上,這種自身連接方法與
兩個表的連接操作完全相似。
一、內(nèi)連接
關(guān)系R和S進行連接操作,且連接條件為P。若連接操作的結(jié)果中只包含R與S在P上相匹
配的行,這種連接屬于內(nèi)連接(inner join)。用from子句表示內(nèi)連接的子句:
from R [inner] join S [on (<連接條件>)]
其中,inner可省略。假設(shè)有導(dǎo)師與研究生2個表。
例1 查詢研究生與其導(dǎo)師的情況。此查詢涉及教師和研究生2個表,連接條件是:
<研究生.導(dǎo)師號=教師.教工號>。SQL語句是:
select *from 研究生A inner join教師B on A.導(dǎo)師號= B.教工號
也可以寫成等價的SQL語句:
select *
from 研究生A,教師B
where A.導(dǎo)師號= B.教工號
說明:這是一個內(nèi)連接的例子,查詢結(jié)果中只包含滿足連接條件的4行。
二、自然連接
設(shè)關(guān)系R和S進行連接操作,其連接條件為P。如果P是R與S中連接屬性的等值比較,
稱為等值連接。若R與S進行等值連接,且R與S的連接屬性名相同,稱為自然連接。自然連
接是等值連接的特例。自然連接的實現(xiàn)方法是在內(nèi)連接的基礎(chǔ)上,用select子句消除重復(fù)
列。
假設(shè)有學(xué)生、課程和成績3個表。例1:根據(jù)學(xué)生、課程和成績表的信息,輸出"數(shù)
據(jù)庫"課程的成績單,包括姓名和分?jǐn)?shù)。SQL語句是:
select 姓名,分?jǐn)?shù)
from 學(xué)生A join 成績B on(A.學(xué)號=B.學(xué)號)join 課程C on(B.課號=C.課號)
where C.課程名='數(shù)據(jù)庫'
等價的SQL語句:
select 姓名,分?jǐn)?shù)
from 學(xué)生A,成績B,課程C
where A.學(xué)號=B.學(xué)號AND B.課號= C.課號AND C.課程名='數(shù)據(jù)庫'
這是一個自然連接的實例,查詢結(jié)果中包含滿足連接條件的1行,在查詢結(jié)果中沒有重復(fù)列。
三、交叉連接
設(shè)有關(guān)系R和S,R與S的笛卡兒乘積稱為交叉連接。在SQL中,實現(xiàn)交叉連接的方法是在from
子句中定義交叉連接類型:from R cross join S
例1 學(xué)生與課程的笛卡兒乘積。
select *
from 學(xué)生cross join 課程
等價的SQL語句:
select *
from 學(xué)生, 課程
四、左外連接
關(guān)系R與S進行連接操作,連接條件為P。若連接操作的結(jié)果中除了R與S在P上內(nèi)連接結(jié)果之外,
還包括左邊關(guān)系R在內(nèi)連接操作中不相匹配的元組,而其對應(yīng)于S的屬性賦予空值,這種連接
稱為左外連接(left outer join)。
實現(xiàn)左外連接的SQL子句:from R left outer join S on (<連接條件>)
例1:查詢學(xué)生選課情況,包括沒有選課的學(xué)生在內(nèi)。SQL語句是:
select A.學(xué)號, A.姓名, B.課號, B.分?jǐn)?shù)
from 學(xué)生A left outer join成績B on (A.學(xué)號= B.學(xué)號)
例2:查詢教師指導(dǎo)研究生的情況,包括不指導(dǎo)研究生的教師。SQL語句是:
select *
from 教師A left outer join研究生B on (A.教工號= B.導(dǎo)師號)
這是兩個左外連接的實例,查詢結(jié)果中除了滿足連接條件元組的之外,還包含左邊關(guān)系不滿足
連接條件的元組,而其對應(yīng)的右邊屬性全部填充NULL。
五、右外連接
關(guān)系R與S進行連接操作,連接條件為P。若連接操作的結(jié)果中除了R與S在P上內(nèi)連接結(jié)果之外,
還包括右邊關(guān)系S在內(nèi)連接操作中不相匹配的元組,而其對應(yīng)于R的屬性賦予空值,這種連接
稱為右外連接(right outer join)。
實現(xiàn)右外連接的SQL子句:from R right outer join S on (<連接條件>)
例1:查詢所開課程的選修情況,包括沒有任何學(xué)生選修的課程。SQL語句是:
select *
from 成績A right outer join 課程B on(A.課號=B.課號)
例2:查詢所開課程和學(xué)生的學(xué)習(xí)狀況(學(xué)號、課程名和分?jǐn)?shù)),其中還包括沒有任何學(xué)生選修
的課。SQL語句是:
select 學(xué)號, 課程名, 分?jǐn)?shù)
from 成績A right outer join 課程B on(A.課號=B.課號)
這是2個右外連接的實例,查詢結(jié)果中除了滿足連接條件元組之外,還包含右邊關(guān)系不滿足連接
條件的元組,而其對應(yīng)的左邊屬性全部填充NULL。
六、全外連接
全外連接(full outer join)是左外連接和右外連接的組合應(yīng)用。實現(xiàn)全外連接的SQL子句:
from R full outer join S on (<連接條件>)
例1:查詢研究生和教師的情況,包括沒有導(dǎo)師的研究生和沒有指導(dǎo)研究生的教師。
SQL語句是:
select *
from研究生A full outer join 教師B on (A.導(dǎo)師號=B.教工號)
這是全外連接的實例,查詢結(jié)果中除了滿足連接條件元組之外,還包含2個關(guān)系中不滿足
連接條件的元組,并且這些元組對應(yīng)的屬性全部填充NULL。
七、自連接
連接操作可以利用別名的方法實現(xiàn)一個表自身的連接。實質(zhì)上,這種自身連接方法與兩個表的
連接操作完全相似。假設(shè)有教學(xué)進度表,其中先修列是本門課程的先修課程。例如,先學(xué)習(xí)
"數(shù)據(jù)結(jié)構(gòu)"課程,再學(xué)習(xí)"數(shù)據(jù)庫"課程。例1:查詢每一門課的先修課的先修課。例如,C5的
先修課的先修課是C6。用自連接實現(xiàn)查詢,連接條件是:
from 教學(xué)進度A join 教學(xué)進度B on (A.先修=B.課號)
select A.課號,B.先修
from 教學(xué)進度A join 教學(xué)進度B
on (A.先修=B.課號)
到此,相信大家對“SQL中的連接操作”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!