1. 程式人生 > >外連線與內連線有什麼區別?

外連線與內連線有什麼區別?

(一)內連線
  內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的
列值。內連線分三種:
  1、等值連線:在連線條件中使用等於號(=)運算子比較被連線列的列值,其查詢結
果中列出被連線表中的所有列,包括其中的重複列。
  2、不等連線: 在連線條件使用除等於運算子以外的其它比較運算子比較被連線的
列的列值。這些運算子包括>、>=、<=、<、!>、!<和<>。
  3、自然連線:在連線條件中使用等於(=)運算子比較被連線列的列值,但它使用選
擇列表指出查詢結果集合中所包括的列,並刪除連線表中的重複列。
  例,下面使用等值連線列出authors和publishers表中位於同一城市的作者和出版
社:
   SELECT *
  FROM authors AS a INNER

JOIN publishers AS p
  ON a.city=p.city
  又如使用自然連線,在選擇列表中刪除authors 和publishers 表中重複列(city和
state):
  SELECT a.*,p.pub_id,p.pub_name,p.country
  FROM authors AS a INNER JOIN publishers AS p
  ON a.city=p.city

  (二)外連線
  內連線時,返回查詢結果集合中的僅是符合查詢條件( WHERE 搜尋條件或 HAVING
條件)和連線條件的行。而採用外連線時,它返回到查詢結果集合中的不僅包含符合連
接條件的行,而且還包括左表(左外連線時)、右表(右外連線時)或兩個邊接表(全外連
接)中的所有資料行。如下面使用左外連線將論壇內容和作者資訊連線起來:

   SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
  ON a.username=b.username

  下面使用全外連線將city表中的所有作者以及user表中的所有作者,以及他們所在
的城市:

    SELECT a.*,b.*
  FROM city as a FULL OUTER JOIN user as b
  ON a.username=b.username

  (三)交叉連線
  交叉連線不帶WHERE 子句,它返回被連線的兩個表所有資料行的笛卡爾積,返回到
結果集合中的資料行數等於第一個表中符合查詢條件的資料行數乘以第二個表中符合查
詢條件的資料行數。例,titles表中有6類圖書,而publishers表中有8家出版社,則下
列交叉連線檢索到的記錄數將等於6*8=48行。

  SELECT type,pub_name
  FROM titles CROSS JOIN publishers
  ORDER BY type