一、假設有兩個表
一個是職稱`user`:
另一個是公司的職缺`job`:
注意公司的職缺中,並沒有工程師(engineer)的需求,並且多了一個司機(driver)的需求,這個需求是表單`user`沒有的
二、使用三種join指令
[SQL1] SELECT * FROM `user` LEFT join `jobs` on user.u_id= jobs.require
[SQL2] SELECT * FROM `user` RIGHT join `jobs` on user.u_id= jobs.require
[SQL3] SELECT * FROM `user`, `jobs` where `user`.u_id= jobs.require
說明
SQL1 職稱表 left join 職缺表
會列出「有職稱及職缺」及「有職稱但是沒有職缺」的記錄,不會出現「有職缺但沒有職稱」的記錄
SQL2 職稱表 right join 職缺表
和SQL1相反,會列出「有職稱及職缺」及「有職缺但沒有職稱」的記錄,不會出現「有職稱但是沒有職缺」的記錄
SQL3 職稱表 join 職缺表 by 條件
只會列出「一定要職稱和職缺」的記錄,換句話說,少了「職稱沒有職缺」及「職缺沒有職稱」都不行。
結論
1. left join 代表左表屬,右表從; right join 代表右表屬,左表從。
2. 表一 left join 表二等同於表二right join 表一,差別只是某些古老的資料庫中並沒有 right join 的語法。
3.SQL3 又稱為 inner join.
4.還有一種 natural join,可以參考這篇 [Mysql] 使用union合併兩個表@新精讚
5.還有一種叫 full outer join,在mysql中沒有相關的語法可用,你得用一些替代的方法[2],但是我無此需求,所以沒試過。
參考資料
[2] http://stackoverflow.com/questions/4796872/full-outer-join-in-mysql
編修原文 2009-12-25 14:46:29