合併查詢和連線查詢中的inner join一樣嗎?

2021-10-07 19:06:54 字數 748 閱讀 4322

在開發中我們常常會看到where 作為join使用的,那查詢出來的結果一樣,我們該如何區分到底使用where還是join呢?

比如找出

員工姓名及其所在的部門名稱。

select e.ename,d.dname from emp e , dept d where e.deptno = d.deptno;

這樣寫的缺點在於

在上面語句中,實際上是建立了兩張表的笛卡爾積,所有可能的組合都會被建立出來。在笛卡爾連線中,在上面的例子中,如果有1000顧客和1000條銷售記錄,這個查詢會先產生1000000個結果,然後通過正確的 id過濾出1000條記錄。 這是一種低效利用資料庫資源,資料庫多做100倍的工作。 在大型資料庫中,笛卡爾連線是乙個大問題,對兩個大表的笛卡爾積會建立數10億或萬億的記錄。

那我們什麼時候可以使用合併查詢呢?

當兩張表沒有關聯點,但是有需要將資料合起來查詢,可以使用where

上面的sql可以寫成

select e.ename,d.dname from emp e inner join dept d on e.deptno = d.deptno

這樣寫的好處在於:

可以避免建立笛卡兒積,用inner join 這樣資料庫就只產生等於id 的1000條目標結果,這樣就增加查詢效率。

能使用連線查詢盡量使用連線查詢,連線查詢的效能也優於子查詢,所以能用連線查詢的地方盡量少用子查詢。

連線查詢和集合查詢

在對資料庫查詢過程中,有些時候一張表中的資料不能滿足我們的需求,這時候就須要把多張表連線起來,如以下的兩張表所看到的,一張表涵蓋了學生的資訊,一張表表示學院的資訊,假設我想知道某個學生是哪個學院的話,那麼就須要把這兩張表連線起來。stuid deptid stuname age 1109024103...

子查詢 聯合查詢和連線查詢

查詢中巢狀查詢。如 select from select cname,cid from tblclass union select dname,did from department as t1 order by cname 將多個結果集合並成乙個結果集,前提是列數相同,並且相應的列的型別相同。判斷...

文章標題多表查詢 合併結果集,連線查詢,子查詢

多表查詢 分類 合併結果集 連線查詢 子查詢 要求被合併的表中,列數相同,列的型別要一一對應相同 union,去除重複行 union all,不去除重複行 例 select from table1 union select from table2 select from table1 union a...