SQL數據庫中的表連接
含義:連接即是把兩個表或者兩個以上的表信息放置在一個結果集中
分類:
1.內部連接
2.外部連接
3.完全連接
4.交叉連接
內部連接是連接類型中最普通的一種,與大多數連接一樣,內部連接根據一個或幾個相同的字段將記錄匹配在一起,但是內部連接僅僅返回那些存在的字段匹配的記錄。
Use northwindselect products.*,suppliers.supplierid from products inner join suppliers on products.supplierid=suppliers.supplierid use pubsselect a.au_lname+', '+a.au_fname as author,t.title from authors a join titleauthor ta on a.au_id=ta.au_id join titles t on t.title_id=ta.title_id
外部連接時必需跟上左側連接還是右側連接。
Use pubsselect discounttype,discount,s.stor_name from discounts d left outer join stores s on d.stor_id=s.stor_idselect discounttype,discount,s.stor_name from discounts d right join stores s on d.stor_id=s.stor_id
完全連接是將join兩側的數據全部匹配,並返回所有記錄。
Use pubsselect discounttype,discount,s.stor_name from discounts d full join stores s on d.stor_id=s.stor_id
交叉連接不使用on運算符,而將join左側的所有記錄與另一側的所有記錄連接,返回的是join兩側表記錄的笛卡爾積。(總數據條數爲左側表內數據條數乘以右側表數據條數之積)
Use pubsselect discounttype,discount,s.stor_name from discounts d cross join stores s
上邊只是把定義和簡單的例子列舉,下邊用一個通俗簡單的例子說明join連接中兩表或者兩表以上的數據連接獲取到的數據集的情況
準備工作,先建立三張數據表,TABLEA,TABLEB,TABLEC,TABLEA表中有B,C表中的ID代碼如下
//TABLEA表有B,C表中的兩個ID,BID,CID] IDENTITY(,= OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS =
//TABLEB表] IDENTITY(,= OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS =
//TABLEC表] IDENTITY(,= OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS =
//TABLEA表數據添加後1 A 1 12 A 6 2//TABLEB表數據添加後id name1 B2 B3 B4 B5 B//TABLECid Cname1 C2 C3 C4 C5 C
兩表連接時
一、Inner join on 連接
代碼:SELECT * FROM TABLEB B INNER JOIN TABLEA A ON B.ID=A.BID
結果:id name id A Bid Cid
1 B 1 A 1 1
分析:匹配後的結果只顯示符合ON後條件的結果集,不符合則不顯示
二、Outer join on (外連接)
1、左連接
代碼:SELECT * FROM TABLEB B LEFT OUTER JOIN TABLEA A ON B.ID=A.BID
結果:
id name id A Bid Cid1 B 1 A 1 12 B NULL NULL NULL NULL3 B NULL NULL NULL NULL4 B NULL NULL NULL NULL5 B NULL NULL NULL NULL
分析:外左連接時左側爲需要顯示全部信息的表,右側把沒有匹配ON條件的地方全部補爲NULL
2、右連接
代碼:(待續)