[英]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.