11.連接表---SQL

來源:互聯網
上載者:User

標籤:影響   支援   根據   pre   資源   一個   方法   欄位   標準   

說明:使用互動式DBMS工具
重要的是,要理解連接不是物理實體。換句話說,它在實際的資料庫表中並不存在。DBMS會根據需要建立連接,它在查詢執行期間一直存
在。

一、等值文法:SELECT 欄位 FROM 表1,表2 WHERE 表1.欄位=表2.欄位

 

SELECT vend_name, prod_name, prod_priceFROM Vendors, ProductsWHERE Vendors.vend_id = Products.vend_id;

分析▼
我們來看這段代碼。SELECT語句與前面所有語句一樣指定要檢索的列。這裡最大的差別是所指定的兩列(prod_name和prod_price)在一個表
中,而第三列(vend_name)在另一個表中。
現在來看FROM子句。與以前的SELECT語句不一樣,這條語句的FROM子句列出了兩個表:Vendors和Products。它們就是這條SELECT語句連接
的兩個表的名字。這兩個表用WHERE子句正確地連接,WHERE子句指示DBMS將Vendors表中的vend_id與Products表中的vend_id匹配起來。
可以看到,要匹配的兩列指定為Vendors.vend_id和Products.vend_id。這裡需要這種完全限定列名,如果只給出vend_id,DBMS就不知道指的
是哪一個(每個表中有一個)。從前面的輸出可以看到,一條SELECT語句返回了兩個不同表中的資料。

警告:完全限定列名(用表名點出列)
就像前一課提到的,在引用的列可能出現歧義時,必須使用完全限定列名(用一個句點分隔表名和列名)。如果引用一個沒有用表名限制的
具有歧義的列名,大多數DBMS會返回錯誤

警告:不要忘了WHERE子句
要保證所有連接都有WHERE子句,否則DBMS將返回比想要的資料多得多的資料。同理,要保證WHERE子句的正確性。不正確的過濾條件
會導致DBMS返回不正確的資料

笛卡兒積(cartesian product)
由沒有連接條件的表關係返回的結果為笛卡兒積。檢索出的行的數目將是第一個表中的行數乘以第二個表中的行數。

提示:叉連接
有時,返回笛卡兒積的連接,也稱叉連接(cross join)。

二.內連接:SELECT 欄位 FROM 表1 INNER JOIN 表2 ON 表1.欄位=表2.欄位

目前為止使用的連接稱為等值連接(equijoin),它基於兩個表之間的相等測試。這種連接也稱為內連接(inner join)。其實,可以對這種連接
使用稍微不同的文法,明確指定連接的類型。

SELECT vend_name, prod_name, prod_priceFROM Vendors INNER JOIN ProductsON Vendors.vend_id = Products.vend_id;

分析▼
此語句中的SELECT與前面的SELECT語句相同,但FROM子句不同。這裡,兩個表之間的關係是以INNER JOIN指定的部分FROM子句。在使用
這種文法時,連接條件用特定的ON子句而不是WHERE子句給出。傳遞給ON的實際條件與傳遞給WHERE的相同。

說明:“正確的”文法
ANSI SQL規範首選INNER JOIN文法,之前使用的是簡單的等值文法。其實,SQL語言純正論者是用鄙視的眼光看待簡單文法的。這就是
說,DBMS的確支援簡單格式和標準格式,我建議你要理解這兩種格式,具體使用就看你用哪個更順手了。

 三、連接多個表

 SQL不限制一條SELECT語句中可以連接的表的數目。建立連接的基本規則也相同。首先列出所有表,然後定義表之間的關係。

SELECT prod_name, vend_name, prod_price, quantityFROM OrderItems, Products, VendorsWHERE Products.vend_id = Vendors.vend_idAND OrderItems.prod_id = Products.prod_idAND order_num = 20007;

警告:效能考慮
DBMS在運行時關聯指定的每個表,以處理連接。這種處理可能非常耗費資源,因此應該注意,不要連接不必要的表。連接的表越多,效能
下降越厲害。
警告:連接中表的最大數目
雖然SQL本身不限制每個連接約束中表的數目,但實際上許多DBMS都有限制。請參閱具體的DBMS文檔以瞭解其限制。

提示:多做實驗
可以看到,執行任一給定的SQL操作一般不止一種方法。很少有絕對正確或絕對錯誤的方法。效能可能會受操作類型、所使用的DBMS、表
中資料量、是否存在索引或鍵等條件的影響。因此,有必要實驗不同的選擇機制,找出最適合具體情況的方法。

 

11.連接表---SQL

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.