表test1 a,b,d;表test2 a,c,f
查找出滿足a=a,b=b and c=''的字段a、c、f
select tb1.a,tb1.b,tb2.f from test1 tb1
inner join test2 tb2 on tb1.a=tb2.a and tb1.b=tb2.b and tb2.c='';
or
select tb1.a,tb1.b,tb2.f from test1 tb1,
test2 tb2 where tb1.a=tb2.a and tb1.b=tb2.b and tb2.c='';
轉自:https://blog.csdn.net/Michaelwubo/article/details/80923248
在多表查詢中,一些SQL開發人員更喜歡使用WHERE來做join,比如:
SELECT a.ID, b.Name, b.Date FROM Customers a, Sales b WHERE a.ID = b.ID;
- 1
缺點:在上面語句中,實際上是創建了兩張表的笛卡爾積,所有可能的組合都會被創建出來。在笛卡爾連接中,在上面的例子中,如果有1000顧客和1000條銷售記錄,這個查詢會先產生1000000個結果,然后通過正確的 ID過濾出1000條記錄。 這是一種低效利用數據庫資源,數據庫多做100倍的工作。 在大型數據庫中,笛卡爾連接是一個大問題,對兩個大表的笛卡爾積會創建數10億或萬億的記錄。
為了避免創建笛卡爾積,應該使用INNER JOIN :
SELECT a.ID, b.Name, b.Date FROM Customers a INNER JOIN Sales b ON a.ID = b.ID;
- 1
優點:如上面語句,使用inner join 這樣數據庫就只產生等於ID 的1000條目標結果。增加了查詢效率。
有些數據庫系統會識別出 WHERE連接並自動轉換為 INNER JOIN。在這些數據庫系統中,WHERE 連接與INNER JOIN 就沒有性能差異。但是, INNER JOIN 是所有數據庫都能識別的,因此DBA會建議在你的環境中使用它。
INNER JOIN(內連接,或等值連接):獲取兩個表中字段匹配關系的記錄。 LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。 RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。