簡體   English   中英

select語句中的子查詢如何在oracle中工作

[英]How does Subquery in select statement work in oracle

我一直在尋找一個解釋,一個select語句中的子查詢如何工作,但由於非常含糊的解釋,我仍然無法理解這個概念。

我想知道如何在oracle中的select語句中使用子查詢以及它輸出的確切內容。

例如,如果我有一個想要顯示員工姓名的查詢以及他們從這些表中管理的配置文件數

員工(EmpName,EmpId)

個人資料(ProfileId,...,EmpId)

我如何使用子查詢?

我認為在select語句中需要一個子查詢來實現按功能分組來計算每個員工管理的配置文件的數量,但我不太確定。

這很簡單-

SELECT empname,
       empid,
       (SELECT COUNT (profileid)
          FROM profile
         WHERE profile.empid = employee.empid)
           AS number_of_profiles
  FROM employee;

當你使用像這樣的表連接時,它甚至更簡單:

  SELECT e.empname, e.empid, COUNT (p.profileid) AS number_of_profiles
    FROM employee e LEFT JOIN profile p ON e.empid = p.empid
GROUP BY e.empname, e.empid;

子查詢的說明:

實質上, select的子查詢獲取標量值並將其傳遞給主查詢。 select的子查詢不允許傳遞多個行和多個列,這是一個限制。 在這里,我們將count傳遞給主查詢,正如我們所知,主查詢始終只是一個數字 - 一個標量值。 如果未找到值,則子查詢將null返回到主查詢。 此外,子查詢可以從主查詢的from子句訪問列,如我的查詢中所示,其中employee.empid從外部查詢傳遞到內部查詢。


編輯

當您在select子句中使用子查詢時,Oracle基本上將其視為左連接(您可以在查詢的解釋計划中看到這一點),左側每行的行的基數只有一個。


左連接的說明

左連接非常方便,尤其是當您由於其限制而要替換select子查詢時。 這里對LEFT JOIN關鍵字兩側的表行數沒有限制。

有關更多信息,請閱讀子查詢上的Oracle Docs以及左連接或左外連接

在Oracle RDBMS中,只要將(子)輸出封裝為集合,就可以在select子句中使用多行子查詢。 特別是,多行select子句子查詢可以將其每一行輸出為封裝在xmlforest中的xmlelement。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM