1. 程式人生 > >mysql的表連線方式

mysql的表連線方式

這裡有兩張表TableA和TableB,分別是姓名錶和年齡表,用於我們例子的測試資料:

表連線有幾種? sql表連線分成外連線內連線交叉連線。 一.外連線 概述: 外連線包括三種,分別是左外連線、右外連線、全外連線。 對應的sql關鍵字:LEFT/RIGHT/FULL OUTER JOIN,通常我們都省略OUTER關鍵字,寫成LEFT/RIGHT/FULL JOIN。 在左、右外連線中都會以一種表為基表,基表的所有行、列都會顯示,外表如果和條件不匹配則所有的外表列值都為NULL。 全外連線則所有表的行、列都會顯示,條件不匹配的值皆為NULL。
      1.左外連線示例:     sql語句:  select * from TableA left join TableB on TableA.id=TableB.id     結果:     註釋:TableA(基表)中所有的行列都顯示了,第三行的條件不匹配所有TableB(外表)的值都為NULL。    2.右外連線示例:     sql語句: select * from TableA right join TableB on TableA.id=TableB.id
    結果:     註釋:TableB(基表)中所有的行列都顯示了,第三行的條件不匹配所有TableA(外表)的值都為NULL。    3.全外連線示例:     sql語句:select * from TableA full join TableB on TableA.id=TableB.id     結果:     註釋:TableA和TableB的所有行列都顯示了,條件不匹配的行的值為NULL
二.內連線
概述:內連線是用比較運算子比較要連線的列的值的連線,不匹配的行不會被顯示。sql關鍵字JOIN 或者INNER JOIN,通常我們寫成JOIN 例子:     select * from TableA JOIN TableB on TableA.id=TableB.id 結果: 註釋:只返回條件匹配的行   以上寫法等效於:     select * from TableA,TableB where TableA.id=TableB.id     select * from TableA cross join TableB where TableA.id=TableB.id (cross join 後只能用where不能用on) 三.交叉連線
概念:沒有where條件的交叉連線將產生連線表所涉及的笛卡爾積。即TableA的行數*TableB的行數的結果集。(TableA 3行*TableB 3行=9行)
sql語句:     select * from TableA cross join TableB 結果: 註釋:返回3*3=9行資料,即笛卡爾積。   以上寫法等效於: select * from TableA,TableB  

copy至http://www.cnblogs.com/thomasguan/p/4252410.html