聯結
簡介聯結是一種機制,用來在一條select語句中關聯表,聯結是由mysql根據需要而建立的,它存在於select語句的執行當中。
在執行資料檢索查詢中使用聯結是sql強大的功能之一,
聯結是利用sql的select能執行的最重要的操作,
在使用聯結之前,我們必須要了解下關係表。
關係表來個栗子說明下
有乙個關於產品的資料表,每個產品為一條記錄,記錄中包含產品的名稱,產品的介紹,產品的**以及**商的資訊。
現在假如有乙個**商能夠提供多種商品,那麼如何儲存**商的資訊,如名字,位址,手機號等,答案是應該將**商的資訊與產品的資訊分開儲存
理由如下:
1)同乙個**商的資訊是相同的,對產品重複此資訊浪費儲存空間
2)如果**商資訊有改動,只需改動一處即可
3)如果有重複資料,很難保證每次輸入資料的方式都相同(每種產品都儲存**商資訊)
相同資料出現多次不是一件好事是關聯式資料庫設計的基礎,關係表的設計就是要保證把資訊分成多個表,一類資訊乙個表,
各表通過某個常用值互相關聯。
下面我們來建立vendors和products這兩個表,並對其進行關聯
create tablevendors(
vend_idint(10) not null auto_increment primary key,
namevarchar(20) not null,
telephonevarchar(11)
)engine="innodb", charset="utf8";create tableproducts(
pro_idint(10) not null auto_increment primary key,
vend_idint(10),
proc_namevarchar(20) not null,
外來鍵為某個表的一列,它包含另乙個表的主鍵值,定義兩個表之間的關係。
聯結表的優點:
1)避免了資訊重複,節約了時間和空間
2)某個資料變動,只需改變其響應的資料表即可
3)資料無重複使得資料能夠更有效的儲存和方便的處理,伸縮性強能夠適應不斷增加的工作量
如果資料儲存在多個表中,那麼怎麼用一條語句檢索出資料?答案是使用聯結。
mysql中常用join來建立表之間的連線。
join
要理解join,我們首先要理解笛卡爾積,由沒有聯結條件的表關係返回的結果為笛卡爾積。
比如表products中有m條記錄,表vendors中有n條記錄,那麼這兩個表的笛卡爾積為m*n條記錄。
如下方式可以產生笛卡爾積
內連線求兩個表的交集,常見的內連線有join, inner join, where
以下兩種查詢方式是等價的
select * from vendors, products where vendors.vend_id=products.vend_id;select * from vendors inner join products where vendors.vend_id=products.vend_id;
左連線左連線以左表為主,返回包含左表中所有的資料行,對於右表中的某行在左表中沒有匹配的行,那麼右表將返回null
右連線右連線以右表為主,返回包含右表中所有的資料行,對於左表中的某行在右表中沒有匹配的行,那麼左表將返回null
外連線求兩個或多個表之間的左連線和右連線的並集
mysql不支援外連線,但是可以通過union來實現
當連線表的列採用相同的名稱時,可用using來簡化on語法
using(col_name)指定乙個屬性名來連線兩個表,而on指定乙個條件
在使用select *時,using會去除using指定的列,而on不會。
建議1) 查詢兩表關聯到相等的資料時用內連線
2) 左表中的關聯列是右表中的關聯列的子集,則使用右連線
3) 右表中的關聯列是左表中的關聯列的子集,則使用左連線
4) 左右表有交集但是又不互為子集時用全外連線
5) 求差操作是用聯合查詢
MySQL的內部聯結,外部聯結和自然聯結
一 select語句 乙個典型的sql查詢語句具有如下形式 select a1,a2,an from r1,r2,rm where p select子句列出查詢結果中所需要的屬性。from子句是乙個查詢求值中需要訪問的關係列表。where子句是乙個作用在from子句關係屬性上的謂詞。其中from這個...
mysql中的聯結 MySQL中的聯結表
使用聯結能夠實現用一條select語句檢索出儲存在多個表中的資料。聯結是一種機制,用來在一條select語句中關聯表,不是物理實體,其在實際的資料庫表中並不存在,dbms會根據需要建立聯結,且會在查詢期間一直存在。聯結的本質是第乙個表中符合條件的每一行與第二個表中符合條件的每一行進行配對,假如沒有w...
mysql 表的聯結
聯結是一種機制,用來在一條select語句中關聯表,因此稱之為聯結。聯結的建立非常簡單,規定要聯結的所有表以及它們如何關聯即可 對多個表都具有的列名,為了避免二義性需要使用完全限定列名。目前為止所用的聯結稱為等值聯結 equijoin 它基於兩個表之間的相等測試。這種聯結也稱為內部聯結。其實,對於這...