Oracle數據庫高級學習筆記


Oracle 數據庫高級

Oracle Database,又名Oracle RDBMS,或簡稱Oracle。是甲骨文公司的一款關系數據庫管理系統。
優點:數據安全性強,穩定性強

1. 合並查詢

在實際開發過程中,為了合並多個結果集,可以采用以下操作符:

  • union(並集去重復)
  • union all(並集不去重復)
  • intersect(交集)
  • minus(差集)
語法:
select 字段1, 字段2 from 表名 where 條件字段 = 值
結果集操作符
select 字段1, 字段2 from 表名 where 條件字段 = 值

注:結果集查詢字段必須一模一樣,字段順序必須一樣
在oracle語句中去除重復有三種:distinct、group、union

2. 序列

序列相當於一個數字生成器,生成一個唯一的數字,一般用於生成自增主鍵

2.1 創建格式
create sequence 序列名	`(序列名格式 = 表名_seq; / 序列名格式 = seq_表名;)`
increment by 1	          --每次的增量(步長)
start with 1	          --初始值
maxvalue (28個9)          --最大值
minvalue 1	          --最小值
cache 20	          --緩沖區大小
2.2 簡單創建方式

creat sequence 序列名;

2.3 修改序列
alter sequence 序列名 屬性名 屬性值;

注:不能修改start with(初始值)
修改minvalue(最小值)時,不能大於下一個值
2.4 刪除序列

drop sequence 序列名;

2.5 查詢序列值
查看當前值:select 序列名.currval from dual;
查看下一個值:select 序列名.nextval from dual;

3. 視圖(view)

視圖是通過一條查詢SQL語句產生的虛擬表,把查詢SQL語句的結果集當成一張表視圖一般用於查詢

3.1 創建視圖格式

create or replace view 視圖名 as 查詢語句

3.2 視圖的優缺點
  • 優點:
    1. 視圖可以選擇性的去除表中部分數據,更靈活
    2. 用戶可以通過簡單的SQL語句查詢出復雜的結果
    3. 視圖獨立性強,利於后期維護
    4. 安全性高,操作視圖需要一定的權限,刪除視圖不影響物理表
    5. 相同的數據,可以產生不同的視圖
  • 缺點:
    1. 視圖並沒有提高查詢效率,什么時候查詢視圖,才會執行視圖中的SQL語句,視圖不會預編譯的

4. 索引(優化查詢)

4.1 索引的作用:

索引用來提高表的查詢效率,相當於書的目錄,根據頁碼快速查詢到數據存放的位置,索引作用在字段

4.2 什么樣的字段適合建索引?
  • 經常被查詢的字段
  • 不為空且字段值不重復
  • 字段的值不經常改變
  • 主鍵默認建唯一索引(唯一約束默認建唯一索引)
  • 索引不是越多越好,一般一張表上最多添加2-3個索引
  • 如果索引過多,數據庫添加數據和刪除數據時效率就會變低,並且增加數據庫負擔
4.3 創建索引
  1. 普通索引
    create index 索引名字 on 表名(字段名)
  2. 唯一索引
    create unique index 索引名字 on 表名(字段名)
  3. 復合普通索引
    create index 索引名字 on 表名(字段名1,字段名2)
  4. 復合唯一索引(多個字段值相加不能重復)
    create unique index 索引名字 on 表名(字段名1,字段名2)
  5. 刪除索引
    drop index 字段名字
  6. 重建索引
    alter index 索引名字 rebuild reverse
  7. 索引的使用
    在SQL語句匯總where條件使用到索引字段,自然會走索引,無需調用
  8. 以下情況不走索引
    • 復合索引必須多個字段同時被查詢
    • 全模糊、前模糊查詢不走索引
    • 索引字段不能作用於運算
    • 索引字段不能作用於函數
  9. 索引的優缺點
    • 優點:提高查詢效率
    • 缺點:
      • 增加存儲空間
      • 添加、修改、刪除的效率降低

5. exists與in的區別

exists與in的作用是一樣的,區別如下:

  • 外表大於內嵌的表使用in
  • 內嵌表大於外表使用exists

6. 如何優化SQL語句

  • 少用select *,查詢幾個字段就寫幾個字段
  • 能精確查詢絕不模糊查詢
  • 多表查詢時減少臨時表的產生,能用兩張表查詢絕不用三張表
  • 使用大數據表關聯小數據表
  • 使用or代替in
  • 合理使用in與exists
  • where條件中能過濾掉大數據的放后面(where條件是從右到左執行的)

7. Oracle分頁查詢

7.1 oracle分頁查詢語句
select * from (
select t.*, rownum m from 表名 t where rownum <= ?
) where m >= ?
7.2 分頁流
public class Page {
  1. 上一頁
  2. 下一頁
  3. 當前頁
  4. 總頁數
  5. 總條數
  6. 每頁顯示多少條
  7. 首頁
  8. 尾頁
  9. 搜索的開始位置
  10. 搜索的結束位置
  11. 結果集	
}

開始位置 =(當前頁 - 1) * 每頁顯示多少條 + 1
結束為止 = 當前頁 * 每頁顯示多少條


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM