目錄
什麼是聯結?內部聯結?
表的別名
自聯結外部聯結
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 稱為外來鍵,通過這個外來鍵...