http://blog.sina.com.cn/s/blog_634c33eb01010tuw.html
數據庫表與表連接的方式:內連接、外連接(左連接、右連接、全連接)、交叉連接。
一、內連接
內連接分爲三種:
1、等值連接:在連接條件中使用等於號(=)運算符比較被連接列的列值,其查詢結果中列出被連接表中的所有列,包括其中的重複列。
2、非等值連接:在連接條件使用除等於運算符以外的其它比較運算符比較被連接的列的列值。
3、自然連接:在連接條件中使用等於(=)運算符比較被連接列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連接表中的重複列。
SELECT *
FROM book,student
WHERE book.StudentId=student.StudentId
相當於
SELECT *
FROM book INNER JOIN student
WHERE book.StudentId=student.StudentId
以爲inner join可以缺省,這是系統默認
查詢的所有列爲book表的列加上student表的列,即兩張表拼接在一起。表的拼接位置取決於FROM book INNER JOIN student語句表達位置,第一個表在左邊
二、外連接
返回到查詢結果集合中的不僅包含符合連接條件的行,而且還包括左表(左外連接時)、右表(右外連接時)或兩個邊接表(全外連接)中的所有數據行。
1、左外連接
SELECT *
FROM book LEFT JOIN student
ON book.StudentId=student.StudentId
注意,判斷條件是ON而不是WHERE,同樣是兩表拼接,左表顯示全部列,右表未滿足條件的列顯示null
2、右外連接
SELECT *
FROM book RIGHT JOIN student
ON book.StudentId=student.StudentId
與左外連接類似,只不過這次是右表顯示全部列,左表顯示null;
3、全連接
select *
from [Book] as b full outer join [Student] as s
ON b.StudentId=s.StudentId
即以from [Book] full outer join[Student]中先以Book表進行左外連接,然後以Student表進行右外連接。三、交叉連接
交叉連接不帶WHERE子句,它返回被連接的兩個表所有數據行的笛卡爾積,返回到結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數將等於6*8=48行。
SELECT *
FROM book CROSS JOIN student
ORDER BY book.BookId