MySQL 什麼是聯結join

2021-10-07 04:33:53 字數 2800 閱讀 3935

目錄

什麼是聯結?內部聯結?

表的別名

自聯結外部聯結

1、內部聯結

2、外部聯結(left join)

3、 外部聯結(right join)

聯結或者說關聯,指的就是在資料檢索查詢時,將多個表的資料聯絡起來,完成共同的查詢。

比如這樣進行搜尋:

select vend_name,prod_name,prod_price from vendors,products

where vendors.id=products.id order by vend_name,prod_name;

在這個句子裡面,發現from後面跟著兩個表:vendors和products,鏈結的條件是:vendors.id=products.id。返回的字段中vend_name是屬於vendors表的,而prod_name和prod_price是屬於products表的,這就是將兩個表的資料聯合起來查詢。

需要注意這裡的條件where後面的字段,必須是字段的完全限定列名,即「表名.列名」。

這種聯結方式基於兩個表裡面2個字段的值相等,我們把這種聯結叫做等值聯結,或者「內部聯結」。

但是更為標準的寫法是:

select  vend_name,prod_name,prod_price from vendors inner join products on vendors.id=products.id ;
這其實也是我們更常見的寫法,現在需要聯結的表以及聯結的條件由inner join以及on來給出。

比如:

select c.cust_name,c.cust_contact from customers as c,orders as o,

orderitems as oi where c.cust_id = o.cust_id and oi.order_num=o.order_num and

prod_id='tnt2' order by c.cust_name;

這裡就給2個表起了2個別名:c和o。使用別名可以縮短sql語句,以及允許在單次的select語句中多次使用相同的表。

之前談到了給表起別名,那麼可能有人奇怪,什麼叫:「允許在單次的select語句中多次使用相同的表」???

這裡舉乙個例子:

比如乙個產品表裡面id=wenti(問題的拼音)的產品都有問題,然後想找到這個產品對應的生產商生產的其他的產品,在這個生產表裡面的位置, 那麼就可以寫成下面這樣:

select p1.prod_id ,p1.prod_name from products as p1,product as p2 where

p1.vend_id=p2.vend_id and p1.prod_id='wenti';

這裡就是相同的乙個表:produtc,但是要使用2次,因此就起了2個不同的別名。

如果說內部聯結只返回兩個表之間關聯的資料,那麼外部聯結,除了返回關聯的資料,還返回剩下的資料。比如統計顧客下了哪些訂單的時候,還會加上沒下訂單的客戶。

比如有下面的訂單表,a表是使用者表(字段分別是使用者的id和姓名),b表是訂單表(字段分別是訂單的id和內容)。

table_a表id

table_a表name

table_b表id

table_a表content

1a000101

1b000201

2a000102

2b000202

3a000103

3b000203

4a000104

6b000204

5a000105

7b000205

8a000106

9b000206

就是下面這樣:

查詢語句:

select a.*,b.*  from table_a a  inner join table_b b  on a.id=b.id
返回的結果:

查詢:

select a.*,b.*  from table_a a  left join table_b b  on a.id=b.id
返回結果:

查詢:

select a.*,b.*  from table_a a right join table_b b  on a.id=b.id
返回的結果:

1a000101

1b000201

2a000102

2b000202

3a000103

3b000203

(null)

(null)

6b000204

(null)

(null)

7b000205

(null)

(null)

9b000206

參考:《mysql必知必會》

MySQL備忘之表聯結(JOIN)

個人覺得寫得極好的一篇部落格 本來就是乙個左右不分的迷糊蟲,剛開始學習表聯結時,出現了left join,right join,inner join,balala 已經懵圈了,知道遇到這幅圖,整個世界都清明了。但是,mysql不支援full join,不過可以通過union 關鍵字來合併 left ...

MySQL之聯結 join 操作型別概念總結

鏈結 join 操作有好幾種型別,很容易混淆掉的,今天我做一總結,以做更深層次的理解。從聯結約束檢舉程式上來分,聯結操作可以有以下三種 a 條件聯結 聯結時要有聯結條件的 b 同等聯結 聯結時要求兩個屬性值必須相等 c 笛卡兒積 cross join 交叉聯結 無須滿足任何條件。下面我列出在rdbs...

mysql 聯結主鍵 MySQL基礎 聯結

聯結表 mysql是一種關聯式資料庫,所謂關係就是指把資料分解為多個表,乙個類據一 個表。各表之間通過某些常用的值 即關係 相關聯 就比如說有乙個表儲存了 商資訊,商id為主鍵。另乙個表儲存了一些商品的資訊,但是也需要知道商品相應的 商資訊。那麼可以給商品設定乙個 商id 稱為外來鍵,通過這個外來鍵...