久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQL中的連接操作

151次閱讀
沒有評論

共計 3655 個字符,預計需要花費 10 分鐘才能閱讀完成。

本篇內(nèi)容主要講解“SQL 中的連接操作”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“SQL 中的連接操作”吧!

利用連接操作,可以根據(jù)表與表之間的邏輯聯(lián)系從兩個或多個表中查詢數(shù)據(jù)。

早期的 SQL 版本,實現(xiàn)連接方法是在 from 子句中給出連接操作的表名,在 where 子句中

給出連接條件。

例如,從學生、課程和成績表中,產(chǎn)生課程的成績單。from 子句列出連接運算的

3 個表,where 子句給出連接條件。在 where 子句的條件表達式中包含了連接條件和選擇

條件。

  例 1 從學生、課程和成績表中,產(chǎn)生數(shù)據(jù)庫課程的成績單。SQL 語句是:

  select 姓名,課程名,分數(shù)

  from 學生 S,課程 C,成績 G

  where S. 學號 =G. 學號 AND G. 課程號 =C. 課程號 AND C. 課程名稱 = 數(shù)據(jù)庫

middot;SQL-92 提供更豐富的連接操作,包括:內(nèi)連接、條件連接、自然連接、左外

連接、右外連接、全連接,同時增加了在 from 子句定義連接條件的方法。SQL-92 中 from

子句連接的語法格式:

  from 表 1 連接類型 表 2 [on ( 連接條件)]

因此,上述產(chǎn)生學生數(shù)據(jù)庫課程成績單的 SQL 語句可以寫成:

  select 姓名,課程名,分數(shù)

  from 學生 S join 成績 G on (S. 學號 =G. 學號)

  join 課程 C on (G. 課程號 =C. 課程號)

  where C. 課程名稱 = 數(shù)據(jù)庫

middot; 這種方法不僅簡化連接條件的表達方法,更重要是提高查詢效率。

  SQL 系統(tǒng)處理的邏輯順序是:

  1、from 子句中的連接條件

  2、where 子句中的連接條件與選擇條件

  3、having 子句中的篩選條件

所以,在使用支持 SQL-92 標準的系統(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 可省略。

  自然連接是等值連接的特例。

  middot; 設關(guān)系 R 和 S 進行連接操作,其連接條件為 P。如果 P 是 R 與 S 中連接屬性的

等值比較,稱為等值連接。

  middot; 若 R 與 S 進行等值連接,且 R 與 S 的連接屬性名相同,稱為自然連接。

  middot; 自然連接的實現(xiàn)方法是在內(nèi)連接的基礎上,用 select 子句消除重復列。

  有關(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)連接操作中不相匹配的元組,而其對應于 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)連接操作中不相匹配的元組,而其對應于 R 的屬性賦予空值

,這種連接稱為右外連接。右外連接的表示方法:from R right outer join S on (連

接條件 )

  全外連接是左外連接和右外連接的組合應用。全外連接的表示方法: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 可省略。假設有導師與研究生 2 個表。

例 1 查詢研究生與其導師的情況。此查詢涉及教師和研究生 2 個表,連接條件是:

研究生. 導師號 = 教師. 教工號。SQL 語句是:

  select *from 研究生 A inner join 教師 B on A. 導師號 = B. 教工號

  也可以寫成等價的 SQL 語句:

  select *

  from 研究生 A,教師 B

  where A. 導師號 = B. 教工號

  說明:這是一個內(nèi)連接的例子,查詢結(jié)果中只包含滿足連接條件的 4 行。

  二、自然連接

  設關(guān)系 R 和 S 進行連接操作,其連接條件為 P。如果 P 是 R 與 S 中連接屬性的等值比較,

稱為等值連接。若 R 與 S 進行等值連接,且 R 與 S 的連接屬性名相同,稱為自然連接。自然連

接是等值連接的特例。自然連接的實現(xiàn)方法是在內(nèi)連接的基礎上,用 select 子句消除重復

列。

  假設有學生、課程和成績 3 個表。例 1:根據(jù)學生、課程和成績表的信息,輸出 數(shù)

據(jù)庫 課程的成績單,包括姓名和分數(shù)。SQL 語句是:

  select 姓名,分數(shù)

  from 學生 A join 成績 B on(A. 學號 =B. 學號)join 課程 C on(B. 課號 =C. 課號)

  where C. 課程名 = 數(shù)據(jù)庫

等價的 SQL 語句:

  select 姓名,分數(shù)

  from 學生 A,成績 B,課程 C

  where A. 學號 =B. 學號 AND B. 課號 = C. 課號 AND C. 課程名 = 數(shù)據(jù)庫

這是一個自然連接的實例,查詢結(jié)果中包含滿足連接條件的 1 行,在查詢結(jié)果中沒有重復列。

  三、交叉連接

設有關(guān)系 R 和 S,R 與 S 的笛卡兒乘積稱為交叉連接。在 SQL 中,實現(xiàn)交叉連接的方法是在 from

子句中定義交叉連接類型:from R cross join S

例 1 學生與課程的笛卡兒乘積。

  select *

  from 學生 cross join 課程

等價的 SQL 語句:

  select *

  from 學生, 課程

  四、左外連接

關(guān)系 R 與 S 進行連接操作,連接條件為 P。若連接操作的結(jié)果中除了 R 與 S 在 P 上內(nèi)連接結(jié)果之外,

還包括左邊關(guān)系 R 在內(nèi)連接操作中不相匹配的元組,而其對應于 S 的屬性賦予空值,這種連接

稱為左外連接(left outer join)。

實現(xiàn)左外連接的 SQL 子句:from R left outer join S on (連接條件)

例 1:查詢學生選課情況,包括沒有選課的學生在內(nèi)。SQL 語句是:

  select A. 學號, A. 姓名, B. 課號, B. 分數(shù)

  from 學生 A left outer join 成績 B on(A. 學號 = B. 學號)

例 2:查詢教師指導研究生的情況,包括不指導研究生的教師。SQL 語句是:

  select *

  from 教師 A left outer join 研究生 B on(A. 教工號 = B. 導師號)

這是兩個左外連接的實例,查詢結(jié)果中除了滿足連接條件元組的之外,還包含左邊關(guān)系不滿足

連接條件的元組,而其對應的右邊屬性全部填充 NULL。

  五、右外連接

關(guān)系 R 與 S 進行連接操作,連接條件為 P。若連接操作的結(jié)果中除了 R 與 S 在 P 上內(nèi)連接結(jié)果之外,

還包括右邊關(guān)系 S 在內(nèi)連接操作中不相匹配的元組,而其對應于 R 的屬性賦予空值,這種連接

稱為右外連接(right outer join)。

實現(xiàn)右外連接的 SQL 子句:from R right outer join S on (連接條件)

例 1:查詢所開課程的選修情況,包括沒有任何學生選修的課程。SQL 語句是:

  select *

  from 成績 A right outer join 課程 B on(A. 課號 =B. 課號)

例 2:查詢所開課程和學生的學習狀況(學號、課程名和分數(shù)),其中還包括沒有任何學生選修

的課。SQL 語句是:

  select 學號, 課程名, 分數(shù)

  from 成績 A right outer join 課程 B on(A. 課號 =B. 課號)

這是 2 個右外連接的實例,查詢結(jié)果中除了滿足連接條件元組之外,還包含右邊關(guān)系不滿足連接

條件的元組,而其對應的左邊屬性全部填充 NULL。

  六、全外連接

全外連接(full outer join)是左外連接和右外連接的組合應用。實現(xiàn)全外連接的 SQL 子句:

  from R full outer join S on (連接條件)

  例 1:查詢研究生和教師的情況,包括沒有導師的研究生和沒有指導研究生的教師。

SQL 語句是:

  select *

  from 研究生 A full outer join 教師 B on (A. 導師號 =B. 教工號)

  這是全外連接的實例,查詢結(jié)果中除了滿足連接條件元組之外,還包含 2 個關(guān)系中不滿足

連接條件的元組,并且這些元組對應的屬性全部填充 NULL。

  七、自連接

連接操作可以利用別名的方法實現(xiàn)一個表自身的連接。實質(zhì)上,這種自身連接方法與兩個表的

連接操作完全相似。假設有教學進度表,其中先修列是本門課程的先修課程。例如,先學習

數(shù)據(jù)結(jié)構(gòu) 課程,再學習 數(shù)據(jù)庫 課程。例 1:查詢每一門課的先修課的先修課。例如,C5 的

先修課的先修課是 C6。用自連接實現(xiàn)查詢,連接條件是:

from 教學進度 A join 教學進度 B on (A. 先修 =B. 課號)

  select A. 課號,B. 先修

  from 教學進度 A join 教學進度 B

  on (A. 先修 =B. 課號)

到此,相信大家對“SQL 中的連接操作”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-01發(fā)表,共計3655字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 珲春市| 烟台市| 阜平县| 济源市| 含山县| 平遥县| 柳河县| 阳朔县| 巫溪县| 富源县| 祁阳县| 东明县| 淮北市| 门源| 美姑县| 修水县| 洞口县| 甘洛县| 辽源市| 邢台县| 阆中市| 海门市| 台中市| 安丘市| 海南省| 峨边| 黄骅市| 廉江市| 宁都县| 虞城县| 盐边县| 工布江达县| 周至县| 天水市| 南宁市| 舟山市| 台安县| 海伦市| 台湾省| 梁平县| 芜湖县|