內連線與外連線總結

2021-10-24 14:48:33 字數 2685 閱讀 4910

內連線(典型的聯接運算,使用像 = 或 <> 之類的比較運算子)。包括相等聯接和自然聯接。

首先說明內連線的乙個重要性質:內連線查詢結果與表的順序無關

(當然順序可能會發生變化,但是對應關係絕對不會錯亂!!!)

1.1 交叉連線(cross join)

當然,他還有其他的名字,比如:笛卡爾積,交叉積,還有最奇怪的名字「沒有連線」(no join)

select s.sname,c.cname

from student s

cross join

course c;

其中,cross join可以省略,簡寫為

select s.sname,c.cname

from student s , course c;

交叉連線會把第一張表的每個值與第二張表的每個值進行匹配,結果如下

每個課程對應一位老師 tno 是外來鍵

我們想找到每個課程的老師是誰,只需要將course表中的tno和teacher中的主鍵進行比對,就會得到結果

我們繼續沿用1.2中的表結構,如果我們想找到每個老師不教授的課程,這時候我們可以使用不等連線(說白了就是=換成<>,其他沒有什麼區別)

select c.cname,t.tname

from teacher t inner join course c

on c.tno<>t.tno

結果:

1.4 自然連線

繼續沿用1.2的表結構

注意:自然連線只有在連線的列在兩張表中的名稱都相同時才會有用

其實,自然連線就是自動識別相同列的相等連線

select course.cname,teacher.tname

from teacher

natural join

course

order by course.cname;

得到的結果和1.2中的結果完全一樣(順序可能不同)

外連線

首先說明外連線不同於內連線的乙個性質:外連線查詢與表的順序有關

2.1 左外連線 left join或left outer join

左向外聯接的結果集包括 left outer子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。

left join 是left outer join的簡寫,它的全稱是左外連線,是外連線中的一種。

左(外)連線,左表(a_table)的記錄將會全部表示出來,而右表(b_table)只會顯示符合搜尋條件的記錄。右表記錄不足的地方均為null。

2.2 右外連線 right join 或 right outer join

右外連線是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。

說明:right join是right outer join的簡寫,它的全稱是右外連線,是外連線中的一種。

與左(外)連線相反,右(外)連線,左表(a_table)只會顯示符合搜尋條件的記錄,而右表(b_table)的記錄將會全部表示出來。左表記錄不足的地方均為null。

2.3 全連線(全外連線)full join 或 full outer join

mysql目前不支援此種方式,可以用其他方式替代解決。

內連線與外連線

本篇文章只是簡單介紹一下資料庫中的內連線和外連線。舉最簡單的兩個表的例子,有表a和表b,表a如下 aid主鍵,自增 表b如下 bid主鍵,自增 有sql基本知識的人都知道,兩個表要做連線,就必須有個連線字段,從上表中的資料可以看出,在a表中的aid和b表中的bnameid就是兩個連線字段。現在先說內...

內連線與外連線

最近一段時間找工作,對以往的知識進行了複習,以下是本人對資料庫中表連線的總結 連線 連線是指將關聯式資料庫中的兩個表根據內容一定的條件連線成乙個表 連線型別 內連線與外連線 a 內連線 又稱等值連線,如 select a.b.from tablea a,tableb b where a.id b.i...

內連線與外連線

圖3 連線關係圖 現在我們對內連線和外連線一一講解。1.內連線 利用內連線可獲取兩表的公共部分的記錄,即圖3的記錄集c 語句如下 select from a join b on a.aid b.bnameid 執行結果如下圖4所示 圖4 內連線資料 其實select from a,b where a...