2023年Orcale職業(yè)培訓(xùn)筆記_第1頁(yè)
2023年Orcale職業(yè)培訓(xùn)筆記_第2頁(yè)
2023年Orcale職業(yè)培訓(xùn)筆記_第3頁(yè)
2023年Orcale職業(yè)培訓(xùn)筆記_第4頁(yè)
2023年Orcale職業(yè)培訓(xùn)筆記_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

DayOl.s_emp、sdept表的字段含義first_name^>名last_name。姓tit1e。。職位dept_id。。部門(mén)號(hào)commission_pct。提成(有空值).列出所有人的年薪selectfirstname,salary*12froms_emp;.給列起別名selectfirst_name,sa1ary*12Ann_Sa1fromsemp;selectfirst_name,salary*12"AnnSalnfroms_emp;selectfirst_name,salary*12as"AnnSalnfroms_emp;.解決空值的函數(shù)nvl(p1,p2)nullOracle當(dāng)做無(wú)窮大來(lái)解決??罩挡坏扔???罩挡坏扔诳崭袼銛?shù)表達(dá)式中為空值,返回空值##亞洲地區(qū)有哪些員工?selecte.first_name,froms_empejoins_deptdone.dept_id=d.idjoins_regionrond.region_id=廿Asia';——一-一一一一-為什么where能代替and4.非等值連接##列出員工的工資以及相應(yīng)的工資級(jí)別?se1ecte.ename,e.sal,s.gradefromempejoinsalgradesone.sa1betweensJosalands.hisal;##SMITH的工資級(jí)別?selecte.ename,e.sa1,s.gradefromempejoinsaIgradesone.salbetweens.losa1ands.hisalande.ename='SMITH';##3,5級(jí)有哪些員工(哪些員工屬于3,5級(jí))?selecte.ename,e.sal,s.gradefromempejoinsa1gradesone.sa1betweens.1osalands.hisalands.gradein(3,5);5.自連接#列出員工名和領(lǐng)導(dǎo)名的相應(yīng)關(guān)系#結(jié)果為24個(gè),少一個(gè)manager_id為空的人(BOSS丟了)selecte.id,e.firstnameemp1ayee,m.id,m.firstnamemanagerfroms_empejoins_empmone.manager_id=m.id;#列出哪些人是領(lǐng)導(dǎo)?selectdistinetm.firstnamefroms_empejoins_empmonm.id=e.managerid;6.outerjoin外連接#內(nèi)連接fromtljoint2ontl.id=t2.id#fromtlleftouterjoint2ontl.id=t2.id。左邊的表做驅(qū)動(dòng)表#from11rightouterjoint2ontl.id=t2.icb右邊的表做驅(qū)動(dòng)表##外連接解決的問(wèn)題:驅(qū)動(dòng)表中的記錄在結(jié)果集中“一個(gè)都不少”##列出員工名和領(lǐng)導(dǎo)名的相應(yīng)關(guān)系?selecte.first_nameemployee,nv1(m.first__name/Boss')managerfroms_empe1eftouterjoins_empmone.manager_id=m.id;#如何寫(xiě)外連接:#先寫(xiě)出內(nèi)連接,再擬定哪張表當(dāng)驅(qū)動(dòng)表就可以#哪個(gè)部門(mén)沒(méi)有員工?14條記錄,少1條se1ecte.ename,e.deptnofromempejoindeptdone.deptno=d.deptno;#哪個(gè)部門(mén)沒(méi)有員工?15條記錄selecte.ename,e.deptno,d.deptno,d.dnamefromemperightjoindeptdone.deptno=d.deptno;#哪個(gè)部門(mén)沒(méi)有員工?15條記錄selectd.deptno,d.dname,e.ename,e.deptnofromemperightjoindeptdd.deptnoone.deptno二wheree.empnoisnul1;d.deptno#使用外連接解決了兩類(lèi)問(wèn)題:L把所有結(jié)果列出到結(jié)果集2.解決否認(rèn)問(wèn)題(不是,沒(méi)有,不包含)##那些人是員工?(即:那些人不是領(lǐng)導(dǎo)?)##思緒:##先解決那些人是領(lǐng)導(dǎo)##能匹配的是領(lǐng)導(dǎo)##把匹配不上的挑出來(lái)##se1ecte.firstname,m.firstnamefroms_emperightjoins_empmone.manager_id=m.id;##加條件seiecte.first_name,m.first_namefroms_emperightjoins_empmone.manager_id=m.idwheree.idisnu11;——一----——為什么用and會(huì)出現(xiàn)結(jié)果錯(cuò)誤????、/##最后列出m.firstname即可se1ectm.first_namefroms_emperightjoins_empmone.manager_id=m.idwheree.idisnu11;用and和where會(huì)得到不同的結(jié)果什么時(shí)候用and什么時(shí)候用whereAnd在外連接之前做過(guò)濾,where在外連接之后做過(guò)濾Where在得出結(jié)果以后過(guò)濾很重要?jiǎng)e把##selecte.ename,d.dnamefromemperightjoindeptdone.deptno二d.deptnoande.ename='SMITHf;##驅(qū)動(dòng)表的過(guò)濾所有寫(xiě)在where之后selecte.enameeename,d.dnamedenamefromemperightjoindeptdone.deptno=d.deptnoande.ename='SMITH';wheree.empnoisnull;##選擇leftjon或者rightjoin不重要,重要的是選擇哪張表做驅(qū)動(dòng)表ful1outjoin用的比較少組函數(shù)#組函數(shù):一堆數(shù)據(jù)返回的結(jié)果#max()#avg()#min()#avg()#求所有人的平均工資?##求所有人的平均提成?seiectavg(nv1(commission_pct,0))froms_emp;##count()解決的結(jié)果假如全為空值,結(jié)果返回0祥#計(jì)算有多少條記錄selectcount(id)froms_emp;##求按提成分組,計(jì)算人數(shù)?selectcommission_pct,count(id)froms_empgroupbycommission_pct;##counto函數(shù)中可以加入關(guān)鍵字seleetcount(tit1e)froms_emp;##等同于selectcount(alltitle)froms_emp;##把反復(fù)值去掉,再做記錄selectcount(distincttitle)froms_emp;#列出42號(hào)部門(mén)的平均工資#若有g(shù)roupby子句,se1ect后面可跟groupby后面跟的表達(dá)式以及組函數(shù),其他會(huì)報(bào)錯(cuò)。關(guān)于groupby選擇having還是whereWhere在分組之前過(guò)濾寫(xiě)在group之前效率高Having寫(xiě)在groupby之后在分組之后做過(guò)濾;se1ectdept_id,avg(salary)froms_empwheredept_id=42groupbydept_id;#若沒(méi)有g(shù)roupby子句,select后面有一個(gè)組函數(shù),其他都必須是組函數(shù)selectmax(dept_id),avg(salary)froms_empwheredept_id=42;作業(yè):insertintosa1gradeva1ues(6,10000,15000);#列出每個(gè)工資級(jí)別有多少員工?#列出3,5級(jí)有多少員工#列出每個(gè)工資級(jí)別有多少員工(若該級(jí)別沒(méi)有員工,也要列出)Day0311.子查詢(xún)#先執(zhí)行子查詢(xún);子查詢(xún)只執(zhí)行一遍#若子查詢(xún)返回值為多個(gè),Oracle會(huì)去掉反復(fù)值之后,將結(jié)果返回主查詢(xún)#誰(shuí)是受老板剝削工資最低的人?selectfirst_name,salaryfroms_empwheresalary=(se1ectmin(salary)froms_emp);#誰(shuí)跟SMITH的職位是同樣的?select1ast_name,tit1efroms_empwheretitle=(selecttitiefromsempwherelast_name=fSmith1)and1astname!=’Smith';##假如表中有反復(fù)值,如兩個(gè)'Smith',會(huì)報(bào)錯(cuò):#single-rowsubqueryreturnsmorethanonerow單行子查詢(xún)返回多行#修改為:in可以不????????????可以se1ect1ast_name,titlefroms_empwheretitle=any(selecttit1efroms_empwherelast_nameSmith')andlast_name!=’Smith';#哪些部門(mén)的平均工資比32部門(mén)的工資高?selectdept_id,avg(salary)froms_empgroupbydept—idhavingavg(salary)>(se1ectavg(salary)froms_empwheredept_id=32);#那些人是領(lǐng)導(dǎo)?子查詢(xún)selectfirst_namefroms_empwhereidin(selectmanager_idfroms_emp);##那些人是領(lǐng)導(dǎo)?表連接se1ectdistinctm.firstnamefroms_empmjoins_empeone.manager_id=m.id;##Ben的領(lǐng)導(dǎo)是誰(shuí)?子查詢(xún)selectfirst_namefromsempwhereid二(selectmanager_idfromsempwherefirstname='Ben');##Ben領(lǐng)導(dǎo)誰(shuí)?子查詢(xún)selectfirst_namefroms_empwheremanager_id=(selectidfroms_empwherefirst_name=7Ben*);##Ben的領(lǐng)導(dǎo)是誰(shuí)?表連接se1ectm.first_namefroms_empmJoins_empeone.first_name='Ben'ande.manager_id=m.id;##Ben領(lǐng)導(dǎo)誰(shuí)?表連接selecte.first_namefroms_empejoins_empmonm.firstname=,Benzande.manager_id=m.id;##selectfirstname,salary*12*(1+nvl(commission_pct,O)/100)fromsemp;.SQLPLUS命令:L列出上一次敲入的命令c1earscr或者!clear清屏.字段(列名)拼接。II字符串拼接"Oracle中字符和字符串用單引號(hào)表達(dá)””雙引號(hào)用于表達(dá)別名selectfirst_name|TfI|1astnameemployeefroms_emp;selectfirst_name|risintdepartmentfIIdept_id|IVfroms_emp;.去除反復(fù)值distinct##該公司有哪些職位?selectdistincttitiefroms_emp;##各個(gè)部門(mén)有哪些不同的職位?。##distinet的功能:部門(mén)號(hào)單獨(dú)反復(fù),職位單獨(dú)反復(fù),部門(mén)號(hào)和職位聯(lián)合不反復(fù)se1ectdistinctdept_id,tit1efromsemp;會(huì)報(bào)錯(cuò),由于distinct只能出現(xiàn)在select后面,否則會(huì)導(dǎo)致邏輯不通selectfirstnamefroms_empwhereidin(se1ectmanageridfroms_emp);##演示代碼##對(duì)n。tin來(lái)說(shuō),結(jié)果集中假如有nu£則整個(gè)結(jié)果集為n##結(jié)論:對(duì)notin來(lái)說(shuō),子查詢(xún)結(jié)果集中是不能有null的selectfirst_namefroms_empwhereidnotin(se1ectmanager_idfroms_emp);##查詢(xún)那些人是員工?se1ectfirstnamefroms_empwhereidnotin(selectmanager_idfroms_empwheremanager_idisnotnul1);##notin盡量不用.子查詢(xún)與空值##哪些部門(mén)的員工工資等于本部門(mén)員工平均工資?##多列selectfirstname,dept_id,sa1aryfroms_empwhere(dept—id,salary)in(selectdept_id,avg(sa1ary)fromsempgroupbydept_id);.關(guān)聯(lián)子查詢(xún).同表中一列相等一列比大小用關(guān)聯(lián)子查詢(xún)##哪些員工的工資比本部門(mén)的平均工資高?selectfirst_name,dept_id,sa1aryfromsempouterwheresa1ary>(selectavg(sa1ary)froms_empinnerwhereouter.dept_id=inner.dept_id);.常用的關(guān)聯(lián)子查詢(xún):EXISTSNOTEXISTS##找到即返回##哪些部門(mén)有員工?selectdnamefromdeptowhereexists(se1ect1fromempiwhereo.deptno=i.deptno);##那些人是員工?seiectfirst_namefroms_empawherenotexists(se1ect1froms_empbwherea.id=b.manager_id);總結(jié):子查詢(xún):非關(guān)聯(lián)。in/notin(不建議)關(guān)聯(lián)。exists(比innerjoin優(yōu)勢(shì))/notexist(即outerjoin+isnu11)IN和EXISTS的比較(非關(guān)聯(lián)和關(guān)聯(lián)子查詢(xún)的比較)標(biāo)量子查詢(xún)##列出員工名和領(lǐng)導(dǎo)名?se1ectfirst_nameemp1oyee,(se1ectfirst_namefromsempiwhereo.manager_id=i.id)Managerfroms_empo;CASEWHEN表達(dá)式##實(shí)現(xiàn)31部門(mén),32部門(mén)工資分別漲1.1倍和1.2倍?##假如沒(méi)有else返回空值selectfirst_name,salary,casewhendeptid=31thensalary*1.1whendept_id=32thensalary*1.2eIsesa1aryend。a1a_sa1froms_emp;##工資<1000漲300塊,1000〈工資V1500漲500,其別人不動(dòng)selectfirst_name,salary,caseewhensalary<1000thensa1ary+300whensa1ary>1000andsalary<1500thensalary+500elsesa1aryendoa1a_salfroms_emp;DECODE函數(shù)(等同于Casewhen)##decode(參數(shù)1,參數(shù)2,參數(shù)3滲數(shù)11滲數(shù)12,參數(shù)13???)##表達(dá)假如參數(shù)1的值為參數(shù)2則參數(shù)3;參數(shù)11的值為參數(shù)12則參數(shù)13...se1ectfirst_name,salary,decode(dept_id,319salary*1.1,32,sa1ary*1.2,33,salary*1.3,salary)aftsa1froms_emp;se1ectfirstnamefroms_empouterwherenotexists(select1froms_empinnerwhereinner.id=outer.manager_id);##列出所有員工selectfirstnamefroms_empouterwherenotexists(se1ect1fromsempinnerwhereouter.id=inner.manager_id);DayO4約束notnu11(非空約束)這是一個(gè)列級(jí)約束。在建表時(shí),在數(shù)據(jù)類(lèi)型的后面加上notnull,也就是在插入時(shí)不允許插入空值。createtablestudent(idnumberprimarykey,namevarchar2(32)notnull,addressvarchar2(32));primarykey(主鍵約束PK)保證記錄的主鍵唯一且非空,并且每一個(gè)表中只能有一個(gè)主鍵。foreignkey(外建約束FK)被引用的表,叫做parenttab1e(父表),引用方的表叫做childtable(子表),要想創(chuàng)建子表,就要先創(chuàng)建父表,后創(chuàng)建子表,記錄的插入也是如此,先父表后子表,刪除記錄,要先刪除子表記錄,后刪除父表記錄,要修改記錄,假如要修改父表的記錄要保證沒(méi)有被子表引用。要?jiǎng)h表時(shí),要先刪子表,后刪除父表。uniquekey(唯一鍵),值為唯一的,假如創(chuàng)建一個(gè)uk,系統(tǒng)自動(dòng)建一個(gè)唯一索引唯一約束,是會(huì)忽略空值的,唯一約束,規(guī)定插入的記錄中的值是為一的。ereatetablestudent(idnumber,namevarchar2(32),addressvarchar2(32),primarykey(id),unique(address));check約束檢查約束,可以按照指定條件,檢查記錄的插入。check中不能使用尾列,不能使用函數(shù),不能引用其他字段。createtablesal(alnumber,check(al>1000));primarykey約束(主鍵約束)第一種形式:createtabletest(cnumberprimarykey);第二種形式:createtabletest(cnumber,primarykey(c));表級(jí)約束createtabletest(c1numberconstraintspkc1primarykey);此約束有名字:pkclforeginkey(fk)外鍵約束:(先定義父表,再定義子表)caretetab1eparent(clnumberprimarykey);createtablechild(cnumberprimarykey,c2numberreferencesparent(cl));或表級(jí)約束定義:createtablechild(cnumberprimarykey,c2number,foreignkey(c2)referencesparent(c1));createtabletest(clnumberprimarykey);設(shè)立主鍵createtabletest(c1numberconstraintstest_clprimarykey);定義約束名,默認(rèn)約束名為SYS_在列后面定義約束稱(chēng)為列級(jí)約束createtabietest(clnumberprimarykey(c1));所有列定義完后再定義約束稱(chēng)為表級(jí)約束(能定義聯(lián)合主鍵)cretaetabletest(clnumber,c2number,priarykey(c1,c2));定義聯(lián)合主鍵createtablechild(clnumberprimarykey);先要定義父表createtablechild(c1numberprimarykey,c2numberreferencesparent(cl));然后定義子表referencesparent定義外鍵createtablechild(clnumberprimarykey,c2numberreferencesparent(cl)ondeletecascate);onde1etecascate為級(jí)聯(lián)刪除createtabiechild(clnumberprimarykey,c2numberreferencesparent(c1)ondeletesetnu11);onde1etesetnul1刪除后將外鍵置空createtablechild(c1numberprimarykey,c2number,foreignkey(c2)referencesparent(cl));兩表沒(méi)有任何關(guān)聯(lián)時(shí)會(huì)產(chǎn)生迪卡爾乘積:selectfirst_name,namefroms_emp,s_dept;insert操作,插入記錄(DML操作)insertintostudentvalue(l/xxx\fxxx');insertintostudent(id,name,address)value(1/xxx?xxx');注意:有空值的話(huà):隱式插入INSERTINTOs_dept(id,name)VALUES(12,'MIS7);不往想為空的字段中插數(shù)據(jù),系統(tǒng)默認(rèn)為NULL顯示插入INSERTINTOs_deptVALUES。(13,'Administration',NULL);select*froms_empwhere1=2;這樣選不出紀(jì)錄,方便察看表結(jié)構(gòu)update修改操作updatetab1e表名set字段名1二數(shù)據(jù)1或表達(dá)式1,字段名2=數(shù)據(jù)2或表達(dá)式2[whereupdateshenfenzhensetnum=99wheresid=2;delete刪除操作deletefrom表名[where..;用delete操作刪除的記錄可以通過(guò)rollback命令回滾操作,會(huì)恢復(fù)delete操作刪除的數(shù)據(jù)。delete操作不會(huì)釋放表所占用的空間,de1ete不適合刪除記錄多的大表。delete操作會(huì)占用大量的系統(tǒng)資源。altertab1e命令altertable命令用于修改表的結(jié)構(gòu)(這些命令不會(huì)經(jīng)常用):增長(zhǎng)字段:altertable表名add(字段字,字段類(lèi)型)刪除字段:a1tertbale表名dropcolumn字段;(8i以后才支持)給列改名:才支持aItertable表名renameco1umn舊字段名to新字段名;修改字段altertable表名modify(字段,類(lèi)型)(此時(shí)應(yīng)注意的問(wèn)題,更改時(shí)要看具體值情況之間的轉(zhuǎn)達(dá)換,改為字符類(lèi)型時(shí),必須要為空)notnu11約束是使用aItertable..modify(..,notnu11),來(lái)加上的。增長(zhǎng)約束:a1tertab1e表名addconstraint[約束名]約束(字段);只可以增長(zhǎng)表級(jí)約束。解除約束:(刪除約束)aItertabie表名drop約束;(對(duì)于主鍵約束可以直接用此方法,由于一張表中只有一個(gè)主鍵約束名,注意假如主鍵此時(shí)尚有其它表引用時(shí)刪除主鍵時(shí)會(huì)犯錯(cuò))altertablefatherdropprimarykeycascade;(假如有子表引用主鍵時(shí),要用此語(yǔ)法來(lái)刪除主鍵,這時(shí)子表還存在只是子表中的外鍵約束被及聯(lián)刪除了)aItertable表名dropconstraint約束名;selectdept_id,distinettitlefroms_emp;(X)列出表中所有字段##注意:寫(xiě)*會(huì)減少效率,公司中一般會(huì)嚴(yán)禁寫(xiě)*;select*fromsemp;Orac1e中寫(xiě)SQL大小寫(xiě)區(qū)別在功能上無(wú)影響性能上有影響##注意:寫(xiě)SQL,一般公司都有規(guī)范where控制子句##年薪大于L2w的員工的年薪?##假如salary字段上建了索引,第一種寫(xiě)法,索引用不上,所以慢selectfirst_name,sa1ary*12a_salfromsempwheresalary*12>12023;。##假如salary字段上建了索引,第二種寫(xiě)法,效率高些selectfirstname,salary*12a—salfroms_empwheresa1ary>1000;##會(huì)報(bào)錯(cuò),where子句后面不可以跟“列別名",where子句執(zhí)行在select語(yǔ)句之前selectfirst_name,salary*12asa1froms_empwhereasa1>12023;##EX.不會(huì)報(bào)錯(cuò),orderby子句可以使用“別名”(如何取一個(gè)約束名:a、人為的違反約束規(guī)定根據(jù)錯(cuò)誤信息獲??!b、查詢(xún)視圖獲取約束名!)使約束失效或者生效a1tertabie表名disablefromprimarykey;(相稱(chēng)于把一個(gè)表的主鍵禁用)altertable表名enableprimarykey;(enable時(shí)會(huì)自動(dòng)去檢查表的記錄是不是符合規(guī)定,假如有臟數(shù)據(jù)時(shí)必須要先刪除臟數(shù)據(jù)才可以enable)更改表名rename舊表名to新表名;刪除表:trucatetable表名;(表結(jié)構(gòu)還在,數(shù)據(jù)所有刪除,釋放表所占的空間,不支持回退,常用刪除大表)Day05今天的note不全,請(qǐng)自己補(bǔ)充.哪些列更適合做索引##表大,結(jié)果集小經(jīng)常出現(xiàn)在where子句的列經(jīng)常用于表連接的列主鍵列PK、唯一鍵列UKcreatetabletest(createuniqueindextest_cl_idxontest(c1);.新的建表語(yǔ)句createtab1etest01asselect*fromtest;.一些概念建索引的目的就是為了加快查詢(xún)速度。索引就相于一本的書(shū)的目錄。索引點(diǎn)系統(tǒng)空間,屬于表的附屬物。刪除一個(gè)表時(shí),相相應(yīng)的索引也會(huì)刪除。索引是會(huì)進(jìn)行排序。.查看表的rowid##每條記錄都有自己的rowidselectrowid,firstnamefroms_emp;.創(chuàng)建視圖creatingviews視圖名;視圖就相稱(chēng)于一條se1ect語(yǔ)句,定義了一個(gè)視圖就是定義了一個(gè)sql語(yǔ)句,視圖不占空間,使用view不會(huì)提高性能,但是能簡(jiǎn)樸化sql語(yǔ)句(擴(kuò)展知識(shí):oracle8i以后的新視圖)MV物化視圖(占存儲(chǔ)空間,把select結(jié)果存在一個(gè)空間,會(huì)提高查詢(xún)視圖,增強(qiáng)實(shí)時(shí)性,但是存在刷新問(wèn)題,物化視圖中的數(shù)據(jù)存在延遲問(wèn)題,重要應(yīng)用在數(shù)據(jù)倉(cāng)庫(kù)中用要用于聚合表)使用視圖的好處:控制數(shù)據(jù)訪(fǎng)問(wèn)權(quán)限。如何創(chuàng)建一個(gè)視圖的例子:createorreplaceviewstestviasse1ect*fromtest1wherecl=l;orrep1ace的意義,假如view存在就覆蓋,不存在才創(chuàng)建。force|noforce,基表存在是使用,不存在是則創(chuàng)建該表。此時(shí)往表testl(basetable基表)中插入數(shù)據(jù)時(shí):表中沒(méi)能變化,視圖中的數(shù)據(jù)發(fā)生改變從視圖中插數(shù)據(jù)時(shí)相相應(yīng)的表會(huì)發(fā)生改變:往視圖中插數(shù)據(jù)時(shí),會(huì)直接插進(jìn)基表中,查看視圖中的數(shù)據(jù)時(shí),相稱(chēng)于就是執(zhí)行創(chuàng)建時(shí)的select語(yǔ)句。限制對(duì)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn),簡(jiǎn)化查詢(xún)。簡(jiǎn)樸視圖:來(lái)自于單表,且Select語(yǔ)句中不能涉及函數(shù),能進(jìn)行DML操作。復(fù)雜視圖:來(lái)源于多張表,不能執(zhí)行DML操作。.刪除視圖dropviews視圖名.行列轉(zhuǎn)置問(wèn)題.子查詢(xún)還可以跟在from后面se1ecte.first_name,e.salary,a.asa1froms_empejoin(selectdept_id,avg(salary)asalfroms_empgroupbydept_id)aone.dept_id二a.dept_idande.sa1ary>a.asal;.Rownum##出現(xiàn)兩條記錄selectfirst_name,rownumfroms_empwhererownum<=2;#無(wú)記錄,由于rownum的特點(diǎn)是必須從1條記錄開(kāi)始找selectfirstname,rownumfroms_empwhererownumbetween4and9;##排名問(wèn)題:找出前N條記錄#找出工資最高的前10個(gè)人?se1ectrownum,firstname,sa1aryfrom(selectfirstname,salaryfroms_emporderbysalarydesc)whererownum<=10;#分頁(yè)問(wèn)題#找出第n條到第20條的記錄(先找出前20條記錄,再過(guò)濾掉前10條)#關(guān)鍵點(diǎn):給rownum起別名#越往后走越慢,這種做法效率較低selectrn,first_name,salaryfrom(selectrownumrn,first_name,salaryfromsempwhererownum<=20)wherernbetween11and20;10.(集合運(yùn)算)Union和UnionALL拼結(jié)果集##去重selectdeptnofromdeptunionselectdeptnofromemp;##不去重selectdeptnofromdeptuniona11selectdeptnofromemp;IL(集合運(yùn)算)intersect去重后的交集selectdeptnofromdeptintersectselectdeptnofromemp;.(集合運(yùn)算)minus。找出不包含的selectdeptnofromdeptminusse1ectdeptnofromemp;.Rename改名##改表名renameabctotestabc;##給列改名a1tertab1etestabcrenamecolumncltoc10;外延與復(fù)習(xí).查詢(xún)系統(tǒng)表##查詢(xún)本用戶(hù)下所擁有的所有表的表名selecttablenamefromusertables;.SQLPLUSSQLPLUS的buffer中會(huì)緩存最后一條sql語(yǔ)句.可以使用"/“來(lái)執(zhí)行這最后一條命令.可以使用edit命令來(lái)編輯最后一條sq1語(yǔ)句.L命令(1ist)(sqlp1us命令)可以顯示buffer中最后一條命令desc[表名]##sqlplus命令,注意他不是sq1語(yǔ)句,用于查看表的結(jié)構(gòu)。descript的縮寫(xiě)descs_emp;.將SQL語(yǔ)句寫(xiě)入指定的文獻(xiàn)spoola.1st.sq1腳本a)也就是在文獻(xiàn)中寫(xiě)有sql語(yǔ)句的文獻(xiàn),可以在sqlplus中運(yùn)營(yíng)b)引入sql腳本.sqlplus用戶(hù)名/密碼@sq1腳本.注意:在用戶(hù)名密碼輸入結(jié)束后一定要加空格然后再寫(xiě)@sql腳本.在腳本中最后一行寫(xiě)上“exit”,則運(yùn)營(yíng)完腳本以后,回到shell上.Oracle數(shù)據(jù)庫(kù)中的空表dual測(cè)試表selectsysdatefromdual;.單行函數(shù)1)字符函數(shù)字符是大小寫(xiě)敏感的轉(zhuǎn)小寫(xiě)lower(字段名)--其中的參數(shù)可以是一個(gè)字符串常量或是一個(gè)字段名轉(zhuǎn)大寫(xiě)upper(字段名)首字母大寫(xiě)initcap(字段名)字符串拼接concat(字段1,字段2)截取子串substr(字段名,起始位置,取字符個(gè)數(shù))dual表,是專(zhuān)門(mén)用于函數(shù)測(cè)試和運(yùn)算的,他只有一條記錄字符串拼接concat(......)求指定子串substr(…,起始位置,取字符個(gè)數(shù))可以使用“一”表達(dá)從右向左取,取的時(shí)候可以從左往友取。

例:selectsubstr(first_name,-2,2)subfroms_emp;(取后兩個(gè))selectsubstr(first_name,2,2)subfroms_emp;(取前兩個(gè))2)數(shù)值函數(shù)四舍五入round(數(shù)據(jù),保存小數(shù)點(diǎn)后幾位)可以用負(fù)數(shù)表達(dá)小數(shù)點(diǎn)前,0,表達(dá)小數(shù)點(diǎn)后第一位,也就是保存?zhèn)€位,表達(dá)個(gè)位(保存到十位)。例:seiectround(15.36,1)fromdual;截取數(shù)字函數(shù)trimc(數(shù)據(jù),保存的位數(shù)(小數(shù)點(diǎn)后位數(shù)))截取個(gè)位之后補(bǔ)0例:selecttrune(123.456,1)fromdua1;3)日期函數(shù)日期格式,全日期格式世紀(jì)信息,全日期格式世紀(jì)信息,全日期格式世紀(jì)信息,年月日,時(shí)分秒。缺省日期格式,日?月?年dd-mon—rr修改當(dāng)前會(huì)話(huà)的日期格式,會(huì)按照指定的格式輸出日期全日期格式世紀(jì)信息,年月日,時(shí)分秒。缺省日期格式,日?月?年dd-mon—rraltersessionsetnls_date_format='yyyymmddhh24:返回當(dāng)前日期sysdate例:se1ectsysdatefromdua1;se1ectsysdate+1fromdual;獲得明天的日期,加1,單位是天日期是格式敏感的求兩個(gè)日期間相隔了多少個(gè)月months_between(datel,date2)加減指定數(shù)量的月份add_months(date,月數(shù)),月數(shù)可認(rèn)為負(fù),負(fù)值就是減去相應(yīng)的月數(shù)。從date日期開(kāi)始的第一個(gè)星期五next_day(date,FriDay)返回月末的日期1ast_day(date)截取日期trunc(date,,年或月或日或時(shí)分秒,)例:selectnext_day(sysdate,2)fromdua1;例:se1ecttrunc(add_months(sysdate,1),'month*)fromdual;ROUND('25-MAY-95'MONTH')0^1-JUN-95ROUND(125-MAY-95YEAR)001-JAN~95TRUNC('25-MAY-95'「MONTH')01-MAY-95TRUNCC25-MAY-957/YEAR)01-JAN-95練習(xí):返回下個(gè)月的第一天的日期selectround(last_day(sysdate),'MONTH1)fromdual;selectadd_months(trunc(sysdate,'MONTH'),1);4)不同數(shù)據(jù)類(lèi)型間轉(zhuǎn)換函數(shù)將日期轉(zhuǎn)成字符toehar(datej日期格式,)selectfirst_name,sa1ary*12asa1froms_emporderbyasa1;注意:單引號(hào)中大小寫(xiě)敏感##歹1」出Carmen的年薪是多少?Selectfirst_name,salary*12a—salFroms_empWherefirstname='Carmen';大小寫(xiě)轉(zhuǎn)換函數(shù)“ower()upper()##列出Carmen的年薪是多少?selectfirstname,salary*12a_sa1froms_empwhere1ower(first_name)=fcarmen’;wheresalarybetween1000and1500;AND和betweenand連接符##找出員工工資在1000與1500之間selectfirst_name,sa1aryfroms_empwheresa1ary>=1000andsa1ary<=1500;##betweenand就表達(dá)了如上含義selectfirstname,salaryfroms_emp日期格式要用有效格式,格式大小寫(xiě)敏感'yyyymmddhh24:mi:ss\,year,(全拼的年)JmnT(數(shù)字表達(dá)的月)'month'(全拼的月),,day'(星期的全拼);ddspth'(日期的全拼),yymmdd'例:selectto_char(sysdate/yyyymmddhh24:mi:ssz)fromdual;將字符轉(zhuǎn)換成數(shù)字to_number(f...,)將數(shù)字轉(zhuǎn)字符to_char(numberjfmt,)fmt是數(shù)字格式將字符串轉(zhuǎn)成日期to_date(,??.':日期格式,)例:selectto_char(to_date('20231103'Jyyyymmddf),'dd-month?yy')fromdua1;OR連接符IN()表述形式=ANY()#找出31、41、43部門(mén)員工的姓名和部門(mén)號(hào)?selectfirst_name,dept_idfroms_empwheredept_id=31ordept_id=41ordept_id=43;#簡(jiǎn)樸的表述形式in()selectfirst_name,dept—idfroms_empwheredept_idin(31,41,43);#另一種表述形式in()相稱(chēng)于=any()se1ectfirstname,dept—idfromsempwheredept_id=any(31,41,43);##從連續(xù)區(qū)間中取值使用Between—And,從離散數(shù)值中取值用IN()LIKE運(yùn)算符SUBSTR()函數(shù)Length()函數(shù)(通配符:%表達(dá)0或多個(gè)字符;_表達(dá)任意單個(gè)字符)##效率高些where1astnamelike'M%'##結(jié)果等同如上wheresubstr(last_name,1,1)=fMf;##列出名字的最后兩個(gè)字母selectfirst_name,substr(first_name,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論