在之前,我對mssql中的內連線和外連線所得出的資料集不是很清楚。這幾天重新溫習了一下sql的書本,現在的思路應該是很清楚了,現在把自己的理解發出來給大家溫習下。希望和我一樣對sql的連線語句不太理解的朋友能夠有所幫助。(發這麼菜的教程,各位大大們別笑話偶了,呵:d ) 有兩個表a和表b。表a結構如下: aid:int;標識種子,主鍵,自增id aname:varchar 資料情況,即用select * from a出來的記錄情況如下圖1所示:
圖1:a表資料
表b結構如下: bid:int;標識種子,主鍵,自增id bnameid:int 資料情況,即用select * from b出來的記錄情況如下圖2所示:
圖2:b表資料
為了把bid和aid加以區分,不讓大家有誤解,所以把bid的起始種子設定為100。有sql基本知識的人都知道,兩個表要做連線,就必須有個連線字段,從上表中的資料可以看出,在a表中的aid和b表中的bnameid就是兩個連線字段。下圖3說明了連線的所有記錄集之間的關係:
圖3:連線關係圖
現在我們對內連線和外連線一一講解。 1.內連線:利用內連線可獲取兩表的公共部分的記錄,即圖3的記錄集c 語句如下:select * from a join b on a.aid=b.bnameid 執行結果如下圖4所示:其實select * from a,b where a.aid=b.bnameid與select * from a join b on a.aid=b.bnameid的執行結果是一樣的。
圖4:內連線資料
2.外連線:外連線分為兩種,一種是左連線(left join)和右連線(right join)
(1)左連線(left join):即圖3公共部分記錄集c+表a記錄集a1。
語句如下:select * from a left join b on a.aid=b.bnameid
執行結果如下圖5所示:
圖5:左連線資料
說明:在語句中,a在b的左邊,並且是left join,所以其運算方式為:a左連線b的記錄=圖3公共部分記錄集c+表a記錄集a1
在圖3中即記錄集c中的存在的aid為:2 3 6 7 8
圖1中即表a所有記錄集a中存在的aid為:1 2 3 4 5 6 7 8 9
表a記錄集a1中存在的aid=(圖1中即a表中所有aid)-(圖3中即記錄集c中存在的aid),最終得出為:1 4 5 9
由此得出圖5中a左連線b的記錄=圖3公共部分記錄集c+表a記錄集a1, 最終得出的結果圖5中可以看出bnameid及bid非null的記錄都為圖3公共部分記錄集c中的記錄;bnameid及bid為null的aid為1 4 5 9的四筆記錄就是表a記錄集a1中存在的aid。
(2)右連線(right join):即圖3公共部分記錄集c+表b記錄集b1。
語句如下:select * from a right join b on a.aid=b.bnameid 執行結果如下圖6所示:
圖6:右連線資料
說明: 在語句中,a在b的左邊,並且是right join,所以其運算方式為:a右連線b的記錄=圖3公共部分記錄集c+表b記錄集b1
在圖3中即記錄集c中的存在的aid為:2 3 6 7 8
圖2中即表b所有記錄集b中存在的bnameid為:2 3 6 7 8 11
表b記錄集b1中存在的bnameid=(圖2中即b表中所有bnameid)-(圖3中即記錄集c中存在的aid),最終得出為:11
由此得出圖6中a右連線b的記錄=圖3公共部分記錄集c+表b記錄集b1, 最終得出的結果圖6中可以看出aid及aname非null的記錄都為圖3公共部分記錄集c中的記錄;aid及aname為null的aid為11的記錄就是表b記錄集b1中存在的bnameid。
交叉連線:兩張表聯合沒有條件情況下,條數 = 圖1 * 圖2
Mysql內連線 左連線 右連線查詢
建表語句如下 建立表a table table structure for a table drop table if exists a table create table a table id smallint 6 auto increment,name varchar 10 not null,...
sql左連線 右鏈結 內連線
圖1 a表資料 表b結構如下 bid int 標識種子,主鍵,自增id bnameid int 資料情況,即用select from b出來的記錄情況如下圖2所示 圖2 b表資料 為了把bid和aid加以區分,不讓大家有誤解,所以把bid的起始種子設定為100。有sql基本知識的人都知道,兩個表要做...
SQL多表連線查詢
本文主要列舉兩張和三張表來講述多表連線查詢。新建兩張表 表1 student 截圖如下 表2 course 截圖如下 此時這樣建表只是為了演示連線sql語句,當然實際開發中我們不會這樣建表,實際開發中這兩個表會有自己不同的主鍵。一 外連線 外連線可分為 左連線 右連線 完全外連線。1 左連線 lef...