SQL必知必會 聯結表

2021-08-18 18:54:01 字數 3258 閱讀 3105

《sql必知必會》讀書筆記

1.關係表

將這些資料與產品資訊分開儲存的理由市:

關鍵是,相同的資料出現多次決不是一件好事,這是關聯式資料庫設計的基礎。關係表的設計就是要把資訊分解成多個表,一類資料乙個表。各表通過共同的值互相關聯(所以才叫關係資料框)。

所以建立兩個表:乙個儲存**商資訊,另乙個儲存產品資訊。

vendors表包含所有**商資訊,每個**商佔一行,具有唯一的標識。此標識稱為主鍵,可以是**商id或任何其他唯一值。

products表只儲存產品資訊,除了儲存**商id(vendors表的主鍵)外,它不儲存其他有關**商的資訊。

vendors表的主鍵將vendors表與products表關聯,利用products的**商id能從vendors表中找出相應**商的詳細資訊。

這樣做的好處是:

總之,關聯式資料庫可以有效地儲存,方便地處理。因此,關聯式資料庫地可伸縮性遠比非關聯式資料庫要好。

2.為什麼使用聯結

如前所述,將資料分解為多個錶能更有效地儲存,更方便地處理,並且可伸縮性更好。但是這些好處是有代價的。

如果資料儲存在多個表中,怎麼用一條select語句就檢索出資料呢?

答案是使用聯結。簡單說,聯結是一種機制,用來在一條select語句中關聯表,因此稱為聯結。使用特殊的語法,可以聯結多個表返回一組輸出,聯結在執行時關聯表中正確的行。

3.建立聯結

3.where子句的重要性where子句作為過濾條件,只包含那些匹配給定條件(這裡是聯結條件)的行。

沒有where子句,第乙個表中的每一行將與第二個表中的每一行配對,而不管它們邏輯上是否能配在一起。

笛卡爾積:

由沒有聯結條件的表關係返回的結果為笛卡爾積。檢索出的行的數目將是第乙個表中的行數乘以第二個表中的行數。

有時,返回笛卡爾積的聯結,也稱叉聯結。

從上面的輸出可以看出,相應的笛卡兒積不是我們想要的。這裡返回的資料用每個**商匹配每個產品,包括了**商不正確的產品(即使**商根本就沒有產品)。

4.內聯結

目前為止使用的聯結稱為等值聯接,它基於兩個表之間的相等測試。這種聯結也稱為內聯結。

其實,可以對這種聯結使用稍微不同的語法,明確指定聯結的型別。

下面的select語句返回與前面例子完全相同的資料:

select vend_name, prod_name, prod_price

from vendors inner

join products

on vendors.vend_id = products.vend_id;

這裡,兩個表之間的關係是以inner join指定的部分from子句。在使用這種語法時,聯結條件用特定的on子句而不是where子句給出。

5.聯結多個表

sql不限制一條select語句中可以聯結的表的數目。建立聯結的基本規則也相同。

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;

注意:效能考慮dbms在執行時關聯指定的每個表,以處理聯結。這種處理可能非常耗費資源,因此應該注意,不要聯結不必要的表。聯結的表越多,效能下降越厲害。

注意:聯結中表的最大數目

雖然sql本身不限制每個聯結約束中表的數目,但實際上許多dbms都有限制。

現在回顧一下第11課中的例子,如下的select語句返回訂購產品rgan01的顧客列表:

select cust_name,cust_contact

from customers

where cust_id in(

select cust_id

from

order

where order_num in(

select order_num

from orderitems

where prod_id = 'rgan01'))

如第11課所述,子查詢並不總是執行複雜select操作的最有效方法,下面時是以聯結的相同查詢:

select cust_name, cust_contact

from customers, orders, orderitems

where customers.cust_id = orders.cust_id

and orderitems.order_num = orders.order_num

and prod_idc = 'rgan01';

cust_name cust_contact

fun4all denise l. stephens

the toy stores kim howard

SQL必知必會 第十二課 筆記 聯結表

第12課 聯結表 這一課會介紹什麼是聯結,為什麼使用聯結,如何編寫使用聯結的select語句。12.1 聯結 12.1.2 為什麼使用聯結 如果資料儲存在多個表中,怎樣用一條select語句就檢索出資料呢?答案是使用聯結。簡單說,聯結是一種機制,用來在一條select語句中關聯表,因此稱為聯結。使用...

SQL必知必會筆記十三(建立高階聯結)

另外一些聯結 包括它們的含義和使用方法 介紹如何使用表別名,如何對被聯結的表使用聚集函式。例如 給列起別名 select rtrim vend name rtrim vend country as vend title from vendors order by vend name sql除了可以對...

SQL必知必會

資料庫 儲存有組織的資料的容器。資料庫管理系統 dbms 資料庫軟體,資料庫是通過dbms建立和操縱的容器。表 某種特定資料型別的結構化清單。資料庫中的每個表都有自己的名字,且唯一。不同的資料庫可以使用相同的表名。表的特性 模式 資料在表中如何儲存,儲存什麼樣的資料,資料如何分解。模式可以用來描述資...