日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【数据库】oracle数据库----内嵌视图

發(fā)布時間:2024/4/15 数据库 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据库】oracle数据库----内嵌视图 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關(guān)系視圖是數(shù)據(jù)庫對象,創(chuàng)建關(guān)系視圖實際是對查詢定義可重用的需求。但有時,查詢定義并不會被重用。此時,創(chuàng)建關(guān)系視圖便不再適宜------過多的關(guān)系視圖勢必增加數(shù)據(jù)庫的維護成本。oracle提供了內(nèi)嵌視圖來解決這一問題。

1、內(nèi)嵌視圖簡介

如同關(guān)系視圖,內(nèi)嵌視圖也是查詢定義。內(nèi)嵌的意義在于,視圖定義嵌入在復(fù)雜查詢語句中,其角色與普通數(shù)據(jù)表或關(guān)系視圖相同。內(nèi)嵌視圖不必使用create view 命令進行創(chuàng)建,因此,在數(shù)據(jù)字典中也無法獲得相應(yīng)信息。內(nèi)嵌視圖是子查詢的一種,可以與數(shù)據(jù)表、視圖一樣作為查詢語句的數(shù)據(jù)源存在,但在形式上有較大的區(qū)別。


數(shù)據(jù)表和關(guān)系視圖作為數(shù)據(jù)源,只需要出現(xiàn)對象名稱即可,而內(nèi)嵌視圖則是以SQL查詢語句的形式存在。


2、使用內(nèi)嵌視圖

內(nèi)嵌視圖可以應(yīng)用于查詢語句、更新語句及插入語句中。其中,最常用的場景為復(fù)雜查詢中的子查詢或作為中間結(jié)果集。


例子:在表employees中存儲了員工的信息,現(xiàn)需獲取年齡最小的兩名員工的信息,為了保證最終結(jié)果的正確性,首先進行人工分析。

SQL>select * from employees;

分析所有員工情況可知,employee_id為4和5的員工為我們的搜尋目標。

按照習(xí)慣思維,首先應(yīng)當將所有記錄按照employee_age進行升序排列,然后獲取前兩位員工的信息。oracle數(shù)據(jù)表的偽劣rownum可以返回每行記錄所對應(yīng)的行號,利用rownum<3的條件可以返回前兩行記錄。嘗試使用如下SQL語句進行搜尋。

SQL>select * from employees where rownum<3 order by employee_age;

其中,order by employee_age用于對表employees中的記錄按照employee_age值由小到大進行排序;where rownum<3則是搜索條件-----搜尋到的結(jié)果集的行號小于3.

但是,分析查詢結(jié)果可知,該搜尋結(jié)果與預(yù)期結(jié)果并不符合,這是因為,rownum對結(jié)果集中的各記錄賦以行號的時候,并未進行排序。也就是說,rownum的賦值操作處于order by employee_age操作之后,因此,利用此語句并不能獲得預(yù)期的效果。

內(nèi)嵌式圖正式解決這個問題的最佳策略。利用內(nèi)嵌視圖,可以首先獲得排序之后的結(jié)果集,然后將該結(jié)果集作為數(shù)據(jù)源進行查詢時,rownum自然按照此時的順序賦值。這樣就可以在排序之后進行rownum的賦值動作。相應(yīng)的SQL語句如下所示:

SQL>select * from ( select * from employees order by employee_age ) where rownum < 3 ;

其中,( select * from employees order by employee_age )即為內(nèi)嵌視圖,該內(nèi)嵌視圖實際提供了一個數(shù)據(jù)源。該數(shù)據(jù)源時將表employees中的記錄按employee_age列進行升序排列之后得到的。where rownum <3 則是自封裝之后的數(shù)據(jù)源,獲取前兩行數(shù)據(jù),從而得到年齡最小的兩位員工。

例子:內(nèi)嵌視圖往往與其他數(shù)據(jù)源(數(shù)據(jù)表、關(guān)系視圖等)一起使用。此時便需要內(nèi)嵌視圖指定別名,以便引用,并與其他數(shù)據(jù)源中的列進行區(qū)分。

上面的列子中,使用了內(nèi)嵌視圖獲得了年齡最小的兩位員工的記錄。同時,還想獲得兩位員工的工資情況,那么可以使用內(nèi)嵌視圖與表salary進行連接。此時,在內(nèi)嵌式圖與表salary中會存在重復(fù)列,因此,需要為內(nèi)嵌視圖指定別名。

SQL> select * t.employee_id, t.employee_name, t.employee_age, s.salary from?

( select * from ( ?select * from employees order by employee_age) where rownum <3 ) t, salary s?

where t.employee_id = s.employee_id;


3、內(nèi)嵌視圖小結(jié)

內(nèi)嵌視圖的特點在于無須創(chuàng)建真正的數(shù)據(jù)庫對象,而只是封裝查詢,因此會節(jié)約數(shù)據(jù)資源,同時不會增加維護成本。但是內(nèi)嵌視圖不具有可復(fù)用性,因此當預(yù)期將在多處調(diào)用到同一查詢定義時,還是應(yīng)該使用關(guān)系視圖。

內(nèi)嵌視圖之所以成為內(nèi)嵌,是因為她總是出現(xiàn)在較復(fù)雜的查詢中,而其外層查詢問往往被稱為父查詢,因此,內(nèi)嵌視圖也可以看做子查詢。

內(nèi)嵌視圖在處理大數(shù)據(jù)量查詢時,不具有優(yōu)勢。相對來說,使用臨時表反而是更好的選擇。臨時表作為實實在在存在的數(shù)據(jù)庫對象,可以通過創(chuàng)建索引等手段來更好的提高性能,這正是視圖所不具備的。

總之,內(nèi)嵌視圖的優(yōu)點是:節(jié)省數(shù)據(jù)庫資源,不增加維護成本;而缺點是,不可復(fù)用,以及大數(shù)據(jù)量的查詢效率低下等。








轉(zhuǎn)載于:https://www.cnblogs.com/iamliuxin/p/5617794.html

總結(jié)

以上是生活随笔為你收集整理的【数据库】oracle数据库----内嵌视图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。