首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Oracle SQL 子查詢實現查找員工上級及其下屬

     編輯:程式設計綜合問答

場景描述

表 emp 包含欄位:ename (員工姓名)、boss (上級姓名)。需求:查找「王五」的上級,並列出所有屬於該上級的員工。

數據示例

ename | boss
------|-----
王五  | 張三
李四  | 張三
趙六  | 李四

SQL 解決方案

SELECT * 
FROM emp 
WHERE boss IN (
    SELECT boss 
    FROM emp 
    WHERE ename = '王五'
);

執行邏輯

  1. 內層子查詢:SELECT boss FROM emp WHERE ename = '王五' → 返回 '張三'。
  2. 外層查詢:WHERE boss IN ('張三') → 篩選所有上級為「張三」的員工。
  3. 結果:王五、李四 (假設他們的 boss 都是張三)。

進階寫法:JOIN 替代子查詢

SELECT e1.*
FROM emp e1
JOIN emp e2 ON e1.boss = e2.boss
WHERE e2.ename = '王五';
  • 性能上 JOIN 通常優於 IN 子查詢 (尤其大數據量)。
  • 可擴展:若需多級上級,遞歸查詢 (Oracle CONNECT BY / WITH RECURSIVE)。

注意事項

  • 子查詢返回多行時 IN 正常工作,= 會報錯「single-row subquery returns more than one row」。
  • 確保 boss 欄位有索引,提升查詢速度。
  • 姓名非唯一鍵時,建議使用員工 ID (empno) 關聯,避免同名歧義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved