中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL中的連接操作

發布時間:2021-08-16 21:52:02 來源:億速云 閱讀:201 作者:chen 欄目:數據庫

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

利用連接操作,可以根據表與表之間的邏輯聯系從兩個或多個表中查詢數據。

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

給出連接條件。

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

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

條件。

      例1 從學生、課程和成績表中,產生數據庫課程的成績單。SQL語句是:

      select 姓名,課程名,分數

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

      where S.學號=G.學號AND G.課程號=C.課程號AND C.課程名稱='數據庫'

·SQL-92提供更豐富的連接操作,包括:內連接、條件連接、自然連接、左外

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

子句連接的語法格式:

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

因此,上述產生學生數據庫課程成績單的SQL語句可以寫成:

      select 姓名,課程名,分數

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

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

      where C.課程名稱='數據庫'

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

   SQL系統處理的邏輯順序是:

          1、from子句中的連接條件

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

          3、having子句中的篩選條件

所以,在使用支持SQL-92標準的系統時,建議用from子句定義連接條件。

      關系R和S進行連接操作,且連接條件為P。若連接的結果中只保含R與S在P上相匹

配的元組,這種連接屬于內連接(inner join)。用from子句表示內連接的方法:

from R [inner] join S [on (<連接條件>)] 其中,inner可省略。

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

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

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

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

          &middot;自然連接的實現方法是在內連接的基礎上,用select子句消除重復列。

      有關系R和S,R與S的笛卡兒乘積稱為交叉連接。交叉連接的實現方法:在from子

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

      關系R與S進行連接操作,連接條件為P。若連接操作的結果中除了R與S在P上內連

接結果之外,還包括左邊關系R在內連接操作中不相匹配的元組,而其對應于S的屬性賦予

空值,這種連接稱為左外連接。左外連接的表示方法:from R left outer join S on

(<連接條件>)

      關系R與S進行連接操作,連接條件為P。若連接操作的結果中除了R與S在P上內連接

結果之外,還包括右邊關系S在內連接操作中不相匹配的元組,而其對應于R的屬性賦予空值

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

接條件>)

      全外連接是左外連接和右外連接的組合應用。全外連接的表示方法:from R full

outer join S on (<連接條件>)

自連接:連接操作可以利用別名的方法實現一個表自身的連接。實質上,這種自身連接方法與

兩個表的連接操作完全相似。

      一、內連接

      關系R和S進行連接操作,且連接條件為P。若連接操作的結果中只包含R與S在P上相匹

配的行,這種連接屬于內連接(inner join)。用from子句表示內連接的子句:

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.教工號

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

      二、自然連接

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

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

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

列。

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

據庫"課程的成績單,包括姓名和分數。SQL語句是:

      select 姓名,分數

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

      where C.課程名='數據庫'

等價的SQL語句:

      select 姓名,分數

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

      where A.學號=B.學號AND B.課號= C.課號AND C.課程名='數據庫'

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

      三、交叉連接

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

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

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

      select *

      from 學生cross join 課程

等價的SQL語句:

      select *

      from 學生, 課程

      四、左外連接

關系R與S進行連接操作,連接條件為P。若連接操作的結果中除了R與S在P上內連接結果之外,

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

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

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

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

      select A.學號, A.姓名, B.課號, B.分數

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

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

      select *

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

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

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

      五、右外連接

關系R與S進行連接操作,連接條件為P。若連接操作的結果中除了R與S在P上內連接結果之外,

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

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

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

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

      select *

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

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

的課。SQL語句是:

      select 學號, 課程名, 分數

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

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

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

      六、全外連接

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

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

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

SQL語句是:

      select *

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

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

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

      七、自連接

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

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

"數據結構"課程,再學習"數據庫"課程。例1:查詢每一門課的先修課的先修課。例如,C5的

先修課的先修課是C6。用自連接實現查詢,連接條件是:

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

      select A.課號,B.先修

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

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

到此,相信大家對“SQL中的連接操作”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

sql
AI

社旗县| 东安县| 赤壁市| 赤峰市| 晋宁县| 安宁市| 江安县| 宜昌市| 怀来县| 衡阳县| 本溪| 丰城市| 保山市| 桐乡市| 余江县| 翼城县| 东丽区| 石楼县| 东乌珠穆沁旗| 天津市| 榆树市| 吉林省| 绥化市| 获嘉县| 上饶县| 淮安市| 家居| 乌鲁木齐市| 额尔古纳市| 大连市| 海淀区| 崇信县| 南江县| 安阳县| 台中县| 洪雅县| 普兰店市| 仪陇县| 绩溪县| 桑日县| 和顺县|