SQL必知必會 筆記 第十二章 連接表,sql必知

來源:互聯網
上載者:User

SQL必知必會 筆記 第十二章 連接表,sql必知
12.1連接

SQL最強大的功能之一即是在資料查詢的執行中連接(join)表。

12.1.1關係表

相同資料出現多次絕不是一件好事,此因素是關聯式資料庫設計的基礎。關係表的設計就是要保證把資訊分解成多個表,一類資料一個表。各表通過某些常用的值(即關係設計中的關係(relational))互相關聯。
延展性(scale):能夠適應不斷增加的工作量而不失敗。設計良好的資料庫或應用程式稱之為延展性好(scale well)。

12.1.2為什麼要使用連接

如果資料存放區在多個表中,怎樣用單條SELECT語句檢索出資料?
答案是使用連接。簡單的說,連接是一種機制,用來在一條SELECT語句中關聯表,因此稱之為連接。

12.2建立連接
SELECT vend_name,prod_name,prod_priceFROM Vendors,ProductsWHERE Vendors.vend_id = Products.vend_id;
12.2.1WHERE子句的重要性

笛卡爾積(cartesian product):由沒有連結條件的表關係返回的結果為笛卡爾積。檢測出的行的數目將是第一個表中的行數乘以第二個表中的行數。
不要忘了WHERE子句:應該保證所有連接都有WHERE子句,否則DBMS將返回比想要的資料多得多的資料。

12.2.2內部連接

目前為止所用的連接稱為等值連接(equijoin),它基於兩個表之間的相等測試。這種連接也稱為內部連接。

SELECT vend_name,prod_name,prod_priceFROM Vendors INNER JOIN ProductsON Vendors.vend_id = Priducts.vend_id;
12.2.3連接多個表

SQL對一條SELECT語句中可以連接的表的數目沒有限制。建立連接的基本規則也相同。

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

顯示編號為20007的訂單中的物品。
效能考慮:DBMS在運行時關聯指定的每個表以處理連接。這種處理可能是非常耗費資源的,因此應該仔細,不要連接不必要的表。連接的表越多,效能下降越厲害。
子查詢並不總是執行複雜SELECT操作的最有效方法,也可用連接進行相同的查詢。

SELECT cust_name,cust_contactFROM Customers,Orders,OrderItemsWHERE Customers.cust_id = Order.cust_id     AND OrderItems.order_num = Order.order_num     AND prod_id = 'RGAN01';

相關文章

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.