ORACLE數(shù)據(jù)庫(kù)教程.ppt_第1頁(yè)
ORACLE數(shù)據(jù)庫(kù)教程.ppt_第2頁(yè)
ORACLE數(shù)據(jù)庫(kù)教程.ppt_第3頁(yè)
ORACLE數(shù)據(jù)庫(kù)教程.ppt_第4頁(yè)
ORACLE數(shù)據(jù)庫(kù)教程.ppt_第5頁(yè)
已閱讀5頁(yè),還剩34頁(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)介

1、ORACLE數(shù)據(jù)庫(kù)教程,你可以不知道,但是絕對(duì)不能不懂,-毀人不倦語(yǔ)錄,2007年5月,SQL基礎(chǔ)知識(shí)篇,SQL-001,簡(jiǎn)介,SQL(Structured Query Language)結(jié)構(gòu)化查詢(xún)語(yǔ)言是IBM公司San Jose實(shí)驗(yàn)室為System R而設(shè)計(jì)的查詢(xún)語(yǔ)言,后被國(guó)際標(biāo)準(zhǔn)化組織(ISO)批準(zhǔn)作為關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言的國(guó)際標(biāo)準(zhǔn)。 SQL目前遵循的是1992年標(biāo)準(zhǔn),即SQL-92。 各數(shù)據(jù)庫(kù)廠家對(duì)SQL-92標(biāo)準(zhǔn)均有擴(kuò)充,擴(kuò)充部分不能完全保證數(shù)據(jù)庫(kù)之間的兼容性。,我的熱情會(huì)灼傷一些人,但我是無(wú)心的,-毀人不倦語(yǔ)錄,簡(jiǎn)介,SQL可以分為: (基礎(chǔ)篇只介紹前兩種) DML:數(shù)據(jù)操作語(yǔ)言(Data

2、 Manipulation Language): select, insert, update, delete, (其他:truncate) DDL:數(shù)據(jù)定義語(yǔ)言 (Data Definition Languages): create, drop , alter,(其他:rename) DCL數(shù)據(jù)控制語(yǔ)言:grant、revoke、set role 事務(wù)控制:commit、rollback、savepoint(其他:lock table、set constraint(s)、set transaction) 審計(jì)控制:audit、noaudit 系統(tǒng)控制:alter system 會(huì)話(huà)控制:al

3、ter session 其他語(yǔ)句:comment(添加注釋?zhuān)?、explain plan、analyze、validate、call,如果我的話(huà)沒(méi)有錯(cuò),一定是你聽(tīng)錯(cuò)了,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)定義語(yǔ)言,CREATE(建立) ALTER(修改) DROP(刪除),無(wú)知者無(wú)畏,無(wú)畏者不一定無(wú)知,-毀人不倦語(yǔ)錄,語(yǔ)言描述約定, :表示可選項(xiàng) | :表示選擇項(xiàng) CREATE:粗體表示關(guān)鍵字或必輸項(xiàng) Table_name:斜體表示用戶(hù)輸入項(xiàng) 創(chuàng)建 :藍(lán)色表示說(shuō)明,如果1+12,我相信那說(shuō)的是團(tuán)隊(duì)的力量,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)定義語(yǔ)言,CREATE-創(chuàng)建用戶(hù) CREATE USER user_name

4、 IDENTIFIED BY password DEFAULT TABLESPACE tablespace_name TEMPORARY TABLESPACE tablespace_name; 創(chuàng)建user_name用戶(hù),密碼為password,使用tablespace_name表空間,如果沒(méi)有指定表空間,默認(rèn)表空間為system表空間。Oracle10g有用戶(hù)默認(rèn)表空間設(shè)置。 建議在創(chuàng)建用戶(hù)時(shí)一定要指名表空間。,先有雞,還是先有蛋,這么重要的問(wèn)題還是留給雞去考證吧,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)定義語(yǔ)言,CREATE-創(chuàng)建數(shù)據(jù)表 CREATE TABLE table_name( Column1

5、datatype defaultnot null primary key, , constraint key_name primary key(column_list) using index tablespace tablespace_name )tablespace tablespace_name; Datatype 是數(shù)據(jù)類(lèi)型:varchar2(x), number(x,x), date, integer等。 Not null非空限制,如果不寫(xiě)表示可為空。 Primary key主鍵,可以緊跟在字段后,或在最后使用constraint。 未指名表空間,數(shù)據(jù)表建立在用戶(hù)默認(rèn)的表空間中。,筆

6、只留下了痕跡,人用筆留下了文化,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)定義語(yǔ)言,CREATE-創(chuàng)建索引 CREATE UNIQUE INDEX index_name ON table_name(column_list)tablespace tablespace_name; 在table_name表上按照column_list建立索引,索引名為index_name,索引保存在tablespace_name表空間中。 UNIQUE:唯一性索引。,-毀人不倦語(yǔ)錄,你可以不聽(tīng),但是我一定要說(shuō),DDL數(shù)據(jù)定義語(yǔ)言,ALTER-修改表 ALTER TABLE table_name RENAME TO new_tabl

7、e_name; 將table_name表名修改為new_table_name。 ALTER TABLE table_name ADD(column1 datatype default not null,column2 datatype default not null, . ); 在table_name表中增加column1,column2.字段,追加到字段最后。 ALTER TABLE table_name MODIFY(column1 datatype default not null|nullable,column2 datatype default not null|nullable,

8、 . 修改table_name表字段屬性,長(zhǎng)度或精度不能小于原長(zhǎng)度或精度。 ALTER TABLE table_name DROP COLUMN column_name; 刪除table_name表中的column_name字段。 ALTER TABLE table_name RENAME COLUMN old_name TO new_name; 修改table_name表的old_name字段名為new_name。 ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY(column_list); 建立table_name表的主鍵,

9、主鍵名pk_name,主鍵字段column_list。 ALTER TABLE table_name DROP CONSTRAINT pk_name; 刪除table_name表的pk_name主鍵。一個(gè)表只能有一個(gè)主鍵,-毀人不倦語(yǔ)錄,不說(shuō)了,再說(shuō)就該吐了。補(bǔ)充一點(diǎn):站著進(jìn),扶著出也許是侃爺?shù)淖罡呔辰绨?DDL數(shù)據(jù)定義語(yǔ)言,DROP -刪除 DROP TABLE table_name; 刪除table_name表。 DROP INDEX index_name; 刪除index_name索引。 刪除主鍵(強(qiáng)制限制的一種),使用ALTER TABLE table_name DROP CONSTR

10、AINT pk_name;,-毀人不倦猜想,數(shù)據(jù)庫(kù)和水庫(kù)之間不可能沒(méi)有區(qū)別,DML小結(jié),從ALTER和CREATE及DROP語(yǔ)法數(shù)量再一次證明需求是易變的。 如果增加表字段,并要求字段的排列位置,可以使用: CREATE TABLE temp_table_name AS SELECT * FROM table_name; DROP TABLE table_name; CREATE TABLE table_name(column); INSERT INTO table_name VALUES(column_list) (SELECT column_list1 FROM temp_table_na

11、me); DROP TABLE table_name; 需要注意的是,刪除表后,表中的索引也被刪除,所以,在執(zhí)行上述操作前要保留好表的索引腳本。 這里沒(méi)有寫(xiě)DROP DATABASE的語(yǔ)法,如果大家想要嘗試刪除數(shù)據(jù)庫(kù)的話(huà),最好在專(zhuān)家的指導(dǎo)下進(jìn)行!,人間本無(wú)對(duì)錯(cuò),因?yàn)橛?jì)算機(jī)才有了對(duì)與錯(cuò),-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECT(查詢(xún)) INSERT(插入) UPDATE(更新) DELETE(刪除),如果老天能再給我一次機(jī)會(huì),我一定做甲方,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECT-查詢(xún) SELECT ALL | DISTINCT ON ( expression , . ) * |

12、 expression AS output_name , . INTO TEMPORARY | TEMP TABLE new_table FROM from_item , . WHERE condition GROUP BY expression , . HAVING condition , . UNION | INTERSECT | EXCEPT ALL select ORDER BY expression ASC | DESC | USING operator , . FOR UPDATE OF class_name , . LIMIT count | ALL OFFSET | , sta

13、rt 后續(xù)查詢(xún)范例均以oracle中的SCOTT/TIGER用戶(hù)表為例,如果失眠了,就看看上面的語(yǔ)法吧,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SCOTT/TIGER表介紹 DEPT部門(mén)定義表,DEPTNO是主鍵 EMP職工表,EMPNO主鍵,DEPTNO外鍵關(guān)聯(lián)DEPT 其他表沒(méi)有數(shù)據(jù)或沒(méi)有關(guān)系,不在這里介紹,將復(fù)雜問(wèn)題簡(jiǎn)單化是修養(yǎng),將簡(jiǎn)單問(wèn)題復(fù)雜化是藝術(shù),綜合起來(lái)叫藝術(shù)修養(yǎng),-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECT-單表查詢(xún) 查詢(xún)表中所有字段和所有記錄,select后跟* 表示所有字段 SELECT * FROM DEPT; 查詢(xún)指定字段,在select后跟查詢(xún)的字段名列表,字段間用,

14、隔開(kāi) SELECT DEPTNO, DNAME FROM DEPT; 條件查詢(xún),F(xiàn)ROM后面使用WHERE,在WHERE中可以使用=, , ,=,=,BETWEEN,LIKE,IN,返回WHERE條件為true的數(shù)據(jù) SELECT * FROM DEPT WHERE DEPTNO = 20; -返回部門(mén)編碼為20的部門(mén)數(shù)據(jù) SELECT * FROM DEPT WHERE DEPTNO BETWEEN 20 AND 30; -返回部門(mén)編碼在20到30之間的部門(mén)數(shù)據(jù)(包括20和30),同意的從門(mén)出去,反對(duì)的請(qǐng)走窗戶(hù),-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECT-單表查詢(xún) SELECT * F

15、ROM DEPT WHERE DNAME LIKE ACCOUNT%; -返回部門(mén)名稱(chēng)以ACCOUNT開(kāi)始的部門(mén)數(shù)據(jù) SELECT * FROM DEPT WHERE DNAME LIKE %UNT%; -返回部門(mén)名稱(chēng)含UNT的部門(mén)數(shù)據(jù),%全匹配符,?單匹配符 SELECT * FROM DEPT WHERE DEPTNO IN (20, 30) AND (DNAME LIKE %UNT% OR DNAME = SALES); -返回部門(mén)編碼等于20和30并且部門(mén)名稱(chēng)含UNT或等于SALES的部門(mén)數(shù)據(jù),AND與,OR或,IN和(等同OR),知識(shí)可以拷貝,思想無(wú)法復(fù)制,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)

16、操作語(yǔ)言,SELECT-多表查詢(xún) 在FROM中列舉表名,WHERE中寫(xiě)表關(guān)聯(lián) SELECT EMP.EMPNO, EMP.ENAME, EMP.JOB, DEPT.DEPTNO, DEPT.DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO AND DEPT.DEPTNO = 20; -字段名前使用表名.指定表字段,在WHERE中先寫(xiě)表關(guān)聯(lián)關(guān)系,從FROM的內(nèi)側(cè)(即左側(cè))向外側(cè)寫(xiě)(即右側(cè)),表關(guān)聯(lián)寫(xiě)完后再寫(xiě)查詢(xún)條件,不要把表管理和查詢(xún)條件混在一起寫(xiě),這雖然不是必須的,但卻是規(guī)范推薦的。 SELECT E.EMPNO AS 職工編碼, E.EN

17、AME 姓名, E.JOB, D.DEPTNO, D.DNAME FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND D.DEPTNO = 20; -字段和表名可以使用別名,方法為 AS 別名,或直接寫(xiě)別名,表如果指定別名,原表名在該查詢(xún)中不能再被使用。,淹死的都是會(huì)游泳的,累死的都是能干的,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECT-Joins(連接) 語(yǔ)法 T1 NATURAL INNER | LEFT | RIGHT | FULL OUTER JOIN T2 ON search condition | USING ( join colu

18、mn list ) 一個(gè)條件 JOIN 必須通過(guò)提供一個(gè)(并且只能有一個(gè)) NATURAL,ON,或者 USING 這樣的關(guān)鍵字來(lái)聲明它的 連接條件 ON 子句 接受一個(gè) search condition, 它與一個(gè) WHERE 子句相同USING 子句接受一個(gè)用逗號(hào)分隔的 字段名列表,連接表中必須都有這些字段, 并且用那些字段連接這些表。 NATURAL 是 USING 子句的縮寫(xiě),它列出兩個(gè)表中所有公共 的字段名字。 對(duì)于所有 JOIN 而言,INNER 和 OUTER 都是可選的INNER 是缺省 LEFT,RIGHT和 FULL 只用于 OUTER JOIN。,DDL數(shù)據(jù)操作語(yǔ)言,SE

19、LECTINNER JOIN 內(nèi)連接 對(duì)于T1的每行R1,連接成的表在T2里都有一行滿(mǎn)足與R1的連接條件。 SELECT EMP.EMPNO, EMP.ENAME, EMP.JOB, DEPT.DEPTNO, DEPT.DNAME FROM EMP JOIN DEPT USING (DEPTNO); 結(jié)果同: SELECT EMP.EMPNO, EMP.ENAME, EMP.JOB, DEPT.DEPTNO, DEPT.DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO INNER JOIN完全可以寫(xiě)成WHERE子句,重復(fù)兩遍后你就應(yīng)該把他變

20、為程序,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECTOUTER JOIN 外連接 LEFT OUTER JOIN 首先執(zhí)行一次INNER JOIN,然后,如果T1里有一行對(duì)任何 T2 的行都不滿(mǎn)足連接條件,那么返回一個(gè)連接行,該行的T2的字段為null。 左表數(shù)據(jù)全部返回,右表無(wú)對(duì)應(yīng)數(shù)據(jù)返回NULL。 Oracle也可以寫(xiě)成:WHERE EMP.DEPTNO = DEPT.DEPTNO (+) RIGHT OUTER JOIN 首先執(zhí)行一次INNER JOIN,然后,如果T2里有一行對(duì)任何T1的行都不滿(mǎn)足連接條件,那么返回一個(gè)連接行,該行的T1的字段為null。 右表數(shù)據(jù)全部返回,左表無(wú)對(duì)

21、應(yīng)數(shù)據(jù)返回NULL。 Oracle也可以寫(xiě)成:WHERE EMP.DEPTNO (+) = DEPT.DEPTNO FULL OUTER JOIN 首先執(zhí)行一次INNER JOIN,然后,如果T1里有一行對(duì)任何T2的行都不滿(mǎn)足連接條件,那么返回一個(gè)連接行,該行的T1的字段為null。 同樣,如果T2里有一行對(duì)任何T1的行都不滿(mǎn)足連接條件,那么返回一個(gè)連接行,該行的T2的字段為 null。 兩個(gè)表數(shù)據(jù)全部返回,相互之間沒(méi)有對(duì)應(yīng)數(shù)據(jù)返回NULL。,三分技術(shù),七分管理,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECT-DISTINCT 取差異數(shù)據(jù),在SELECT查詢(xún)列表中只返回有差異的結(jié)果集。 SE

22、LECT-統(tǒng)計(jì)函數(shù) 統(tǒng)計(jì)操作(AVG,COUNT,SUM,MIN,MAX)以表達(dá)式為參數(shù)。 滿(mǎn)足 WHERE 子句的行均被計(jì)算, 通常,一個(gè)聚集對(duì)整個(gè) SELECT 語(yǔ)句 生成一個(gè)計(jì)算結(jié)果。如果在一個(gè)查詢(xún)里面聲明了分組, 那么數(shù)據(jù)庫(kù)將對(duì)每個(gè)組進(jìn)行一次獨(dú)立的計(jì)算。 SELECT-分組操作 SQL 使用GROUP BY 實(shí)現(xiàn)查詢(xún)結(jié)果的分組,GROUP BY 后面跟著字段列表,字段列表值均相同的記錄成為一組。 分組操作伴隨聚集操作使用才有使用價(jià)值(注意:是分組伴隨聚集,而不是聚集伴隨分組)。 SELECT-HAVING 在分組操作后可以跟HAVING子句,限定分組統(tǒng)計(jì)函數(shù)的查詢(xún)結(jié)果。WHERE是分組

23、之前限定查詢(xún)結(jié)果,HAVING是對(duì)分組后的限定,即:HAVING 伴隨GROUP BY 子句才有意思。,難道我現(xiàn)在是和上帝說(shuō)話(huà)?怎么總是沒(méi)有回答!,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECT-范例 查詢(xún)?nèi)藬?shù)和人次,KC61是中心門(mén)診報(bào)銷(xiāo)表,其中AAC001是個(gè)人編碼,一個(gè)人只有一個(gè)唯一的編碼,可以使用DISTINCT和聚集查詢(xún) SELECT COUNT(*) AS 人次, COUNT(DISTINCT(AAC001) ) AS 人數(shù) FROM KC61; 統(tǒng)計(jì)各部門(mén)人數(shù)、工資總額和平均工資 SELECT DEPTNO, COUNT(*) AS 人數(shù), SUM(SAL) AS 工資總額,

24、AVG(SAL) AS平均工資 FROM EMP GROUP BY DEPTNO; 如果需要顯示部門(mén)名稱(chēng),必須關(guān)聯(lián)DEPT表 SELECT D.DEPTNO, D.DNAME, COUNT(*) AS人數(shù), SUM(E.SAL) AS工資總額, AVG(E.SAL) AS 平均工資 FROM SCOTT.DEPT D, SCOTT.EMP E WHERE D.DEPTNO = E.DEPTNO GROUP BY D.DEPTNO, D.DNAME; -非聚集字段必須在GROUP BY 中列舉,如果列舉字段太多勢(shì)必影響性能,可以使用查詢(xún)子句解決此問(wèn)題,有關(guān)查詢(xún)子句見(jiàn)后詳述。,解決問(wèn)題的問(wèn)題,而不

25、是問(wèn)題,這是關(guān)鍵性問(wèn)題,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECT-UNION,UNION ALL,MINUS, INTERSECT 返回兩個(gè)查詢(xún)結(jié)果的集合操作,兩個(gè)查詢(xún)結(jié)果集必須字段相同。 UNION和UNION ALL并集操作,UNION并集后去掉重復(fù)結(jié)果,UNION ALL直接并集 MINUS差集操作 INTERSECT交集操作 SELECT * FROM SCOTT.DEPT UNION SELECT * FROM SCOTT.DEPT WHERE DEPT.DEPTNO = 20; -返回所有部門(mén),因?yàn)槿サ袅酥貜?fù)的結(jié)果 SELECT * FROM SCOTT.DEPT UNIO

26、N ALL SELECT * FROM SCOTT.DEPT WHERE DEPT.DEPTNO = 20; -返回所有部門(mén),部門(mén)編碼為20的有兩條。,工作境界:吃苦耐勞,苦中作樂(lè),樂(lè)在其中,無(wú)苦無(wú)樂(lè),-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECT-ORDER BY ORDER BY排序,跟數(shù)字(代表字段位置)或字段名,ASC升序,DESC降序,默認(rèn)升序。 SELECT DEPTNO, DNAME FROM SCOTT.DEPT WHERE DEPTNO 10 GROUP BY DEPTNO, DNAME HAVING COUNT(*) 0 ORDER BY DEPTNO DESC; -OR

27、DER BY 是對(duì)返回的結(jié)果進(jìn)行排序,所以必須放在最后一句。 SELECT DEPTNO, DNAME FROM SCOTT.DEPT WHERE DEPTNO 10 GROUP BY DEPTNO, DNAME HAVING COUNT(*) 0 ORDER BY 1 DESC; -結(jié)果同第一個(gè)查詢(xún),字段位置從1開(kāi)始。,我是來(lái)做項(xiàng)目的,不是來(lái)創(chuàng)造奇跡的,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECT-FOR UPDATE 鎖等待查詢(xún)。當(dāng)查詢(xún)結(jié)果中有被鎖定記錄時(shí)等待解鎖,當(dāng)記錄被解鎖后返回結(jié)果集,并鎖定返回的記錄。如果FOR UPDATE后跟NOWAIT,遇到鎖后不等待,返回錯(cuò)誤。 ORAC

28、LE使用記錄級(jí)鎖定,當(dāng)事物被提交或回滾后鎖定被釋放。 死鎖問(wèn)題 當(dāng)兩個(gè)事物以不同的順序同時(shí)更新多個(gè)表時(shí)就會(huì)發(fā)生死鎖(對(duì)牛),解決死鎖的途徑是手工殺掉死鎖的進(jìn)程或者重新啟動(dòng)數(shù)據(jù)庫(kù)。因此,在使用事物更新多表數(shù)據(jù)時(shí)一定要小心,使用面向?qū)ο蟮姆椒ǚ庋b數(shù)據(jù)操作可以在很大程度上解決死鎖問(wèn)題。,沒(méi)有經(jīng)過(guò)嚴(yán)格測(cè)試的軟件開(kāi)發(fā)進(jìn)度報(bào)告不看也罷,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECT-子查詢(xún) 查詢(xún)語(yǔ)句可以嵌套,任何產(chǎn)生數(shù)值的地方都可以使用子查詢(xún)。 在查詢(xún)條件中使用子查詢(xún)時(shí),當(dāng)子查詢(xún)返回多個(gè)結(jié)果時(shí)只能使用IN。 查詢(xún)順序是先執(zhí)行被依賴(lài)的底層查詢(xún),然后一層層向上查。 子查詢(xún)只被執(zhí)行一次。 查詢(xún)平均工資最低的部

29、門(mén)情況 SELECT DEPTNO, AVG(SAL) FROM SCOTT.EMP GROUP BY DEPTNO HAVING AVG(SAL) = (SELECT MIN(AVG(SAL) FROM SCOTT.EMP GROUP BY DEPTNO); -子查詢(xún)先查詢(xún)出最低的部門(mén)平均工資,然后查詢(xún)部門(mén)最低平均工資等于子查詢(xún)工資的部門(mén),就是喜歡編程也不能為了編程而放棄和用戶(hù)的功能確認(rèn),如果你把用戶(hù)對(duì)程序的任意修改提升為對(duì)你自身價(jià)值的否定,你還不先確認(rèn)嗎?,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECT-子查詢(xún) 在FROM中使用子查詢(xún),子查詢(xún)?cè)谶@里相對(duì)與VIEW SELECT D.DEP

30、TNO, D.DNAME, S.AVG_SAL, S.SUM_SAL, S.NUM FROM SCOTT.DEPT D, (SELECT DEPTNO, AVG(SAL) AS AVG_SAL, SUM(SAL) AS SUM_SAL, COUNT(*) AS NUM FROM SCOTT.EMP GROUP BY DEPTNO) S WHERE D.DEPTNO = S.DEPTNO; 在WHERE中使用子查詢(xún),例子不好,應(yīng)該直接寫(xiě)表關(guān)聯(lián),這里只是為了說(shuō)明語(yǔ)法。 SELECT * FROM SCOTT.EMP WHERE DEPTNO IN (SELECT DEPTNO FROM SCOTT

31、.DEPT WHERE DEPTNO = 20);,驢怎么了?人家采用的可是軟件工程中的螺旋法則,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,SELECT-子查詢(xún) 使用EXISTS(NOT EXISTS)替換IN(NOT IN) IN(NOT IN)在執(zhí)行數(shù)據(jù)庫(kù)操作時(shí)性能非常低下,應(yīng)該使用EXISTS(NOT EXISTS)替換,特別是NOT IN子句將執(zhí)行一個(gè)內(nèi)部的排序和合并; EXISTS子查詢(xún)使用主表的字段限制查詢(xún)數(shù)據(jù) SELECT * FROM SCOTT.EMP E WHERE EXISTS (SELECT * FROM SCOTT.DEPT WHERE DEPT.DEPTNO = E.DE

32、PTNO AND DEPTNO = 20); -因?yàn)镋XISTS可以看到外表,所以,如果表名重復(fù),使用表別名區(qū)分,在子查詢(xún)中一定寫(xiě)清楚和外表的關(guān)聯(lián)關(guān)系,另外,子查詢(xún)寫(xiě)SELECT * 是對(duì)的,不用寫(xiě)字段名。,多做一點(diǎn),早知道一點(diǎn),-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,UPDATE修改 用來(lái)更新數(shù)據(jù)表中的數(shù)據(jù) UPDATE table_nameSET column_name = new_value, WHERE condition; 更新DEPT表,將20號(hào)部門(mén)名稱(chēng)修改為銷(xiāo)售部,地址修改為北京 UPDATE DEPT SET DNAME = 銷(xiāo)售部, LOC = 北京WHERE DEPTNO =

33、20; 子查詢(xún)也可在UPDATE中使用,將職工領(lǐng)導(dǎo)是KING的人員薪資增加100元 UPDATE SCOTT.EMP SET SAL = SAL + 100 WHERE EMPNO IN (SELECT E.EMPNO FROM SCOTT.EMP E, SCOTT.EMP G WHERE E.MGR = G.EMPNO AND G.ENAME = KING); UPDATE SCOTT.EMP SET SAL = SAL + 100WHERE EXISTS (SELECT * FROM SCOTT.EMP E, SCOTT.EMP G WHERE E.MGR = G.EMPNO AND E.

34、EMPNO = EMP.EMPNO AND G.ENAME = KING);,金保工程是“陽(yáng)光工程”,所以我才陽(yáng)光,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,INSERT-插入 語(yǔ)法: INSERT INTO table_name (column,.) VALUES (expression ,) | SELECT query 當(dāng)表字段和插入值相同時(shí),可以省略字段列表 INSERT INTO SCOTT.BONUS VALUES(TURNER, SALESMAN, 200, 40); 當(dāng)只插入部分字段時(shí),必須列舉字段,未賦值字段使用默認(rèn)值或?yàn)榭?INSERT INTO SCOTT.BONUS(ENAM

35、E, JOB, SAL) VALUES(CLARK, MANAGER, 100); 也可以使用查詢(xún)給表插入數(shù)據(jù) INSERT INTO SCOTT.BONUS(ENAME, JOB, SAL) SELECT ENAME, JOB, SAL FROM SCOTT.EMP WHERE MGR = 7698;,理論上都是問(wèn)題,做起來(lái)沒(méi)有問(wèn)題,-毀人不倦語(yǔ)錄,DDL數(shù)據(jù)操作語(yǔ)言,DELETE-刪除 語(yǔ)法: DELETE FROM table_name WHERE condition; 刪除BONUS中ENAME為CLARK的記錄 DELETE FROM SCOTT.BONUS WHERE ENAME

36、= CLARK 刪除重復(fù)記錄,ROWID是記錄的物理位置,一經(jīng)確定永不改變 DELETE FROM SCOTT.BONUS B WHERE ROWID 1); -刪除ENAME重復(fù)記錄,自己先擦塊玻璃再交代給別人擦,安排工作同理,-毀人不倦語(yǔ)錄,序列號(hào),創(chuàng)建 CREATE SEQUENCE name INCREMENT BY n START WITH n MAXVALUE n | NOMAXVALUE MINVALUE n | NOMINVALUE CYCLE | NOCYCLE CACHE n | NOCACHE; 說(shuō)明:INCREMENT BY n 一次增長(zhǎng)n 個(gè)數(shù)字 START WITH

37、 n 初始值 NOMAXVALUE 缺省值10E+27 NOMINVALUE 缺省值1 NOCYCLE 不循環(huán), 常用于唯一關(guān)鍵字 CACHE n 在內(nèi)存里緩存n個(gè)序列,出錯(cuò)回退時(shí)會(huì)丟失 創(chuàng)建從1開(kāi)始,不緩存的EMP_EMPNO序列。 CREATE SEQUENCE EMP_EMPNO START WITH 1 NOCACHE; 修改 ALTER SEQUENCE name INCREMENT BY n MAXVALUE n | NOMAXVALUE MINVALUE n | NOMINVALUE CYCLE | NOCYCLE CACHE n | NOCACHE; -起始值不能改變,如果要改

38、變序列的起始值, 先刪除, 再新建。 刪除 DROP SEQUENCE name; DROP SEQUENCE EMP_EMPNO;,序列號(hào),使用 NEXTVAL下一個(gè)序列號(hào)值 CURRVAL當(dāng)前序列號(hào)值 如果EMP_EMPNO是一個(gè)序列號(hào),可以用下面SQL取序列值 -去序列的當(dāng)前值 SELECT EMP_EMPNO.CURRVAL FROM DUAL; -去序列的下一個(gè)值 SELECT EMP_EMPNO.NEXTVAL FROM DUAL; -使用序列插入數(shù)據(jù) INSERT INTO EMP(EMPNO, ENAME,) VALUES(EMP_EMPNO.NEXTVAL, JONE,);

39、不能用序列號(hào)的nextval和currval的地方 視圖查詢(xún)、distinct查詢(xún)、有g(shù)roup by,having,order by的查詢(xún)、 有子查詢(xún)的查詢(xún)、表里的缺省值,注釋,/* 注釋內(nèi)容 */ -注釋內(nèi)容 -SELECT * DELETE FROM EMP WHERE DEPTNO = 20; 提示:刪除數(shù)據(jù)前最好先查詢(xún)一下。可以先寫(xiě)SELECT *,然后把SELECT *注釋掉,增加DELETE。,如果再想不出來(lái)就去上廁所,-毀人不倦語(yǔ)錄,常用函數(shù),數(shù)字函數(shù) ABS 取絕對(duì)值 POWER 乘方 LN 10為底數(shù)取冪 SQRT 平方根 EXP e的n次乘方 LOG(m,n) m為底數(shù)n

40、取冪 數(shù)學(xué)運(yùn)算函數(shù):ACOS ATAN ATAN2 COS COSH SIGN SIN SINH TAN TANH CEIL 大于或等于取整數(shù) FLOOR 小于或等于取整數(shù) MOD 取余數(shù) ROUND(n,m) 按m的位數(shù)取四舍五入值如果round(日期): 中午12以后將是明天的日期. round(sysdate,Y)是年的第一天 TRUNC(n,m) 按m的位數(shù)取前面的數(shù)值如果trunc(日期), 確省的是去掉時(shí)間,沖鋒號(hào)響起后執(zhí)行的是命令而不是計(jì)劃,-毀人不倦語(yǔ)錄,常用函數(shù),字符函數(shù) CHR 按數(shù)據(jù)庫(kù)的字符集由數(shù)字返回字符 CONCAT(c1,c2) 把兩個(gè)字符c1,c2組合成一個(gè)字符, 和 | 相同 REPLACE(c,s,r) 把字符c里出現(xiàn)s的字符替換成r, 返回新字符 SUBSTR(c,m,n) m大于0,字符c從前面m處開(kāi)始取n位字符,m等于0和1一樣, m小與0,字符c從后面m處開(kāi)始取n位

溫馨提示

  • 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)論