內連線外連線

2021-09-30 08:17:59 字數 2658 閱讀 6563

內連線

內連線也叫連線,是最早的一種連線,最早被稱為普通連線或自然連線。內連線是從結果中刪除其他被連線表中沒有匹配行的所有行,所以內連線可能會丟失資訊。

內連線的語法:

select fieldlist

from table1 [inner]join table2

on table1.column=table2.column

乙個表中的行和與另外乙個表中的行匹配連線。表中的資料決定了如何對這些行進行組合。從每乙個表中選取一行,根據這些列的值是否相同,組合方式分為一對

一、多對一和多對多的關係。

1.一對一關係

當連線的兩個表,兩個連線列的值完全相同,則兩個表連線相當於一對一的關係。

下面在「pubs」資料庫中「titles」和「titleauthor」兩個表中,根據相同列「title_id」進行內連線。在查詢分析器中輸入的sql語句如下:

use pubs

select *

from   titles

innerjoin titleauthor

on   titles.title_id= titleauthor.title_id

實現的過程如圖1所示。

圖1內連線時一對一的關係

說明:表「titles」和「titleauthor」都是sql server自帶的資料庫「pubs」的表。由於兩個表中的title_id列都是具有惟一值的索引,所以兩個表的內連線屬於一對一的關係。

2.多對一關係

當連線的兩個表,其中乙個表要連線的列出現重複值,另外乙個表的值是惟一的。這時連線的兩個表之間的出現了多對一的關係。

下面「student」表中的「學號」具有惟一值,而「grade」成績表中的「學號」有重複值。現在實現這兩個表的內連線。在查詢分析器中輸入的sql語句如下:

use student

select *

from grade

joinstudent

on student.學號=grade.學號 

實現的過程如圖2所示。

圖2內連線時多對一的關係

3.多對多關係

當連線的兩個表,要連線的列都出現重複值,這時連線的兩個表之間出現多對多的關係。

本例是sql server自帶的資料庫「pubs」,其中的兩個表「titles」和「roysched」中的「royalty」列都有重複值,現在實現這兩個表的內連線。在查詢分析器中輸入的sql語句如下:

use pubs

select *

from titles

innerjoin roysched

on titles.royalty=roysched.royalty 

實現的過程如圖3所示。

圖3內連線時多對多的關係

外連線則擴充了內連線的功能,會把內連線中刪除表源中的一些保留下來,由於保留下來的行不同,把外連線分為左外連線、右外連線和全外連線這3種連線。

1.左外連線

左外連線保留了第乙個表的所有行,但只包含第二個表與第一表匹配的行。第二個表相應的空行被放入null值。

左外連線的語法:

use student

select fieldlist

from table1leftjointable2

on table1.column=table2.column

下面把「student」表和「grade」表左外連線,第乙個表「student」有不滿足連線條件的行。在查詢分析器中輸入的sql語句如下:

use student

select *

from student

leftjoin grade

on student.學號=grade.學號

實現的過程如圖1所示。

2.右外連線

右外連線保留了第二個表的所有行,但只包含第乙個表與第二個表匹配的行。第乙個表相應空行被入null值。

右外連線的語法:

use student

select fieldlist

from table1 rightjoin table2

on table1.column=table2.column

下面把「grade」表和「course」表右外連線,第二個表「course」有不滿足連線條件的行。在查詢分析器中輸入的sql語句如下:

use student

select *

from grade

rightjoin course

on course.課程代號=grade.課程代號

實現的過程如圖2所示。

圖2右外連線

3.全外連線

全外連線會把兩個表所有的行都顯示在結果表中。

全外連線的語法:

use student

select fieldlist

from table1 fulljoin table2

on table1.column=table2.column

把「grade」表和「course」表實現全連線,兩個表都有不滿足連線條件的行。在查詢分析器中輸入的sql語句如下:

use student

select * from

grade full

joincourse

on course.課程代號=grade.課程代號

實現的過程如圖3所示。

SQL 內連線,外連線(左外連線 右外連線)

參考整理筆記 關鍵字 inner join on 語句 select from a table a inner join b table bon a.a id b.b id 執行結果 說明 組合兩個表中的記錄,返回關聯字段相符的記錄,也就是返回兩個表的交集 陰影 部分。關鍵字 left join o...

Oracle外連線,左外連線,右外連線,內連線簡析

內連線即普通等值連線 select e.ename,e.job,e.sal,d.dname from emp e inner join dept d on e.deptno d.deptno where e.sal 2000 select e.ename e.job,e.sal d.dname fr...

SQL 內連線,外連線

假設一堆男女在教堂,有夫婦有單身的,假設男為左表,女為右表 教父說 結了婚的人請出去,結了婚的人請手拉手,於是結了婚的男女站了起來,這就是inner 內連 教父說 男的並且和這些男的結婚的女的請出去,結了婚的人請手拉手,於是,結了婚的夫婦手拉手出去,單身的男的也出去了。這就是 left 左連 教父說...