MySQL編程題02--where多表查詢和inner join區別


表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 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM