




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
TOC\o"1-5"\h\z\o"CurrentDocument"第一章SQL更新數據2\o"CurrentDocument"第二章序列4\o"CurrentDocument"第三章SQL查詢6\o"CurrentDocument"第四章ORACLE數據表對象15Selectmanager_namename,statusFromt_managersWherestatus='ACT'UnionallSelectemployee_name,statusFromt_employeesWherestatus=,ACT'Intersect查詢Intersect查詢用于獲得兩個結果集的交集。例selectemployee_name,statusFromt_employeesWherestatus='ACT'Intersectselectmanager_name,statusFromt_managersWherestatus='ACT'Minus查詢Minus查詢可以看做集合間的減法運算,該操作的第一個集合看做被減數,而第二個集合看作減數,那么minus操作將返回第一個結果集中存在,而第二個結果集中不存在的記錄例selectemployee_name,statusFromt_employeesWherestatus='ACT'MinusSelectmanager_name,statusFromt_managersWherestatus='ACT'IV.聯接聯接用于多數據源(表、視圖)之間如何組合,以形成最終的數據源。聯接對于查詢語句有著不可或缺的作用。如果未顯示指定聯接,那么將獲得多個數據源的笛卡爾積。Oracle中主要包括以下幾種聯接關系。自然聯接內聯接外聯接:左聯接外聯接:右聯接外聯接:完全聯接自然聯接自然聯接將兩個數據源中具有相同名稱的列進行聯接。用戶不必明確指定執行聯接的列。自然聯接應該使用naturaljoin關鍵字。例select*Fromt_employeesnaturaljoint_managers內聯接內聯接像自然聯接不同,需要在from子句中使用聯接條件。但是,用戶可以自行制定所要聯接的各數據源的列。這克服T自然聯接要求聯接必須同名的限制。例select*Fromt_employeeseinnerjoint_managersmOne.employee_name=m.manager_name內連接可以用where子句來代替外聯接一左聯接外聯接與內聯接不同的是,內聯接中的兩個數據源是并列關系,二者具有平等的地位,而外聯接將其中一個數據源指定為基表(或者說為主表)另一個數據源可以看做附表。在最終的數據源中,一定含有基表中的數據,而附表中的數據是否出現,那么依具體的聯接條件而定。左聯接例子selecte.employeejd,e.employee_name,s.salaryFromt_employeeseLeftouterjoint_salarysOne.employeejd=s.employee_idOrderbye.employee_id(當左側數據表中的數據在右側表中沒有記錄與之對應,將利用null來填補空缺的查詢結果)對于左聯接,oracle還提供了另外一種簡寫的方式一一在where子句條件中添加(+)來指定附表Selecte.employeejd,e.employee_name,salaryFromt_employeese,t_salarysWheree.employee_id=s.employee_id(+)Orderbye.employee_id外聯接一一右聯接右聯接與左聯接的執行過程非常相似,二者的區別在于基表的選擇。右聯接應該選擇使用right(outer)join關鍵字,而基表即處于該關鍵字右側的數據表selecte.employeejd,e.employee_name,s.salaryFromt_employeeserightouterjoint_salarysOne.employeeJd=s.employee_idOrderbye.employee_id外聯接一一完全聯接完全聯接實際是一個左聯接和右聯接的組合,即首先執行一個左聯接,然后執行一個右聯接,最后將兩個結果集執行union操作,從而獲得最終的數據源。例selecte.employeejd,e.employee_name,s.salaryFromt_employeesefulljoint_salarysOne.employeeJd=s.employee_idOrderbye.employee_id缺點:完全聯接開銷很大V.層次化查詢利用connectby進行層次化查詢例select*frommarketStartwithmarket_id=14Connectbypriorparent_market_id=market_idConnect指定的遞歸條件,可以像where子句中的條件一樣,使用and或者or等運算符來指定多個條件例select*frommarketStartwithmarketjd=14Connectbypriorparent_market_id=marketjdandinstr(market_name,洲)=0演示用connectby獲得所有中國市場的客戶信息。(具體看書)Select*frommarket_customerWheremarketjdin(SelectmarketjdfrommarketStartwithmarket_name='中國,Connectbypriormarketjd=parent_market_id)Sys_connect_by_path()函數的使用(具體看書316頁)第四章ORACLE數據表對象與其他數據庫不同,oracle數據庫的下一層邏輯結構并非數據表,而是表空間;每個數據表都屬于唯一的表空間。I.oracle表空間表空間是oracle的開創性理念,他是一個邏輯對象。使用表空間有以下好處:.防止磁盤空間突然耗竭的風險.規劃數據更靈活(類似于操作系統的文件夾功能).提高數據庫性能(訪問頻繁的數據表放入單獨的表空間).提高數據庫的安全性II.創立oracle表空間.Oracle表空間是一個邏輯概念,創立是需要指定物理文件,即實際數據分配磁盤空間。表空間的物理文件被稱為數據文件(datafile);與此同時,應同時指定數據文件的初始大小。創立一個名為USER1的表空間,其SQL語句如下:Createtablespaceuserldatafile'f:\database\oracle\user1_data.dbfsize20M?指定數據文件的可擴展性表空間設計理念靈活性的一個方面在于數據文件的可擴展性。當存儲在某個數據文件中的數據量超過了其初始大小時,數據文件可以進行自動擴展。要像實現該功能,在創立表空間時應該使用autoextend選項Createtablespaceuser2datafile'f:\database\oracle\user2_data.dbfsize20Mautoextendon要關閉自動擴展,可以將autoextend選項的值設為“off”?指定數據文件的增長幅度數據文件默認每次增長64K,當頻繁增長時,可以使用next選項設定數據文件自動增長的幅度例createtablespaceuser3datafile'f:\database\oracle\user3_data.dbfsize20MAutoextendonnext5M數據文件的大小和自動增長的幅度單位只有KB和MB兩種。.指定數據文件的最大尺寸數據文件可以自動增長,但是無限制的增長往往帶來風險。很多情況下,某臺服務器上可能同時運行著多個系統,如郵件服務器和數據庫服務器可能為同一臺機器。,,因此除非特殊需要,應為每個表空間的數據文件設定最大尺寸。應使用maxsize選項Createtablespaceuser4datafile'f:\datafile\oracle\user4_data.dbfsize20MAutoextendonnext5mmaxsizeunlimited這里unlimited作用是不限制最大尺寸。.查看表空間是否創立成功表空間成功創立后,會在數據庫系統表中添加相應的記錄,并且創立相應的物理文件。可以通過查看視圖dba_data_files中的記錄和實際數據文件存在性,來判斷表空間是否創立成功Selectfile_name,tablespace_namefromdba_data_filesorderbyfile_name,為一個表空間創立多個數據文件.一個表空間可以有多個數據文件,為一個表空間創立多個數據文件需要指定多個數據文件的完整路徑和詳細的選項參數。各數據文件之間使用分隔。例selecttablespacemultiple_data_filedatafile'f:\database\tmp\data_1.dbfsizeIM,'f:\database\tmp\data_2.dbfsize5MIII.查看表空間Dba_tablespaces可以用來查看所有表空間的基本信息;而dba_data_files可以用來查看相關數據文件的信息。查看表空間信息,可以利用如下SQL語句:Selecttablespace_name,status,allocation_typefromdba_tablespacesW,修改數據庫默認表空間查詢每個用戶的默認表空間,可以使用如下SQL語句:Selectuser_id,username,default_tablespacefromdba_users修改數據庫默認的表空間的SQL語句如下:Alterdatabasedefaulttablespaceuserl.修改表空間名稱修改表空間名稱使用rename命令Altertablespaceuser2renametouser20表空間重命名并不對數據文件產生影響,需要注意的是,不能對數據的系統表空間進行重命名,例如SYSTEM,SYSAUX等無法進行重命名。.刪除表空間刪除表空間的命令為droptablespaceo刪除表空間有兩種方式,一種是僅僅刪除其在數據庫中的記錄,另一種是將記錄和數據文件一起刪除。僅刪除其在數據庫中的記錄的SQL語句如下:Droptablespaceuser20刪除表空間及其數據文件的SQL語句如下:Droptablespaceuser20includingcontentsanddatafiles.創立oracle數據表利用命令創立數據表例createtablet_user(user_idnumbernotnull,user_namevarchar2(20)notnull,user_emailvarchar2(30))利用命令查看表結構Selecttable_name,tablespace_namefromuser_tableswheretable_name=,t_user'視圖user_tables可以用來查看所有用戶表的基本信息。可以在SQLPlus或PL/SQLDeveloper的[CommandWindow]執行如下SQL語句來查看數據表信息Describetuser;.修改oracle數據表結構利用命令修改數據表結構修改數據表結構的SQL命令為altertable可以利用RENAME選項,對列名進行修改例altertablet_userrenamecolumnuser_emailtoemail列更名時,不會影響數據庫中的記錄;但注意不能將列名更新為與其他已存在列名相同。可以利用modify選項對列的屬性進行修改,以修改USER_NAME的長度為例,相應的SQL語句如下:Altertablet_usermodify(user_namevarchar2(15))Oracle允許一次修改多個列屬性。例altertablet_usermodify(user_namevarchar2(15),emailvarchar2(30))使用altertable命令同樣可以為表添加一列例altertablet_useradd(remarksvarchar2(50))刪除表中的操作使用drop選項第一章SQL更新數據I.插入數據一.Insert語句向表中插入數據.為所有列顯示賦值Insertintopeoplevalues(people_seq.nextval,1,'ACT');.同時指定要插入的列名列表和列值列表Insertintotable_name(column1,column2,...)values(value1,value2二.利用子查詢批量插入數據此時的SQL語句除了包含insertinto命令之外,還應包含一個查詢語句,其語法規那么如下:Insertintotable_nameselect...例:insertintopeopleselectemployeejd,employee_name,statusfromt_employeeswhereemployee_id>=3;n.修改數據Update修改數據一般有以下幾種情況:直接修改單列的值,直接修改多列的值、利用where子句限制修改范圍和利用視圖修改數據。L修改單列的值updatetable_namesetcolum=value例updatepeoplesetstatus='CXL';例altertablet_userdropcolumnremarkAvertable命令除了對列進行修改外,還可以對表本身的屬性進行修改。例如,利用rename選項修改表名Altertablet_userrenametot_users(注意,不要輕易修改表名).刪除數據表刪除數據表的命令為droptable例droptablet_dropDroptable和delete命令的區別:droptable用于刪除數據表,一旦刪除,該數據表在數據庫中將不再存在,而delete那么用于刪除數據表的記錄,無論記錄有無,數據表仍然是存在的。有時,某些數據表的列被其他表引用,如外鍵引用,直接使用droptable將無法刪除該表。此時,需要使用cascadeconstraints選項。例droptablet_dropcascadeconstraintscascadeconstraints表示刪除表時,將一起作用于約束。,備份/恢復數據表數據表的備份和恢復是最常用的數據庫操作,數據表的備份主要用于以下場合修改數據表結構之前修改數據表的數據之前刪除某個數據表之前利用命令備份/恢復數據表對于oracle數據表的備份/恢復操作,最常用的命令為exp和impoExp命令實現導出操作,imp實現導入操作。使用exp導出表T_USERS的步驟如下Expsystem/abc123@testtables=(T_USERS)file=D:\temp\command\T_USERS.dmp使用imp導入數據表的步驟如下所示:Impsystem/abc123@testfile=D:\temp\command\T_USERS.dmptables=T_USERS注意,tabi6s參數是必需的,而且要與導出時的表名保持一致.臨時表Oracle使用createtable命令創立的數據表稱為永久表或普通表。在oracle中還有另外一種特殊的數據表臨時表。臨時表指的是所存儲的數據的臨時性,臨時表雖然一直存在,但是其中的數據會在某種條件下被oracle數據庫自動清空。臨時表數據清空的條件有兩種,一種是事物提交或回滾;二是會話結束。創立臨時表應該使用createglobaltemporarytable命令創立名為tmp_users_session的會話級臨時表。Createglobaltemporarytabletmp_users_session(userjdint,user_namevarchar2(20),user_emailvarchar2(30))oncommitpreserverows創立事務級臨時表例createglobaltemporarytabletmp_users_transaction(user_idint,user_namevarchar2(20),user_emailvarchar2(30))oncommitdeleterowsVII.特殊的表dual第五章約束—.主鍵約束主鍵約束可以保存數據完整性,即防止數據表中的兩條記錄完全相同,通過將主鍵納入查詢條件,可以到達查詢結果最多返回一條記錄的目的。.創立主鍵約束Createtablestudent(studentjdnumberprimarykey,student_namevarchar2(20),student_birthdaydate,student_addressvarchar2(50),student_phonevhar2(20))查看約束Selecttable_name,constraint_name,constraint_type,statusfromuser_constraintswheretable_name="STUDENT'演示獲得主鍵的作用列Selectconstraintname,tablename,columnnamefromuser_cons_columnswhereconstraint_name='SYS_C00512r創立表時顯示命名主鍵Createtablestudent(studentjdnumberconstraintpk_studentprimarykey,student_namevarchar2(20),student_brithdaydate,student_addressvarchar2(50),student_phonevarchar2(20))創立主鍵的另一種寫法Createtablestudent(studentjdnumber,student_namevarchar2(20),student_birthdaydate,student_addressvarchar2(50),student_phonevarchar2(20)constraintpk_studentprimarykey(student_id))在student_name,student_birthday,student_address三列上創立主鍵約束。Createtablestudent(student_idnumber,student_namevarchar2(20),student_birthdaydate,student_addressvarchar2(50),student_phonevarchar2(20),constraintpk_studentprimarykey(student_name,student_birthday,student_address)).修改表的主鍵約束為已存在的表創立主鍵Altertablestudentmodify(studentJdnumberprimarykey)當要添加的主鍵作用于多個列時,可以通過添加主鍵命令,而不是通過修改列的屬性來添加主鍵。例altertablestudentaddconstraintpk_studentprimarykey(student_name,student_birthday,student_address)刪除主鍵Altertablestudentdropprimarykey利用刪除約束的語法刪除主鍵Altertablestudentdropconstraintpk_student列status標識了約束的可用性演示禁用主鍵約束Altertablestudentdisableprimarykey啟用主鍵約束的SQL語句如下:Altertablestudentenableprimarykey重命名主鍵AltertablestudentrenameconstraintSYS_C005145toPK_STUDENT.利用update命令同時修改多列的值。Updatetable_namesetcolum1=value1,colum2=value2updatepeoplesetid=(20000+id),status='ACT";.利用where了,句限制修改范圍例updatepeoplesetstatus='CXL'whereid>20010;m.刪除數據Delete命令刪除表中的某些記錄,truncate命令的作用是刪除整個數據表。語法規那么deletefromtable_namewhere例deletefrompeoplepwhereexists(select1fromt_employeesewheree.employee_name=)Truncate命令的語法規那么Truncatetabletable_name例truncatetablepeopleDDL不能回滾,DML可以回滾回滾命令:rollback提交命令:commit第二章序列I.創立序歹|J使用createsequence命令例createsequenceemployee_seq序列有兩個重要屬性cuirval和nextvaLCuirval用于獲得序列的當前值,nextval用于獲得序列的下一個值。每次調用nextval,都會使序列的當前值增加單位步長(默認步長為l)o序列的調用方法為seq.currval和seq.nextval。但是,需要注意的是,在序列創立之后,應該首先使用seq.nextval,然后才能使用seq.currvalo使用方法:Selectemployee_seq.nextvalfromdualSelectemployee_seq.currvalfromdual向表中插入新的員工信息:Insertintot_employeesvalues(employee_seq.nextval;陸遜\O「ACT);刪除序列:Dropsequenceemployee_seq創立序列,并指定startwith選項:Createsequenceemployee_seqstartwith12n.修改序列屬性修改minvalue和maxvalue的值Altersequenceemployee_seqminvalue20;Altersequenceemployee_seqmaxvalue99999;設置maxvalue值為無限Altersequenceemployee_seqnomaxvalue;利用alter命令修改步長為5:Altersequencetest_seqincrementby5;III.修改cycleCycle選項用于指定序列在獲得最大值的下一個值時,從頭開始獲取,這里的頭即為minvahie指定的值。修改序列test_seq為可循環Altersequencetest_seqcycle;關閉可循環Altersequencetest_seqnocycle;Cache是序列緩存,其實際意義為,每次利用nextval,并非直接操作序列,而是一次性獲取多個值的列表到緩存。使用nextval獲得的值,實際是從緩存抓取。抓取的值依賴于序列的cuiral和步長incrementby。緩存的值(在這里,即容量20)必須小于一次循環所能獲得的數目。Cache的存在會對其他修改其他選項產生影響。第三章SQL查詢I.基本查詢例selectemployee_namefromt_employees;當from子句中含有多個數據源時,這些數據源將實現笛卡爾積。Where子句Where子句用于過濾from子句所獲得的數據源。例selecte.employee_id,e.employ_name,s.salaryfromt_employeese,t_salarysWheree.employee_id=s.employee_id(當from子句中含有多個數據表或其他數據源時,為各數據表指定別名是一個良好的習慣,即使select語句所要捕獲的列不會引起列名的混淆。)利用distinct獲得唯一性記錄,被distinct限制的既可以是單個列,也可以是多個列的組合。演示利用distinct關鍵字獲得工資表中的所有月份Selectdistinctmonthfromt_salary可以獲得員工的工資的唯一性記錄,以表現員工的工資變化:Selectdistincte.employee_name,s.salaryFromt_employeee,t_salarysWheree.employeejd=s.employee_id此語句捕獲唯一的employee_name和salary的組合。Orderby子句Orderby子句可以將查詢結果按照一定的順序進行排序。Selectdistincte.employee_name,s.salaryFromt_employeee,t_salarysWheree.employee_id=s.employeeJdOrderbys.salary默認進行升序排列。升asc降desc例orderbys.salarydescGroupby子句Groupby子句用于對記錄集合進行分組,一旦使用了分組之后,select語句的真實操作目標即為各個分組數據,每次循環處理的也是各個分組,而不再是單條記錄。Selecte.employee_name,sum(s.salary)Fromt_employeee,t_salarysWheree
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CAPE 12004-2022草酸二甲酯加氫制備乙二醇催化劑
- 家政服務收費管理制度
- T/CAEA 0013-2022新語境教育師資技能等級與培訓標準
- 危險廢物聯防聯控協議書
- 施工押金債權轉讓協議書
- 斷絕債務財產關系協議書
- 墊付資金股權轉讓協議書
- 小區廠房拆除補償協議書
- 委托生產合同終止協議書
- 人力專員績效計劃協議書
- GB/T 21618-2008危險品易燃固體燃燒速率試驗方法
- 西安市非學歷培訓機構公示表
- QTZ1000塔機總體方案和平頭式平衡臂結構設計及起升機構校核計算
- 蓋梁穿心鋼棒法受力分析計算書
- T∕CAME 27-2021 醫院物流傳輸系統設計與施工規范
- YY∕T 1849-2022 重組膠原蛋白
- 三平寺簽詩解全75首上
- (高清版)《預應力筋用錨具、夾具和連接器應用技術規程》JGJ85-2010
- 后張法預應力空心板梁施工方案
- 師德師風年度考核表
- 健康險產說會課件
評論
0/150
提交評論