24 -Oracle學習(3)- 子查詢

1 子查詢

1.1 子查詢語法

select select_list from table
where expr operator(select select_list from table)

1.2 子查詢注意的問題

  1. 子查詢需要添加括號
  2. 合理的書寫風格
  3. 可以在where select having from後面 都可以使用子查詢
  4. 不可以在group by後面使用子查詢
  5. 強調from後面的子查詢
  6. 主查詢和子查詢可以不是同一張表;只要子查詢返回的結果 主查詢可以使用 即可
  7. 一般不在子查詢中排序;但在top-n分析問題中,必須對子查詢排序
  8. 一般先執行子查詢,再執行主查詢;但相關子查詢例外
  9. 單行子查詢只能使用單行操作符;多行子查詢只能使用多行操作符
  10. 子查詢中的null

1.3 案例

查詢工資比SCOTT高的員工信息

在這裏插入圖片描述


select後可以添加子查詢

查詢員工記錄後,每一行後面顯示總裁
在這裏插入圖片描述


from後面的子查詢

查詢員工信息:員工號 姓名 月薪
在這裏插入圖片描述

查詢員工信息:員工號 姓名 月薪 年薪
語句跟select empno,ename,sal,sal*12 annsal from emp性能一樣的,oracle內部會重構
在這裏插入圖片描述


主查詢和子查詢可以不是同一張表;只要子查詢返回的結果 主查詢可以使用 即可

查詢部門名稱是SALES的員工,實現方法有兩種
在這裏插入圖片描述
在這裏插入圖片描述


in 在集合中

查詢部門名稱是SALES和ACCOUNTING的員工
在這裏插入圖片描述


any: 和集合中的任意一個值比較

查詢工資比30號部門至少一個員工高的員工信息
在這裏插入圖片描述
在這裏插入圖片描述


all 和集合中的所有值比較

查詢工資比30號部門所有員工高的員工信息
在這裏插入圖片描述
在這裏插入圖片描述


not in(a,b,null)
not in中不能有null
in 中可以有null
多行子查詢中的null

查詢是老闆(管理層)的員工
在這裏插入圖片描述

查詢不是老闆(管理層)的員工

錯誤寫法【not in中不能有null】
在這裏插入圖片描述

在這裏插入圖片描述

2 集合運算

  • 瞭解union就可以,intersectminus原理一樣
  • 開發中少用union,性能比較差
  • Set timing on/off可以查時間

在這裏插入圖片描述

Union
注意的問題:
1.參與運算的各個集合必須列數相同且類型一致
2. 採用第一個集合作爲最後的表頭
3. order by 永遠在最後
4. 括號

查詢10和20號部門的員工
select * from emp where deptno=10 or deptno=20;
在這裏插入圖片描述
在這裏插入圖片描述


在這裏插入圖片描述
等價於
在這裏插入圖片描述

3 練習

3.1 rownum行號

  • rownum永遠按照默認的順序生成
  • rownum只能使用 < <=; 不能使用> >=
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

3.2 rowid行地址

在這裏插入圖片描述

3.3 臨時表

  1. create global temporary table *****
  2. 自動創建:order by
    特點:當事務或者會話結束的時候,表中的數據自動刪除
    在這裏插入圖片描述

3.4 行轉列

  • wm_concat(varchar2) 組函數
    在這裏插入圖片描述

3.5 oracle 分頁

找到員工表中工資最高的前三名
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


分頁

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


找到員工表中薪水大於本部門平均薪水的員工

  1. 求出部門的平均工資
  2. 判斷員工是否工資大於本部門的平均工資

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


計算每年入職的員工數
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章