1 聯(lián)結(jié)
1.1 關(guān)系表
關(guān)系表的設(shè)計(jì)就是要把信息分解成多個(gè)表,一類數(shù)據(jù)一個(gè)表。各表通過某些共同的值相互關(guān)聯(lián)(所以才叫關(guān)系數(shù)據(jù)庫(kù))。
1.2 為什么使用聯(lián)結(jié)
聯(lián)結(jié)是一種機(jī)制,用來在一條SELECT語句中關(guān)聯(lián)表,因此成為聯(lián)結(jié)。
使用特殊的語法,可以聯(lián)結(jié)多個(gè)表返回一組輸出,聯(lián)結(jié)在運(yùn)行時(shí)關(guān)聯(lián)表中正確的行。
2 創(chuàng)建聯(lián)結(jié)
SELECT vend_name,prod_name,prod_price FROM vendors,products WHERE vendors.vend_id=products.vend_id

這條語句的FROM子句列出了兩個(gè)表:vendors和products。這兩個(gè)表用WHERE子句正確的聯(lián)結(jié)。
vendors.vend_id=products.vend_id使用的是完全限定列名
2.1 WHERE子句的重要性
笛卡爾積(cartesian product)
由沒有聯(lián)結(jié)條件的表關(guān)系返回的結(jié)果為笛卡爾積。檢索出的行的數(shù)目將是第一個(gè)表中的行數(shù)乘以第二個(gè)表中的行數(shù)。
SELECT vend_name,prod_name,prod_price FROM vendors,products

提示:有時(shí),返回笛卡爾積的聯(lián)結(jié),也稱叉聯(lián)結(jié)(cross join)。
2.2 內(nèi)聯(lián)結(jié)
以上使用的聯(lián)結(jié)稱為等值聯(lián)結(jié)(equijoin),它基于兩個(gè)表之間的相等測(cè)試。這種聯(lián)結(jié)也稱為內(nèi)聯(lián)結(jié)(inner join)。
SELECT vend_name,prod_name,prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id

2.3 聯(lián)結(jié)多個(gè)表
SELECT prod_name,vend_name,prod_price,quantity FROM orderitems,products,vendors WHERE products.vend_id = vendors.vend_id AND orderitems.prod_id = products.prod_id AND order_num = 20007

回顧第11課中的例子,列出訂購(gòu)產(chǎn)品“RGAN01”的顧客:
SELECT cust_name,cust_contact FROM customers WHERE cust_id IN ( SELECT cust_id FROM orders WHERE order_num IN ( SELECT order_num FROM orderitems WHERE prod_id = 'RGAN01'));
使用聯(lián)結(jié):
SELECT cust_name,cust_contact FROM customers,orders,orderitems WHERE customers.cust_id = orders.cust_id AND orders.order_num = orderitems.order_num AND prod_id = 'RGAN01'
