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 視圖的優缺點
- 優點:
- 視圖可以選擇性的去除表中部分數據,更靈活
- 用戶可以通過簡單的SQL語句查詢出復雜的結果
- 視圖獨立性強,利於后期維護
- 安全性高,操作視圖需要一定的權限,刪除視圖不影響物理表
- 相同的數據,可以產生不同的視圖
- 缺點:
- 視圖並沒有提高查詢效率,什么時候查詢視圖,才會執行視圖中的SQL語句,視圖不會預編譯的
4. 索引(優化查詢)
4.1 索引的作用:
索引用來提高表的查詢效率,相當於書的目錄,根據頁碼快速查詢到數據存放的位置,索引作用在字段
4.2 什么樣的字段適合建索引?
- 經常被查詢的字段
- 不為空且字段值不重復
- 字段的值不經常改變
- 主鍵默認建唯一索引(唯一約束默認建唯一索引)
- 索引不是越多越好,一般一張表上最多添加2-3個索引
- 如果索引過多,數據庫添加數據和刪除數據時效率就會變低,並且增加數據庫負擔
4.3 創建索引
- 普通索引
create index 索引名字 on 表名(字段名)
- 唯一索引
create unique index 索引名字 on 表名(字段名)
- 復合普通索引
create index 索引名字 on 表名(字段名1,字段名2)
- 復合唯一索引(多個字段值相加不能重復)
create unique index 索引名字 on 表名(字段名1,字段名2)
- 刪除索引
drop index 字段名字
- 重建索引
alter index 索引名字 rebuild reverse
- 索引的使用
在SQL語句匯總where條件使用到索引字段,自然會走索引,無需調用 - 以下情況不走索引
- 復合索引必須多個字段同時被查詢
- 全模糊、前模糊查詢不走索引
- 索引字段不能作用於運算
- 索引字段不能作用於函數
- 索引的優缺點
- 優點:提高查詢效率
- 缺點:
- 增加存儲空間
- 添加、修改、刪除的效率降低
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
結束為止 = 當前頁 * 每頁顯示多少條