閱讀401 返回首頁    go 阿裏雲 go 技術社區[雲棲]


MySQL的JOIN操作

下麵簡答介紹下MySQL中常用的JOIN操作,以及會犯得一些簡單錯誤

tips:圖是引用網絡,如果錯誤,請指出,感謝。

在MySQL中,逗號(','), JOIN, CROSS JOIN, INNER JOIN在語法上是等價的,能夠互相替換(在標準SQL中,它們是不等價的)

然而,逗號(',')運算的優先級小於JOIN, CROSS JOIN, INNER JOIN, LEFT JOIN等,
如果混合使用,則會造on列子句中出現"Unknown column 'col_name' "錯誤

例如:
SELECT * FROM t1, t2 JOIN t3 ON (t1.i1 = t3.i3);
ERROR 1054 (42S22): Unknown column 't1.i1' in 'on clause'

因為該語句被解析成了:
SELECT * FROM t1, (t2 join t3 on (t1.i1 = t3.i3));


表達式在on和where後的區別
如:
on A.ID = B.ID and B.ID<3:
先篩選出B表ID小於3的結果,在進行JOIN操作

on A.ID = B.ID where B.ID<3:
先進行JOIN操作,在對結果集篩選出B.ID小於3的結果


在inner join中,兩者結果沒有區別:
如:
select  A.ID as AID, B.ID as BID  from A join B on A.ID = B.ID and B.ID<3;  
select  A.ID as AID, B.ID as BID  from A join B on A.ID = B.ID where  B.ID<3;  

輸出結果:
+-----+-----+
| AID | BID |
+-----+-----+
|   1 |   1 |
|   2 |   2 |
+-----+-----+
2 rows in set (0.00 sec)

在left join中,兩者結果有區別:
select  A.ID as AID, B.ID as BID  from A left join B on A.ID = B.ID and B.ID<3;  
輸出結果:
+-----+------+
| AID | BID  |
+-----+------+
|   1 |    1 |
|   2 |    2 |
|   3 | NULL |
|   4 | NULL |
|   5 | NULL |
|   6 | NULL |
+-----+------+

select  A.ID as AID, B.ID as BID  from A left join B on A.ID = B.ID where B.ID<3 ;
輸出結果:
+-----+------+
| AID | BID  |
+-----+------+
|   1 |    1 |
|   2 |    2 |
+-----+------+


JOIN圖示:

inner join(內連接):
將A表和B表中存在連接關係的字段,組成的結果集(A表和B表的交集)

關係表示如圖:
最後更新:2017-11-22 00:34:00

  上一篇:go  快速玩轉ECS競價實例
  下一篇:go  城市大腦入選國家新一代人工智能開放創新平台,阿裏iDST副院長華先勝技術解讀