2012-06-09 138 views
-1

我對相關子查詢執行的懷疑當有不止一個子查詢。相關子查詢執行時,它具有多個子查詢

我瞭解相關子查詢執行時,只有一個子查詢。但是,如果有一個以上我無法理解。

我都提到了許多書籍和網站,但我無法找到合適的答案。

下面是兩個查詢。我知道query1如何執行,但query2如何?

查詢1:

select e.ename, e.city 
    from emp1 e 
where exists (select f.ename 
        from emp2 f 
       where f.ename = ’ajay’ 
        and e.city = f.city 
         ) 

QUERY2:

select e.ename 
    from employee e 
where exists (select ‘x’ 
        from emp_company c 
       where e.ename = c.ename 
        and exists (select ‘x’ 
            from company m 
           where c.cname = m.cname 
            and m.city = ’bombay’ 
             ) 
         ) 
  1. 在所考慮QUERY1僱員表中的第一行enamecity的執行的第一步驟。
  2. 在QUERY1的執行的第二步驟中,從主查詢所考慮的城市用的emp2每一行比較。
  3. 的,同時也可與EMP2的每一行的主要查詢與城市;如果任何行滿足條件,那麼行的名字被添加到列表中。
  4. 所形成的列表返回到主查詢。
  5. 如果返回的列表不爲空,然後exists計算爲真。然後emp1表的ename,city添加輸出。
  6. ename,cityemp1選自第二行emp1表。

能否請你解釋QUERY2的執行爲我解釋QUERY1?

+0

正如你解釋query1?哪裏?我看不到任何解釋!在你解釋事情時,請解釋你爲什麼不使用連接。 –

+1

我已經完全重新編寫了您的問題,使其可讀性和希望有意義。如果您不同意任何事情,請隨時重新編輯。 – Ben

+0

不要以有序的步驟思考。只要最終結果與您的六步法產生的結果相符,DBMS就可以自由制定任何計劃。這甚至可能是笛卡兒的產品+修剪任何不滿足存在和存在條款的東西。 – wildplasser

回答

0

你的第二個查詢說的是:給我的員工如果離開他們(第一子查詢)合作的公司,如果這樣的公司(從第一個子查詢取)孟買(第二子查詢)存在。你會得到具有以下,可能更effecient,select語句相同的結果:

select e.ename 
from employee e, 
    emp_company ec, 
    company c 
where e.ename = ec.ename 
    and ec.cname = c.cname 
    and c.name = 'bombay' 

這對邏輯。如果你有興趣在細節上的Oracle 先生如何獲取的行,你可以看看查詢說明計劃