1. 程式人生 > >mysql中的自然聯結、內聯結、外聯結

mysql中的自然聯結、內聯結、外聯結

1.自然聯結

定義:無論何時對錶進行聯結,應該至少有一個列出現不止一個表中(被聯結的列)。標準的聯結返回所有資料,甚至相同的列多次出現。自然聯結排除多次出現,使每個列只返回一次;(也就是說,自然聯結的作用就是排除多次出現,使每個列只返回一次)
文字沒描述完了,可能有的同學還不是很理解其中的意思,下面上例子吧,更直觀: 例如有表R和表S,表的內容如下:
  R表                       S表  
A  B  C                      D  B  E  
1  a  3                      2  c  7  
2  b  6                      3  d  5  
3  c  7                      1  a  3
現在R和S要進行自然聯結 自然聯結步驟 1.就是用R表中的每一項乘以S表中的每一項,得到的結果如下
A   B     C      D     B       E  
1   a     3      2     c       7  
1   a     3      3     d       5  
1   a     3      1     a       3  
2   b     6      2     c       7  
2   b     6      3     d       5  
2   b     6      1     a       3  
3   c     7      2     c       7  
3   c     7      3     d       5   
3   c     7      1     a       3 
2.過濾出R.B=S.B的行,結果如下
R.A    R.B     R.C       S.D     S.B    S.E  
1       a       3         1       a       3   
3       c       7         2       c       7 
3.最後去除一個相同的列,即R.B和S.B其中一個,最後自然聯結的結果為
A     B      C      D       E  
1     a      3      1        3  
3     c      7      2        7

2.內聯結

表資料:例如有一下兩個表,表A和表B
// 表A記錄如下  
aID     aNum    
1     a2010    
2     a2011    
3     a2012    
4     a2012    
5     a2013    
   
// 表B記錄如下:    
bID     bName    
1     b2010    
2     b2011    
3     b2012    
4     b2013    
8     b2014


1)左外聯結

sql語句:select*from A  left join B   on A.aID = B.bID,這裡我們把表A成為左表,表B為右表, 左外聯結是以左表為基礎的,即left join是以左表為基礎的,在這個例子中,左表(表A)的記錄全部會顯示出來,而表B只顯示符合過濾條件的那部分行

 2)右外聯結

sql語句:select*from A  right join B   on A.aID = B.bID,這裡我們把表A成為左表,表B為右表, 外聯結是以右表為基礎的,即right join是以右表為基礎的,在這個例子中,右表(表B)的記錄全部會顯示出來,而表A只顯示符合過濾條件的那部分行

3.內聯結

內聯結最簡單,兩個表進行內聯結,匹配符合過濾條件的行就可以了 例如:select * from A inner join B where A.a = B.a 把表A和表B中的列A相等的所有行都顯示出來