等值聯接 內部聯接

2022-07-20 12:45:13 字數 1760 閱讀 8014

建立兩個表,乙個儲存**商資訊,另乙個儲存

產品資訊。vendors表包含所有**商資訊,每個**商佔一行,每個供

應商具有唯一的標識。此標識稱為主鍵(primary key)(在第1章中首次

提到),可以是**商id或任何其他唯一值。

products表只儲存產品資訊,它除了儲存**商id(vendors表的主

鍵)外不儲存其他**商資訊。vendors表的主鍵又叫作products的外來鍵,

它將vendors表與products表關聯,利用**商id能從vendors表中找出

相應**商的詳細資訊。

外來鍵為某個表中的一列,它包含另乙個表的主鍵值,定義了兩個表之間的關係

可伸縮性(scale) 能夠適應不斷增加的工作量而不失敗。設計良好的資料庫或應用程式稱之為可伸縮性好(scale well)。

建立連線

select vend_name, prod_name, prod_price from vendors,products where vendors.vend_id = products.vend_id order by vend_name, prod_name;

我們來考察一下此**。select語句與前面所有語句一樣指定要檢索的列。這裡,最大的差別是所指定的兩個列(prod_name和prod_price)在乙個表中,而另乙個列(vend_name)在另乙個表中。

看from子句。與以前的select語句不一樣,這條語句的from子句列出了兩個表,分別是vendors和products。它們就是這條select語句聯結的兩個表的名字。這兩個錶用where子句正確聯結,

where子句指示mysql匹配vendors表中的vend_id和products表中的vend_id。

可以看到要匹配的兩個列以 vendors.vend_id 和 products.

vend_id指定。這裡需要這種完全限定列名,因為如果只給出vend_id,

則mysql不知道指的是哪乙個(它們有兩個,每個表中乙個)。

笛卡兒積(cartesian product) 由沒有聯結條件的表關係返回

的結果為笛卡兒積。檢索出的行的數目將是第乙個表中的行數乘

以第二個表中的行數。

不要忘了where子句 應該保證所有聯結都有where子句,否

則mysql將返回比想要的資料多得多的資料。同理,應該保

證where子句的正確性。不正確的過濾條件將導致mysql返回

不正確的資料

叉聯結 有時我們會聽到返回稱為叉聯結(cross join)的笛卡

兒積的聯結型別。

內部連線

目前為止所用的聯結稱為等值聯結(equijoin),它基於兩個表之間的相等測試。這種聯結也稱為內部聯結。其實,對於這種聯結可以使用稍微不同的語法來明確指定聯結的型別。

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

select vend_name, prod_id, prod_price from vendors inner join products on vendors.vend_id = products.vend_id;

此語句中的select與前面的select語句相同,但from子句不同。這裡,兩個表之間的關係是from子句的組成部分,以innerjoin指定。

在使用這種語法時,聯結條件用特定的on子句而不是where子句給出。傳遞給on的實際條件與傳遞給where的相同。

聯接 交叉聯接

在邏輯上,交叉聯接是一種最簡單的聯接。交叉聯接只實現乙個邏輯查詢步驟 笛卡爾積 這一步是對輸入的兩個表進行操作,把它們聯接起來,生成二者的笛卡爾積。也就是將乙個輸入表的每行與另乙個表的所有行進行匹配。如果乙個表有m行,而另乙個表有n行,將得到m n行的結果集。sql server 支援交叉聯接的兩種...

MySQL之內聯接 左聯接 右聯接 交叉聯接

資料庫中的聯接 join 是乙個非常重要的概念,能夠很好地幫助我們解決資料庫的相關問題。本文將講解mysql中的聯接方式 內聯接 inner join 左聯接 left join 右聯接 right join 交叉連線 cross join 我們將以下面兩張 t1與t2為例來具體講解上述四種聯接方式...

SQL Join 左聯接 右聯接 內聯接等

今天聽到有位童鞋說cvte面試問到資料庫左聯接 右聯接的問題了,才發現自己不知道,所以總結了下。如果我們想在兩個或以上的表獲取其中從乙個表中的行與另乙個表中的行匹配的資料,這時我們應該考慮使用join,因為join具備聯接表或函式進行查詢的特性。舉個例子,有兩個表學校表 school 和教師表 te...