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
結束為止 = 當前頁 * 每頁顯示多少條
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374413.html
標籤:Oracle
上一篇:Netty | 第1章 Java NIO 網路編程《Netty In Action》
下一篇:PRVF-5436 : The NTP daemon running on one or more nodes lacks the slewing option "-x"
