




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、SQL高級查詢安裝完ORACLE后,在數(shù)據(jù)庫中創(chuàng)建一個SCOTT用戶及其所屬的4個表:dept,emp,bonus和salgrade.位于$ORACLE_HOMERDBMSADMIN文件夾下的scott.sql腳本文件就是用來創(chuàng)建這4個表并向其中插入數(shù)據(jù)的。在SQL*PLUS中,以“connect sys/password as sysdba”連接到數(shù)據(jù)庫,并運行該腳本文件就可以創(chuàng)建該scott用戶方案的示例數(shù)據(jù)庫。 隨著ORACLE數(shù)據(jù)庫技術(shù)的發(fā)展,scott用戶所屬的表已經(jīng)變得不能展示ORACLE數(shù)據(jù)庫及其產(chǎn)品的最基本的特征了。所以從ORACLE9i開始就提供了可用來學(xué)習(xí)其各種特性的豐富的
2、示例數(shù)據(jù)庫,以適應(yīng)ORACLE產(chǎn)品文檔,學(xué)習(xí)培訓(xùn),軟件開發(fā),應(yīng)用案例的需要如HR(人力資源 Human Resource):HR方案是一個基本的關(guān)系數(shù)據(jù)庫方案。有七個表:雇員(employees),部門(departments),地點(locations),國家(countries),地區(qū)(regions),崗位(jobs),工作履歷(job_history).5.3.1連接查詢連接查詢:是從兩個或兩個以上表或視圖中進(jìn)行查詢FROM子句告訴數(shù)據(jù)庫應(yīng)該到哪個或哪些表或視圖中查詢所需要的數(shù)據(jù)。WHERE子句告訴數(shù)據(jù)庫進(jìn)行連接或比較的連接條件是什么,用于連接或比較的列往往是具有主鍵,外鍵關(guān)系的列。當(dāng)
3、從兩個或兩個以上表中查詢數(shù)據(jù),并且在WHERE子句中沒有指定連接條件(但可能有查詢條件)時,就會導(dǎo)致一個表的查詢結(jié)果集的所有行都連接到另一個表的查詢結(jié)果集的所有行上,即笛卡兒連接,就會產(chǎn)生笛卡兒積.例:笛卡兒積應(yīng)避免出現(xiàn)笛卡兒連接,即應(yīng)該在FROM子句中有n個表時,在WHERE子句中至少有n-1個連接條件.簡單連接相等連接,不相等連接用來建立兩表之間關(guān)系的連接條件的運算符是等號(=)的連接,就是相等連接.這種類型的連接把來自兩個表的在指定列中具有相等值的行連接起來.建立相等連接并不需要指定列具有相同的名稱.例:相等連接:查詢雇員編碼為177的雇員姓名及其所在的部門名稱.用來建立兩表之間關(guān)系的連
4、接條件的運算符不是等號的連接,就是不相等連接.不相等連接涉及的運算符有不等于(或!=),=,LIKE,IN,BETWEEN.AND.例,不相等查詢:查詢雇員JACK當(dāng)前的工資比哪些崗位的最高工資還高JOIN連接SQL支持另一種使用關(guān)鍵字JOIN的連接.SELECT table1.column,table2.column FROM join_table1 join_type join_table2 on (join_condition)如:內(nèi)連接的例子:查詢雇員編碼為177的雇員姓名及其所在的部門名稱.內(nèi)連接:返回的查詢結(jié)果集中僅包含符合查詢條件(WHERE搜索條件或HAVING條件)和連接條件
5、的行.內(nèi)連接消除與另一個表中的任何行不匹配的行.外連接:除返回所有匹配的行外,還會返回一部分或全部不匹配的行.左外連接:包括JOIN左側(cè)表的所有行.右外連接:包括JOIN右側(cè)表的所有行.完全連接:包括JOIN左側(cè)和右側(cè)表的所有行.LEFT JOIN,RIGHT JOIN ,FULL JOIN關(guān)鍵字.5.3.2子查詢子查詢是指嵌入在其他SQL語句中的一個查詢。子查詢可以出現(xiàn)在SELECT子句,WHERE子句,F(xiàn)ROM子句,HAVING子句和SET子句中。子查詢中還可以繼續(xù)嵌套子查詢。子查詢的分類:從父查詢與子查詢的關(guān)系上可分為不相關(guān)子查詢和相關(guān)子查詢。相關(guān)子查詢:子查詢的查詢條件依賴于父查詢中的
6、表不相關(guān)子查詢:子查詢的查詢條件不依賴于父查詢中的表單行子查詢:單行子查詢不向外層查詢返回記錄或只返回一行記錄。子查詢可以放在SELECT語句的WHERE,HAVING,F(xiàn)ROM子句中。在WHERE子句中使用單行子查詢時,要使用單行運算符,如比較運算符=,,=,=,.例:單行子查詢:查詢公司中工資最高的雇員信息多行子查詢:可以向外層查詢返回多行記錄。如果不能確認(rèn)子查詢會返回多少行記錄,則在子查詢中使用多行運算符比使用單行運算符更安全,否則容易失敗。在WHERE子句中使用多行子查詢時,要使用多行運算符,如IN ,NOT IN ,EXISTS,NOT EXISTS,ALL,ANY,其中ALL和AN
7、Y必須與比較運算符結(jié)合使用)。例多行子查詢:查詢與部門20的所有員工有相同工資的雇員信息. 查詢比部門20的所有員工工資還高的雇員信息.多列子查詢:前面的子查詢的結(jié)果集都只有一列。實際上并沒有限制子查詢只能返回一列。多列子查詢是指返回多個列數(shù)據(jù)的子查詢語句,當(dāng)多列子查詢返回單行數(shù)據(jù)時,在WHERE子句中可以使用單行比較符;當(dāng)多列子查詢返回多行數(shù)據(jù)時,在WHERE子句中必須使用多行運算符,如IN 。例:多列子查詢:查詢公司中與198號員工的工資,崗位都相同的雇員信息.相關(guān)子查詢是指引用了父查詢中某些表或某些列的子查詢(但父查詢不能引用子查詢中的表或列)找出每個學(xué)生超過他選修課程平均成績的課程號.
8、 SELECT Sno,Cno FROM SC x WHERE Grade=(SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno );內(nèi)層查詢是求一個學(xué)生所有選修課平均成績的,至于是哪個學(xué)生的平均成績要看參數(shù)x.Sno的值,而該值是與父查詢相關(guān)的,所以稱為相關(guān)子查詢.例:查詢每個部門中最高工資的雇員信息SELECT department_id, salary FROM employees aWHERE salary = (SELECT MAX(salary) FROM employees b WHERE b.department_id = a.depar
9、tment_id)ORDER BY department_id;求解過程:父子配合求解,外層查詢過程直接影響內(nèi)層查詢的執(zhí)行.1)首先取外層查詢中表的第一個元組,根據(jù)它與內(nèi)層查詢相關(guān)的屬性值處理內(nèi)層查詢,若WHERE子句返回值為真,則取此元組放入結(jié)果表.2)然后再取外層表的下一個元組3)重復(fù)這個過程,直到外層循環(huán)執(zhí)行完.EXISTS運算符用于檢查子查詢所返回的行的存在性,而不返回任何數(shù)據(jù),即只產(chǎn)生邏輯真值或假值.查詢負(fù)責(zé)管理其他雇員的管理員信息.(假設(shè)雇員多的部門可能有若干個管理員,因此從employees表查詢,不從departments表查詢)SELECT employee_id, firs
10、t_name, job_id, department_idFROM employees aWHERE EXISTS (SELECT 1 FROM employees b WHERE b.manager_id = a.employee_id)ORDER BY department_id, employee_id;情景查詢在執(zhí)行SELECT操作過程中,經(jīng)常需要對不同的數(shù)據(jù)顯示不同的結(jié)果.類似于IFELSE.邏輯.可以使用DECODE()函數(shù)和CASE表達(dá)式完成情景查詢.DECODE()函數(shù)DECODE(value, if1, then1, if2,then2, if3,then3, . . . e
11、lse ) Value 代表某個表的任何類型的任意列或一個通過計算所得的任何結(jié)果。當(dāng)每個value值被測試,如果value的值為if1,Decode 函數(shù)的結(jié)果是then1;如果value等于if2,Decode函數(shù)結(jié)果是then2;等等。事實上,可以給出多個if/then 配對。如果value結(jié)果不等于給出的任何配對時,Decode 結(jié)果就返回elseselect count(*) , decode(region_id,1,歐洲,3,亞洲,其他洲) from countriesgroup by region_id;CASE表達(dá)式簡單的CASE表達(dá)式case search_expr when
12、expr_1 then display_result_1 when expr_2 then display_result_2. when expr_n then display_result_n else default_display_result end 搜索CASE表達(dá)式case when expr_1 then display_result_1 when expr_2 then display_result_2. when expr_n then display_result_n else default_display_result end6 索引和視圖建立在表上的索引是一個獨立于表
13、的 方案對象,它可以存儲在與表不同的磁盤或表空間中.通過在表中的一列或多列上創(chuàng)建索引,就能為數(shù)據(jù)的檢索提供快捷的存取路徑, 迅速地找到表中的數(shù)據(jù),而不必掃描整個表.數(shù)據(jù)庫的索引類似于書的目錄在書中,目錄是內(nèi)容和頁碼的清單;在數(shù)據(jù)庫中,索引是數(shù)據(jù)和存儲的列表.索引一旦被創(chuàng)建,在表上執(zhí)行DML操作時ORACLE就會自動對索引進(jìn)行維護(hù),并且由ORACLE決定何時使用索引,用戶完全不需要在SQL中指定使用哪個索引,如何使用索引.索引的原理假設(shè)emp表的數(shù)據(jù)如圖,其中ROWID偽列表示的是對應(yīng)記錄的物理存儲位置.EMPNOEMPNOENAMEENAMESALSALDEPTNODEPTNOROWIDROW
14、ID7369SMITH80020AAAMZJAAEAAAAIVAAA7499ALLEN160030AAAMZJAAEAAAAIVAAB7521WARD125030AAAMZJAAEAAAAIVAAC7566JONES297520AAAMZJAAEAAAAIVAAD7654MARTIN125030AAAMZJAAEAAAAIVAAE7698BLAKE285030AAAMZJAAEAAAAIVAAF7782CLARK245010AAAMZJAAEAAAAIVAAGSELECT sal FROM emp WHERE ename=JONES在ename列上沒有索引的情況下,必須搜索所有的記錄如果使用如
15、下語句CREATE INDEX idx_emp_ename ON emp(ename);就會在emp表的ename列上創(chuàng)建一個名為idx_emp_ename索引.創(chuàng)建索引時,ORACLE會對emp表執(zhí)行一次全表搜索,獲取每條記錄的 ename列的數(shù)據(jù),并將他們按升序排列,然后將排序后的ename列的數(shù)據(jù)和對應(yīng)記錄的ROWID相匹配存儲到索引段中.如圖ENAMEENAMEROWIDROWIDALLENAAAMZJAAEAAAAIVAABBLAKEAAAMZJAAEAAAAIVAAFCLARKAAAMZJAAEAAAAIVAAGJONESAAAMZJAAEAAAAIVAADMARTINAAAMZJ
16、AAEAAAAIVAAESMITHAAAMZJAAEAAAAIVAAAWARDAAAMZJAAEAAAAIVAAC在ENAME列有索引的情況下,ORACLE將首先對索引中的ENAME列進(jìn)行快速搜索(因為已經(jīng)排序,可以使用各種快速搜索算法,如二分法).通過在索引中找到的JONES讀取對應(yīng)的ROWID,然后通過該ROWID在emp表中讀取相應(yīng)的SAL值.索引的基本概念索引的分類可以按列的多少,索引列是否唯一,索引數(shù)據(jù)的組織形式對索引進(jìn)行分類.單列索引和復(fù)合索引唯一索引和非唯一索引標(biāo)準(zhǔn)(B樹)索引位圖索引索引創(chuàng)建索引的一般語法CREATE INDEX語句創(chuàng)建索引。CREATE UNIQUE|BITM
17、AP INDEX index_name ON table_name (column_nameASC|DESC,n,column_expression)B+樹索引B+樹索引就是通常使用的“傳統(tǒng)”索引,是數(shù)據(jù)庫中最常使用的一類索引結(jié)構(gòu)。按B樹結(jié)構(gòu)(或使用B樹算法)組織并存放索引數(shù)據(jù).在B樹索引中是通過在索引中保存排序過的索引列及其對應(yīng)的ROWID來實現(xiàn)快速查詢.B+樹索引B+樹索引B+樹最底層的塊稱為葉子節(jié)點(leaf node)或葉子塊(leaf block),包含各個索引鍵以及一個rowid(指向索引的行)。葉子節(jié)點之上的內(nèi)部塊稱為分支塊(branch block),用于在結(jié)構(gòu)中實現(xiàn)導(dǎo)航B+樹
18、的特點之一是:所有葉子塊都應(yīng)該在樹的同一層上。這一層稱為索引的高度(height)換句話說,索引是高度平衡的(height balanced)位圖索引位圖索引(bitmap index)是從Oracle 7.3版本開始引入的。目前Oracle企業(yè)版和個人版都支持位圖索引,但是標(biāo)準(zhǔn)版不支持。位圖索引是為數(shù)據(jù)倉庫/即席查詢環(huán)境設(shè)計的。位圖索引對于一個位圖索引sex_idx,其存儲的結(jié)構(gòu)可能是 CREATE BITMAP INDEX sex_idx ON student(sex);學(xué)號學(xué)號姓名姓名性別性別0601001馬韶名女0601003于潤封男男男女女0110位圖索引位圖索引對于相異基數(shù)(dis
19、tinct cardinality)低的數(shù)據(jù)最為適合?;鶖?shù)是指某個列可能擁有的不重復(fù)數(shù)值的個數(shù).比如SEX列的基數(shù)為2.創(chuàng)建索引原則:選擇合適的索引類型在適當(dāng)?shù)谋?適當(dāng)?shù)牧猩蟿?chuàng)建適當(dāng)數(shù)量的索引合理設(shè)置復(fù)合索引中的列順序設(shè)置合適的存儲參數(shù)數(shù)據(jù)裝載后再創(chuàng)建索引獲取有關(guān)索引的信息查看用戶建立了哪些索引查看用戶所建索引的細(xì)節(jié)信息 SELECT * FROM user_indexes WHERE table_name=VIDEO; SELECT * FROM user_ind_columns WHERE table_name=VIDEO;索引管理頁面 索引管理頁面 創(chuàng)建索引創(chuàng)建索引頁面 1輸入索引名稱,
20、選擇方案和表空間3置入列4設(shè)置排序和順序2選擇表創(chuàng)建索引索引選項頁面 保存選擇索引類型選擇執(zhí)行選項修改索引 ALTER INDEX語句可以修改索引?!纠吭O(shè)置索引index_username不可用:ALTER INDEX index_username UNUSABLERENAME TO子句可以重命名索引?!纠繉⑺饕鹖ndex_username重命名為index_username_1:ALTER INDEX index_username RENAME TO index_username_1分析索引監(jiān)視索引 ALTER INDEX index-name MONITORING USAGE打開索引
21、的監(jiān)視狀態(tài)之后,可以通過動態(tài)性能視圖“V$OBJECT_USAGE”查詢索引的使用情況 如:SELECT * FROM V$OBJECT_USAGEORACLE還提供了一種機(jī)制,監(jiān)視索引的空間使用情況。首先需要通過ANALYZE INDEX.VALLIDATE STRUCTURE語句分析索引的結(jié)構(gòu),再通過數(shù)據(jù)字典視圖INDEX_STATS來監(jiān)視索引的使用情況。如:SQL ANALYZE INDEX index_name VALIDATE STRUCTURE SQLSELECT BR-ROWS,LF_ROWS,DEL_LF_ROWS FROM INDEX_STATS WHERE NAME=ind
22、ex_name;使用ALTER INDEX 關(guān)閉索引的監(jiān)視狀態(tài)產(chǎn)看索引的被使用情況在進(jìn)行數(shù)據(jù)查詢的時候,ORACLE通過優(yōu)化器進(jìn)行分析判斷,以決定使用索引掃描還是全表掃描方法進(jìn)行數(shù)據(jù)檢索。一般情況下,用戶要查詢的數(shù)據(jù)量超過表數(shù)據(jù)的5%時,就會進(jìn)行全表掃描。在數(shù)據(jù)檢索過程中,如果要查看索引是否被使用,可以通過ORACLE提供的AUTOTRACE功能,它可以顯示SQL語句的執(zhí)行路徑。SET AUTOTRACE ON 合并索引合并索引是將B樹索引中葉節(jié)點的存儲碎片合并在一起,但不會改變索引的物理組織結(jié)構(gòu)。當(dāng)相鄰索引葉塊都存在剩余空間,并且它們的索引入口數(shù)據(jù)可以存放在同一個索引塊時,通過合并索引的方法
23、可以提高索引空間的利用率。ALTER INDEX index_name COALESCE DEALLOCATE UNUSED如果在索引列上頻繁執(zhí)行DELETE或UPDATE 操作,應(yīng)該定期重建索引,來提高空間利用率。不僅可以消除存儲碎片,還可以改變索引的全部存儲參數(shù)設(shè)置。ALTER INDEX index_name REBUILD刪除索引 DROP INDEX語句刪除指定索引?!纠縿h除索引index_username:DROP INDEX index_username;單擊此按鈕確認(rèn)刪除索引視圖視圖的特點虛表, 是從一個或幾個基本表(或視圖)導(dǎo)出的表只存放視圖的定義, 不會出現(xiàn)數(shù)據(jù)冗余基表中
24、的數(shù)據(jù)發(fā)生變化, 從視圖中查詢出的數(shù)據(jù)也隨之改變基于視圖的操作 查詢 刪除 受限更新定義基于該視圖的新視圖一.建立視圖 一般情況下,創(chuàng)建視圖是由表的所有者完成的,如果其他用戶要創(chuàng)建索引,需要具有CREATE VIEW或者CREATE ANY VIEW權(quán)限,并且具有操作視圖所涉及的表或其他視圖的權(quán)限.語句格式CREATE OR REPLACE FORCE|NOFORCE VIEW ( , )AS WITH CHECK OPTION CONSTRAINT constraint_name ; WITH READ ONLY其中:REPLACE:如果存在同名視圖,則使用新視圖代替已有的視圖.FORCE:
25、強(qiáng)制創(chuàng)建視圖,不考慮基礎(chǔ)表是否存在,也不考慮是否具有基礎(chǔ)表的權(quán)限.WITH CHECK OPTION:透過視圖進(jìn)行增刪改操作時, 不得破壞視圖定義中的謂詞條件(即子查詢中的條件表達(dá)式)CONSTRAINT constraint_name :在使用WITH CHECK OPTION選項時指定約束的名稱. WITH READ ONLY:創(chuàng)建的視圖只能用于查詢數(shù)據(jù),而不能用于更改數(shù)據(jù).組成視圖的屬性列名或全部省略或全部指定省略視圖的各個屬性列名, 則該視圖由子查詢中SELECT子句目標(biāo)列中的諸字段組成. 必須明確指定組成視圖的所有列名的情形(1) 某個目標(biāo)列不是單純的屬性名, 而是集函數(shù)或列表達(dá)式(
26、2) 多表連接時選出了幾個同名列作為視圖的字段(3) 需要在視圖中為某個列啟用新的更合適的名字子查詢不含ORDER BY子句和DISTINCT短語的SELECT語句ORACLE執(zhí)行CREATE VIEW語句時只是把視圖的定義存入數(shù)據(jù)字典, 并不執(zhí)行其中的SELECT語句. 只是在對視圖查詢時, 才按視圖的定義從基本表中將數(shù)據(jù)查出. 創(chuàng)建簡單視圖簡單視圖是基于單個表建立的,不包含任何函數(shù),表達(dá)式和分組數(shù)據(jù)的視圖例:基于emp表創(chuàng)建一個V_staff視圖創(chuàng)建連接視圖連接視圖是基于多個表所創(chuàng)建的視圖,即定義視圖的SELECT子查詢是一個連接查詢。例:創(chuàng)建一個連接dept表,emp表的連接視圖 使用上述連接視圖,可以取得部門編號為10,30的部門及雇員信息。創(chuàng)建復(fù)雜視圖復(fù)雜視圖是指包含函數(shù),表達(dá)式或分組數(shù)據(jù)的視圖。復(fù)雜視圖主要用于執(zhí)行查詢操作,并不用于執(zhí)行DML操作。例:在emp表上創(chuàng)建一個復(fù)雜視圖。強(qiáng)制創(chuàng)建視圖正常情況下,如果基本表不存在,創(chuàng)建視圖就會失敗。但是如果創(chuàng)建視圖的語句沒有語法錯誤,只要使用FORCE選項就可以創(chuàng)建視圖。該試圖被稱為帶錯誤的視圖。此時該視圖處于失效狀態(tài)(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房產(chǎn)分割協(xié)議書范文
- 小學(xué)心理輔導(dǎo)與健康促進(jìn)年度工作計劃
- 心理健康咨詢機(jī)構(gòu)團(tuán)隊職責(zé)與管理架構(gòu)
- 三年級數(shù)學(xué)實驗活動實施計劃
- 廢棄藥品回收與處置流程
- 高三藝術(shù)班歷史知識復(fù)習(xí)與鞏固計劃
- 2025年可行性研究報告編制合同
- 發(fā)動機(jī)管理系統(tǒng)行業(yè)深度研究分析報告(2024-2030版)
- 八年級下冊歷史學(xué)習(xí)評估計劃
- 2025年制造業(yè)數(shù)字化轉(zhuǎn)型中的政策支持與保障體系研究
- DB22∕T 3181-2020 公路水路行業(yè)安全生產(chǎn)風(fēng)險分級管控和隱患排查治理雙重預(yù)防機(jī)制建設(shè)通用規(guī)范
- GB/T 36713-2018能源管理體系能源基準(zhǔn)和能源績效參數(shù)
- GB/T 25068.1-2020信息技術(shù)安全技術(shù)網(wǎng)絡(luò)安全第1部分:綜述和概念
- “二級甲等婦幼保健院”評審匯報材料
- 《狼王夢》讀書分享PPT
- 三年級美術(shù)下冊第10課《快樂的節(jié)日》優(yōu)秀課件1人教版
- 電力市場交易模式
- 第四課《單色版畫》 課件
- 門診手術(shù)麻醉原則課件
- 自動噴水滅火系統(tǒng)質(zhì)量驗收項目缺陷判定記錄
- 提高腸鏡患者腸道準(zhǔn)備合格率課件
評論
0/150
提交評論