熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL語言 >> 正文

SQL實戰新手入門:內聯接(INNER JOIN)(1)

2013-11-13 12:43:53  來源: SQL語言 

   內聯接(INNER JOIN)(

  在RDBMS的世界裡INNER JOIN是最常見的聯接形式也是SQL武器庫中最鋒利的武器INNER JOIN可以從多個表中組合數據並將數據有重疊部分的子集返回如圖所示

  圖中的兩個圓分別代表了兩個表陰影部分的區域代表了滿足JOIN條件的數據集兩邊的數據被水平地粘合在一起(與UNION操作符相反本章後面還將介紹UNION操作符它在水平方向上追加數據集)

  在RDBMS中數據是以最方便計算機理解的形式存儲的但查詢的問題是由人來提出的SQL就是連接兩者的中介

  在LIBRARY數據庫的設計中一個位置(書櫃上的一個空間)只能放一本圖書但是一本圖書可以具有多個存放位置(假如我們具有同一本圖書的多個副本或多個不同的版本)這樣如果需要生成書櫃中每一個書架上的圖書名稱的列表那麼一部分數據可以從BOOKS表中查詢到另一部分數據則位於LOCATION表中BOOKS表中的主鍵BK_ID和LOCATION表中的外鍵FK_BK_LOC將把這兩個表聯接起來聯接這兩個表的SQL查詢如下所示

  SELECT

  loc_bookcase AS bookcase

   loc_shelf AS shelf

   loc_position_left AS position

   bk_title AS title

  FROM location INNER JOIN books

  ON locationfk_bk_loc = booksbk_id;

  該查詢的結果如表所示

  表 INNER JOIN的輸出結果

  INNER JOIN關鍵字指示數據庫引擎根據這兩個表來准備數據集並按照指定的關系來JOIN這兩個表BOOKS表中的主鍵BK_ID與LOCATION表中的外鍵FK_BK_LOC相互匹配在數據庫的術語中這稱為等值聯接(equijoin)即使用一個等於操作符來匹配鍵值的JOIN聯接

  等值聯接是最常用的聯接類型根據等值聯接的存在可以從邏輯上推斷出必定還存在著非等值聯接事實上確實如此SQL提供了非等值聯接(nonequijoin)類型的聯接它使用不相等操作符(大於小於不等於)將記錄聯接為單個數據集

  盡管其中包含了一些我們需要的數據但非等值聯接將產生出乎意料的結果例如在上面的查詢中如果使用帶有大於操作符的非等值聯接來替換等值聯接將返回行數據如果使用不等於操作符則將產生行數據深入地考察這些數據就可以分析出非等值聯接背後的邏輯這也許並不是我們所期望的聯接結果這種類型的聯接有時是有用的但在大多數時候可以使用更加簡明的方法來獲得相同的結果集在熟練掌握SQL之前你應該放棄使用非等值聯接的方法

  INNER限定符並不是必須使用的關鍵字部分只使用一個簡單的JOIN關鍵字也可以但是強烈建議使用INNER JOIN作為關鍵字使SQL代碼具有更好的可維護性和更好的可讀性本章隨後將討論外聯接(OUTER JOIN)使用INNER JOIN這個關鍵字也可以為區分兩者帶來便利某些RDBMS支持用NATURAL關鍵字來代替INNER或OUTER(NATURAL JOIN是等值聯接的一種特殊形式即用於聯接的兩個表的鍵值列具有相同的列名)另外一些RDBMS則支持其他關鍵字例如使用EQUI關鍵字請堅持使用最常用的INNER JOIN語法這樣在跨不同的RDBMS時INNER JOIN查詢將更有可能被執行

  在INNER JOIN的例子中關鍵問題在於如果數據庫中有任何圖書未放置在書櫃中或者任何書櫃中有任何未被占用的書架空間那麼這些圖書或書架將不會出現在查詢結果中

  下面逐步分析一下這個查詢

  SELECT loc_bookcase loc_shelf loc_position_left bk_title

  下面是想要聯接的數據項

  FROM location INNER JOIN books ON locationfk_bk_loc = booksbk_id

       返回目錄SQL實戰新手入門

       編輯推薦

       Oracle索引技術

       高性能MySQL

       數據倉庫與數據挖掘培訓視頻教程


From:http://tw.wingwit.com/Article/program/SQL/201311/16474.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.