版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Oracle數(shù)據(jù)庫(kù)命令操作1,查看oracle版本:select * from v$version2,重新進(jìn)行數(shù)據(jù)庫(kù)連接 CONNECT SCOTT/TIGERMYDB SCOTT登陸名 TIGER口令 MYDB稱為網(wǎng)絡(luò)服務(wù)名或稱為連接字符串3,關(guān)閉或退出SQL*Plus EXIT”或“QUIT”命令4,查看SQL*Plus的環(huán)境參數(shù)。 通過(guò)SHOW ALL命令可以查看設(shè)置命令的格式為:SET 參數(shù) ON|OFF|值5,設(shè)置輸出頁(yè)面的大小。步驟1:輸入并執(zhí)行以下命令,觀察顯示結(jié)果:SELECT * FROM emp;步驟2:在輸入?yún)^(qū)輸入并執(zhí)行以下命令:SET PAGESIZE 100 SET
2、LINESIZE 120 或SET PAGESIZE 100 LINESIZE 120 步驟3:重新輸入并執(zhí)行以下命令,觀察顯示結(jié)果:SELECT * FROM emp;6,顯示當(dāng)前用戶,輸入并執(zhí)行命令:SHOW USER執(zhí)行結(jié)果是:USER為"SCOTT"7,使用SPOOL命令記錄操作內(nèi)容。步驟1:執(zhí)行命令:SPOOL C:TEST步驟2:執(zhí)行命令:SELECT * FROM emp; 步驟3:執(zhí)行命令:SELECT * FROM dept;步驟4:執(zhí)行命令:SPOOLOFF步驟5:用記事本打開(kāi)C:TEST.LST并查看內(nèi)容:8,打開(kāi)/關(guān)閉查詢結(jié)果表頭的顯示,默認(rèn)為ON。
3、Set heading on/off:打開(kāi)/關(guān)閉查詢結(jié)果表頭的顯示,默認(rèn)為ON。 Set feedback on/off:打開(kāi)/關(guān)閉查詢結(jié)果中返回行數(shù)的顯示,默認(rèn)為ON。 Set echo on/off:打開(kāi)/關(guān)閉命令的回顯,默認(rèn)為ON。 Set time on/off:打開(kāi)/關(guān)閉時(shí)間顯示,默認(rèn)為OFF。9,使用DESCRIBE命令查看表結(jié)構(gòu)DESCRIBE(可簡(jiǎn)寫(xiě)成DESC)來(lái)檢查表的結(jié)構(gòu)信息。輸入并執(zhí)行 以下命令(emp為要顯示結(jié)構(gòu)的表名):DESCRIBE emp10,注釋的方法是:* 在一行的開(kāi)頭處書(shū)寫(xiě)REM,將一行注釋掉。* 在一行中插入“-”,將其后的內(nèi)容注釋掉。* 使用/*. *
4、/,可以用來(lái)注釋任何一段內(nèi)容。11,保存輸入?yún)^(qū)的內(nèi)容。步驟1:在輸入?yún)^(qū)重新輸入命令:SELECT * FROM emp;SELECT * FROM dept;步驟2:選擇“文件”菜單下的“將輸入另存為”命令,彈出文件存盤(pán)對(duì)話框。選擇正確的磁盤(pán)位置,為存盤(pán)的文件起一個(gè)名字。如果輸入?yún)^(qū)中的內(nèi)容是SQL命令或命令序列,則使用擴(kuò)展名.SQL;否則可以省略或以.TXT做擴(kuò)展名。在本例中,選SELECT.SQL做文件名。12,創(chuàng)建新用戶USER1,口令為ABC123CREATE USER USER1 IDENTIFIED BY ABC123(create user user1 identified by
5、abc123) 授予連接數(shù)據(jù)庫(kù)權(quán)限、創(chuàng)建表權(quán)限、創(chuàng)建存儲(chǔ)過(guò)程和表空間使用權(quán)限。GRANT CONNECT TO USER1; (grant connect to user1)GRANT CREATE TABLE TO USER1; (grant create table to user1)GRANT CREATE PROCEDURE TO USER1; (grant create procedure to user1)GRANT UNLIMITED TABLESAPCE TO USER1;(grant unlimited tablesapce to user1) 使用新賬戶登錄。CONNECT
6、 USER1/ABC123MYDB輸出結(jié)果:已連接。步驟5:以創(chuàng)建表的方式復(fù)制數(shù)據(jù)到新賬戶。 CREATE TABLE EMP AS SELECT * FROM SCOTT.EMP;(create table emp as select * from scott.emp) CREATE TABLE DEPT AS SELECT * FROM SCOTT.DEPT;CREATE TABLE SALGRADES AS SELECT * FROM SCOTT.SALGRADE;13,每個(gè)賬戶對(duì)應(yīng)一個(gè)模式(賬戶.表)以不同的賬戶登錄數(shù)據(jù)庫(kù)時(shí),就進(jìn)入了不同的模式 SELECT * FROM SCOTT.
7、EMP;14, 顯示表的行號(hào)輸入并執(zhí)行查詢:SELECT rownum,ename FROM emp;15,查詢語(yǔ)句中的加減乘除運(yùn)算加(+)、減(-)、乘(*)、除(/)顯示雇員工資上浮20%的結(jié)果。輸入并執(zhí)行查詢:SELECT ename,sal,sal*(1+20/100) FROM emp;顯示結(jié)果為:ENAME SAL SAL*(1+20/100)- - -SMITH 800 960ALLEN 1600 192016,在查詢中使用列別名。輸入并執(zhí)行:SELECT ename AS "名稱", sal "工資" FROM emp;顯示結(jié)果為:名稱
8、工資- -SMITH 800ALLEN 160017,在查詢中使用字符串常量。輸入并執(zhí)行查詢:SELECTename| ' IS '|job AS "雇員和職務(wù)表" FROM emp;輸出結(jié)果為:雇員和職務(wù)表-SMITH IS CLERKALLEN IS SALESMAN18,消除重復(fù)行顯示。 使用DISTINCT輸入并執(zhí)行查詢:SELECT DISTINCT job FROM emp;19,升序排序【訓(xùn)練1】 查詢雇員姓名和工資,并按工資從小到大排序。輸入并執(zhí)行查詢:SELECT ename, sal FROM emp ORDER BY sal;執(zhí)行結(jié)果為
9、:ENAME SAL- -SMITH 800JAMES 950注意:若省略ASC和DESC,則默認(rèn)為ASC,即升序排序。 降序排序?【訓(xùn)練2】 查詢雇員姓名和雇傭日期,并按雇傭日期排序,后雇傭的先顯示。輸入并執(zhí)行查詢:SELECT ename,hiredate FROM emp ORDER BY hiredate DESC;結(jié)果如下:ENAME HIREDATE- -ADAMS 23-5月 -87SCOTT 19-4月 -87多列排序SELECT ename,deptno,hiredate FROM emp ORDER BY deptno,hiredate;在排序中使用別名SELECT emp
10、no, ename, sal*Months_between(sysdate,hiredate) AS total FROM emp ORDER BY total;20,條件查詢 SELECT ename,job,sal FROM emp WHERE job='SALESMAN'SELECT ename, job,sal FROM emp WHERE sal>=3000;SELECT ename,hiredate FROM emp WHERE hiredate>='1-1月-82'SELECT ename, job,sal FROM emp WHERE
11、 sal>1000 AND sal<2000;SELECT * FROM emp WHERE job='CLERK' OR job='MANAGER'SELECT * FROM emp WHERE NOT deptno=10;SELECT * FROM emp WHERE (deptno=10 OR deptno=20) AND sal<1500;顯示工資在10002000之間的雇員信息。輸入并執(zhí)行查詢:SELECT * FROM emp WHERE sal BETWEEN 1000 AND 2000;21,IN條件查詢使用顯示職務(wù)為“SALE
12、SMAN',“CLERK”和“MANAGER”的雇員信息。(in前可以加not)輸入并執(zhí)行查詢:SELECT * FROM emp WHERE job IN ('SALESMAN','CLERK','MANAGER');22,LIKE模糊查詢顯示姓名以“S”開(kāi)頭的雇員信息如下(%:代表0個(gè)或多個(gè)任意字符。 _ :代表一個(gè)任意字符。)輸入并執(zhí)行查詢:SELECT * FROM emp WHERE ename LIKE 'S%'顯示經(jīng)理編號(hào)沒(méi)有填寫(xiě)的雇員(判斷空值NULL)(也可IS not NULL)輸入并執(zhí)行查詢:SELE
13、CT ename, mgr FROM emp WHERE mgr IS NULL;22,函數(shù)列表使用求絕對(duì)值函數(shù)abs。SELECT abs(-5) FROM dual;使用四舍五入函數(shù)round。SELECT round(45.923,2), round(45.923,0), round(45.923,-1) FROM dual; 使用求余數(shù)函數(shù)mod。SELECT mod(1600, 300) FROM dual;23,字符函數(shù)如果不知道表的字段內(nèi)容是大寫(xiě)還是小寫(xiě),可以轉(zhuǎn)換后比較。輸入并執(zhí)行查詢:SELECT empno, ename, deptnoFROM emp WHERE lower
14、(ename) ='blake'顯示雇員名稱和職務(wù)列表。輸入并執(zhí)行查詢:SELECT concat(rpad(ename,15,'.'),job) as 職務(wù)列表 FROM emp;結(jié)果為:職務(wù)列表-SMITH.CLERKALLEN.SALESMANWARD.SALESMAN顯示名稱以“W”開(kāi)頭的雇員,并將名稱轉(zhuǎn)換成以大寫(xiě)開(kāi)頭。輸入并執(zhí)行查詢:SELECT empno,initcap(ename),job FROM emp WHERE substr(ename,1,1)='W'結(jié)果為: EMPNO INITCAP(EN JOB- - - 7521
15、 Ward SALESMAN顯示雇員名稱中包含“S”的雇員名稱及名稱長(zhǎng)度。輸入并執(zhí)行查詢:SELECT empno,ename,length(ename) FROM emp WHERE instr(ename, 'S', 1, 1)>0;24,日期函數(shù)返回系統(tǒng)的當(dāng)前日期。輸入并執(zhí)行查詢:SELECT sysdate FROM dual返回2003年2月的最后一天。輸入并執(zhí)行查詢:SELECT last_day('08-2月-03') FROM dual;假定當(dāng)前的系統(tǒng)日期是2003年2月6日,求再過(guò)1000天的日期。輸入并執(zhí)行查詢:SELECT sysda
16、te+1000 AS "NEW DATE" FROM dual;假定當(dāng)前的系統(tǒng)日期是2003年2月6日,顯示部門(mén)10雇員的雇傭天數(shù)。輸入并執(zhí)行查詢:SELECT ename, round(sysdate-hiredate) DAYSFROM emp WHERE deptno = 10;25,類型轉(zhuǎn)換函數(shù)自動(dòng)轉(zhuǎn)換字符型數(shù)據(jù)到數(shù)值型。輸入并執(zhí)行查詢:SELECT '12.5'+11 FROM dual;自動(dòng)轉(zhuǎn)換數(shù)值型數(shù)據(jù)到字符型。執(zhí)行以下查詢:SELECT '12.5'|11 FROM dual;26,日期類型轉(zhuǎn)換 將日期轉(zhuǎn)換成帶時(shí)間和星期的字符
17、串并顯示。執(zhí)行以下查詢:SELECT TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS AM DY') FROM dual;將日期顯示轉(zhuǎn)換成中文的年月日。輸入并執(zhí)行查詢:SELECT TO_CHAR(sysdate,'YYYY"年"MM"月"DD"日"') FROM dual;將雇傭日期轉(zhuǎn)換成字符串并按新格式顯示。輸入并執(zhí)行查詢:SELECTename, to_char(hiredate, 'DD Month YYYY') HIREDATEFROM emp;以
18、全拼和序列顯示時(shí)間。執(zhí)行以下查詢:SELECT SYSDATE,to_char(SYSDATE,'yyyysp'),to_char(SYSDATE,'mmspth'),to_char(SYSDATE,'ddth') FROM dual;時(shí)間顯示的大小寫(xiě)。步驟1:執(zhí)行以下查詢:SELECT SYSDATE,to_char(SYSDATE,'yyyysp') FROM dual;結(jié)果為:SYSDATE TO_CHAR(SYSDATE,'YYYYSP')- -07-2月 -04 two thousand four步驟2:
19、執(zhí)行以下查詢:SELECT to_char(SYSDATE,'Yyyysp') FROM dual;結(jié)果為:SYSDATE TO_CHAR(SYSDATE,'YYYYSP')- -Two Thousand Four27, 數(shù)字類型轉(zhuǎn)換 將數(shù)值轉(zhuǎn)換成字符串并按新格式顯示。執(zhí)行以下查詢:SELECT TO_CHAR(123.45,'0000.00'), TO_CHAR(12345,'L9.9EEEE') FROM dual;結(jié)果為:TO_CHAR( TO_CHAR(12345,'L9.9- - 0123.45 RMB1.2E+
20、04將數(shù)值轉(zhuǎn)換成字符串并按新格式顯示。執(zhí)行以下查詢:SELECT TO_CHAR(sal,'$99,999') SALARY FROM emp WHERE ename = 'SCOTT'結(jié)果為:SALARY- $4,000NVL: 如果不為空,返回原值;為空,則返回給定的值。 使用nvl函數(shù)轉(zhuǎn)換空值。執(zhí)行以下查詢:SELECTename,nvl(job,'無(wú)'),nvl(hiredate,'01-1月-97'),nvl(comm,0) FROM emp;結(jié)果為:ENAME NVL(JOB,'N NVL(HIREDA NVL
21、(COMM,0)- - - -SMITH CLERK 17-12月-80 0ALLEN SALESMAN 20-2月 -81 300Decode:將職務(wù)轉(zhuǎn)換成中文顯示。執(zhí)行以下查詢:SELECTename,decode(job, 'MANAGER', '經(jīng)理', 'CLERK','職員', 'SALESMAN','推銷員', 'ANALYST','系統(tǒng)分析員','未知') FROM emp;userenv函數(shù)* ISDBA:判斷會(huì)話用戶的角色是否為SY
22、SDBA,是則返回TRUE。* INSTANCE:返回會(huì)話連接的INSTANCE標(biāo)識(shí)符。* LANGUAGE:返回語(yǔ)言、地區(qū)、數(shù)據(jù)庫(kù)字符集信息。* LANG:返回會(huì)話語(yǔ)言的ISO簡(jiǎn)稱。 * TERMINAL:返回正在會(huì)話的終端或計(jì)算機(jī)的標(biāo)識(shí)符。返回用戶終端或系統(tǒng)標(biāo)識(shí)信息。執(zhí)行以下查詢:SELECTuserenv('TERMINAL') FROM dual;結(jié)果為:ORASERVER返回語(yǔ)言、地區(qū)、數(shù)據(jù)庫(kù)字符集信息。執(zhí)行以下查詢:SELECTuserenv('LANGUAGE') FROM dual;結(jié)果為:SIMPLIFIED CHINESE_CHINA.ZHS
23、16GBK28,相等連接 顯示雇員的名稱和所在的部門(mén)的編號(hào)和名稱。執(zhí)行以下查詢:SELECT emp.ename,emp.deptno,dept.dname FROM emp,dept WHERE emp.deptno=dept.deptno;使用表別名。執(zhí)行以下查詢:SELECT ename,e.deptno,dname FROM emp e,dept d WHERE e.deptno=d.deptno;29,外連接 外連操作符為(+)使用外連顯示不滿足相等條件的記錄。步驟1:顯示雇員的名稱、工資和所在的部門(mén)名稱及沒(méi)有任何雇員的部門(mén)。執(zhí)行以下查詢:SELECT ename,sal,dname
24、 FROM emp,dept WHERE emp.deptno(+)=dept.deptno;執(zhí)行結(jié)果為:ENAME SAL DNAME- - -SELECT ename,sal,dname FROM emp right outer join dept on emp.deptno = dept.deptno;SELECT ename,sal,dname FROM emp right outer join dept on emp.deptno = dept.deptno;? select * from TBL_10200_FAC_ORDER B inner join DTCXHDY A on B
25、.MT_FAC_NAME=A.MC30,統(tǒng)計(jì)查詢分組函數(shù)中SUM和AVG只應(yīng)用于數(shù)值型的列,MAX、MIN和COUNT可以應(yīng)用于字符、數(shù)值和日期類型的列。組函數(shù)忽略列的空值。使用GROUP BY 從句可以對(duì)數(shù)據(jù)進(jìn)行分組。所謂分組,就是按照列的相同內(nèi)容,將記錄劃分成組,對(duì)組可以應(yīng)用組函數(shù)。如果不使用分組,將對(duì)整個(gè)表或滿足條件的記錄應(yīng)用組函數(shù)。在組函數(shù)中可使用DISTINCT或ALL關(guān)鍵字。ALL表示對(duì)所有非NULL值(可重復(fù))進(jìn)行運(yùn)算(COUNT除外)。DISTINCT 表示對(duì)每一個(gè)非NULL值,如果存在重復(fù)值,則組函數(shù)只運(yùn)算一次。如果不指明上述關(guān)鍵字,默認(rèn)為ALL。 求雇員總?cè)藬?shù)。執(zhí)行以下查詢
26、:SELECT COUNT(*) FROM emp;求有傭金的雇員人數(shù)。執(zhí)行以下查詢:SELECT COUNT(comm) FROM emp;求部門(mén)10的雇員的平均工資。執(zhí)行以下查詢:SELECT AVG(sal) FROM emp WHERE deptno=10;求最晚和最早雇傭的雇員的雇傭日期。執(zhí)行以下查詢:SELECT MAX(hiredate),MIN(hiredate) FROM emp;求雇員表中不同職務(wù)的個(gè)數(shù)。執(zhí)行以下查詢:SELECT COUNT( DISTINCT job) FROM emp;返回結(jié)果為:COUNT(DISTINCT JOB)- 5按職務(wù)統(tǒng)計(jì)工資總和。步驟1:
27、執(zhí)行以下查詢:SELECT SUM(sal) FROM emp GROUP BY job; SELECT job,SUM(sal) FROM emp GROUP BY job;按部門(mén)和職務(wù)分組統(tǒng)計(jì)工資總和。執(zhí)行以下查詢:SELECT deptno, job, sum(sal) FROM emp GROUP BY deptno, job;統(tǒng)計(jì)各部門(mén)的最高工資,排除最高工資小于3000的部門(mén)。執(zhí)行以下查詢:SELECT deptno, max(sal) FROM emp GROUP BY deptno HAVING max(sal)>=3000;注意:WHERE條件在GROUP BY之前執(zhí)行
28、,HAVING條件在分組后執(zhí)行。按職務(wù)統(tǒng)計(jì)工資總和并排序。執(zhí)行以下查詢:SELECT job 職務(wù), SUM(sal) 工資總和 FROM emp GROUP BY jobORDER BY SUM(sal); 注意:使用ORDER BY從句對(duì)統(tǒng)計(jì)的結(jié)果進(jìn)行排序,ORDER BY從句要出現(xiàn)在語(yǔ)句的最后。求各部門(mén)平均工資的最高值。執(zhí)行以下查詢:SELECT max(avg(sal) FROM emp GROUP BY deptno;31,子查詢 子查詢一般出現(xiàn)在SELECT語(yǔ)句的WHERE子句中,Oracle也支持在FROM或HAVING子句中出現(xiàn)子查詢。子查詢比主查詢先執(zhí)行,結(jié)果作為主查詢的條件
29、,在書(shū)寫(xiě)上要用圓括號(hào)擴(kuò)起來(lái),并放在比較運(yùn)算符的右側(cè)。子查詢可以嵌套使用,最里層的查詢最先執(zhí)行。子查詢可以在SELECT、INSERT、UPDATE、DELETE等語(yǔ)句中使用。查詢比SCOTT工資高的雇員名字和工資。執(zhí)行以下查詢:SELECT ename,sal FROM emp WHERE sal>(SELECT sal FROM emp WHERE empno=7788);查詢和SCOTT同一部門(mén)且比他工資低的雇員名字和工資。執(zhí)行以下查詢:SELECT ename,sal FROM emp WHERE sal<(SELECT sal FROM emp WHERE empno=77
30、88)AND deptno=(SELECT deptno FROM emp WHERE empno=7788);查詢工資高于平均工資的雇員名字和工資。執(zhí)行以下查詢:SELECT ename,sal FROM emp WHERE sal>(SELECT AVG(sal) FROM emp);32,多行子查詢?nèi)绻硬樵兎祷囟嘈械慕Y(jié)果,則我們稱它為多行子查詢。多行子查詢要使用不同的比較運(yùn)算符號(hào),它們是IN、ANY和ALL。查詢工資低于任何一個(gè)“CLERK”的工資的雇員信息。執(zhí)行以下查詢:SELECT empno, ename, job,sal FROM emp WHERE sal < A
31、NY (SELECT sal FROM emp WHERE job = 'CLERK')AND job <> 'CLERK'查詢工資比所有的“SALESMAN”都高的雇員的編號(hào)、名字和工資。執(zhí)行以下查詢:SELECT empno, ename,sal FROM emp WHERE sal > ALL(SELECT sal FROM emp WHERE job= 'SALESMAN');查詢部門(mén)20中職務(wù)同部門(mén)10的雇員一樣的雇員信息。執(zhí)行以下查詢:SELECT empno, ename, job FROM emp WHERE j
32、ob IN (SELECT job FROM emp WHERE deptno=10)AND deptno =20;查詢職務(wù)和SCOTT相同,比SCOTT雇傭時(shí)間早的雇員信息。執(zhí)行以下查詢:SELECT empno, ename, job FROM emp WHERE job =(SELECT job FROM emp WHERE empno=7788)AND hiredate < (SELECT hiredate FROM emp WHERE empno=7788);33,多列子查詢?nèi)绻硬樵兎祷囟嗔校瑒t對(duì)應(yīng)的比較條件中也應(yīng)該出現(xiàn)多列,這種查詢稱為多列子查詢。以下是多列子查詢的訓(xùn)練實(shí)例
33、?!居?xùn)練8】 查詢職務(wù)和部門(mén)與SCOTT相同的雇員的信息。執(zhí)行以下查詢:SELECT empno, ename, sal FROM emp WHERE (job,deptno) =(SELECT job,deptno FROM emp WHERE empno=7788);34,在FROM從句中使用子查詢 在FROM從句中也可以使用子查詢,在原理上這與在WHERE條件中使用子查詢類似。 查詢雇員表中排在第69位置上的雇員。執(zhí)行以下查詢:SELECT ename,sal FROM (SELECT rownum as num,ename,sal FROM emp WHERE rownum<=9
34、 )WHERE num>=6;35,集合運(yùn)算 多個(gè)查詢語(yǔ)句的結(jié)果可以做集合運(yùn)算,結(jié)果集的字段類型、數(shù)量和順序應(yīng)該一樣。查詢部門(mén)10和部門(mén)20的所有職務(wù)。執(zhí)行以下查詢:SELECT job FROM emp WHERE deptno=10UNIONSELECT job FROM emp WHERE deptno=20;查詢部門(mén)10和20中是否有相同的職務(wù)和工資。執(zhí)行以下查詢:SELECT job,sal FROM emp WHERE deptno=10INTERSECTSELECT job,sal FROM emp WHERE deptno=20;查詢只在部門(mén)表中出現(xiàn),但沒(méi)有在雇員表中出現(xiàn)
35、的部門(mén)編號(hào)。執(zhí)行以下查詢:SELECT deptno FROM deptMINUSSELECT deptno FROM emp ;顯示人數(shù)最多的部門(mén)名稱。輸入并執(zhí)行以下查詢:SELECT DECODE(dname,'SALES','銷售部','ACCOUNTING','財(cái)務(wù)部','RESEARCH','研發(fā)部','未知') 部門(mén)名 FROM emp,dept WHERE emp.deptno=dept.deptno GROUP BY dname HAVING COUNT(*)=(SE
36、LECT MAX(COUNT(*) FROM emp GROUP BY deptno);顯示各部門(mén)的平均工資、最高工資、最低工資和總工資列表,并按平均工資高低順序排序。輸入并執(zhí)行以下查詢:SELECT dname 部門(mén),AVG(sal) 平均工資,MAX(sal) 最高工資,MIN(sal) 最低工資,SUM(sal) 總工資 FROM emp,dept WHERE emp.deptno=dept.deptno GROUP BY dname ORDER BY AVG(sal) DESC;36,插入數(shù)據(jù) 可以使用INSERT命令,向已經(jīng)存在的表插入數(shù)據(jù),語(yǔ)法格式如下:INSERT INTO 表名
37、 (字段列表) VALUES(表達(dá)式1, 表達(dá)式2,.)|QUERY語(yǔ)句;插入字段的值的類型要和字段的類型一一對(duì)應(yīng)。字符串類型的字段值必須用單引號(hào)括起來(lái)字符串類型的字段值超過(guò)定義的長(zhǎng)度會(huì)出錯(cuò), 最好在插入前進(jìn)行長(zhǎng)度校驗(yàn)。字段列表如果省略則代表全部字段。將新雇員插入到emp表:INSERT INTO emp(empno,ename,job)VALUES (1000, '小李', 'CLERK');其他沒(méi)有插入的字段,系統(tǒng)會(huì)填寫(xiě)為表的默認(rèn)值。如果在表的創(chuàng)建時(shí)沒(méi)有說(shuō)明默認(rèn)值,則將插入NULL值日期型的數(shù)據(jù)默認(rèn)格式為DD-MON-YY,默認(rèn)的世紀(jì)為當(dāng)前的世紀(jì),默認(rèn)的時(shí)間
38、為午夜12點(diǎn)。如果指定的世紀(jì)不是本世紀(jì)或時(shí)間不是午夜12點(diǎn),則必須使用TO_DATE系統(tǒng)函數(shù)對(duì)字符串進(jìn)行轉(zhuǎn)換。如果要插入表的全部字段,則表名后的字段列表可以省略37,復(fù)制數(shù)據(jù) 另一種插入數(shù)據(jù)(相當(dāng)于復(fù)制)方法的語(yǔ)法格式是:INSERT INTO 表名(字段列表) SELECT(字段名1, 字段名2, .) FROM 另外的表名;該形式一次可以插入多行數(shù)據(jù)。步驟1:創(chuàng)建一個(gè)新表manager CREATE TABLE manager AS SELECT empno,ename,sal FROM emp WHERE job='MANAGER'執(zhí)行結(jié)果:表已創(chuàng)建。步驟2:從emp表拷
39、貝數(shù)據(jù)到manager:INSERT INTO managerSELECTempno, ename, sal FROM emp WHEREjob = 'CLERK'38序列使用 使用INSERT語(yǔ)句時(shí),可以通過(guò)序列來(lái)填寫(xiě)某些數(shù)值型或字符型的列。序列是一個(gè)要預(yù)先定義的有序的數(shù)值序列, 應(yīng)該先建立一個(gè)序列,然后在插入語(yǔ)句中使用 插入數(shù)據(jù)中使用序列的練習(xí)。步驟1:創(chuàng)建從2000起始,增量為1 的序列abc:CREATE SEQUENCE abc INCREMENT BY 1 START WITH 2000 MAXVALUE 99999 CYCLE NOCACHE; 在INSERT 語(yǔ)
40、句使用序列,序列的名稱為abc:INSERT INTO manager VALUES(abc.nextval,'小王',2500);39, 修改數(shù)據(jù) 修改數(shù)據(jù)的語(yǔ)句UPDATE對(duì)表中指定字段的數(shù)據(jù)進(jìn)行修改,一般需要通過(guò)添加WHERE條件來(lái)限定要進(jìn)行修改的行,如果不添加WHERE條件,將對(duì)所有的行進(jìn)行修改。(1) 修改數(shù)據(jù)的語(yǔ)句UPDATE的基本語(yǔ)法如下:UPDATE 表名 SET 字段名1=表達(dá)式1, 字段名2=表達(dá)式2, . WHERE 條件; 修改小李(編號(hào)為1000)的工資為3000。執(zhí)行以下的查詢:UPDATE emp SET sal = 3000 WHERE empn
41、o = 1000; 如果修改的值沒(méi)有賦值或定義,將把原來(lái)字段的內(nèi)容清為NULL。若修改值的長(zhǎng)度超過(guò)定義的長(zhǎng)度,則會(huì)出錯(cuò)。(2) UPDATE語(yǔ)句的另外一種用法:UPDATE 表名 SET(字段名1, 字段名2, .)=SELECT (字段名1, 字段名2, .) FROM 另外的表名WHERE條件; 【訓(xùn)練4】 根據(jù)其他表修改數(shù)據(jù)。執(zhí)行以下的查詢:UPDATE managerSET (ename, sal) =(SELECT ename,sal FROM emp WHERE empno = 7788)WHERE empno = 1000;執(zhí)行結(jié)果:40, 刪除數(shù)據(jù) 刪除數(shù)據(jù)的基本語(yǔ)法
42、如下:DELETE FROM表名 WHERE 條件;要從表中刪除滿足條件的記錄,WHERE條件一般不能省略,如果省略就會(huì)刪除表的全部數(shù)據(jù)?!居?xùn)練1】 刪除雇員編號(hào)為1000的新插入的雇員。步驟1:刪除編號(hào)為1000的雇員:DELETE FROM emp WHERE empno=1000;如果確實(shí)要?jiǎng)h除一個(gè)大表里的全部記錄,可以用TRUNCATE 命令,它可以釋放占用的數(shù)據(jù)塊表空間,語(yǔ)法為:TRUNCATE TABLE 表名;徹底刪除manager表的內(nèi)容。執(zhí)行以下的命令:TRUNCATE TABLE manager;TRUNCATE TABLE命令用來(lái)刪除表的全部數(shù)據(jù)而不是刪除表,表依舊存在。
43、41,數(shù)據(jù)庫(kù)事務(wù) 事務(wù)是由相關(guān)操作構(gòu)成的一個(gè)完整的操作單元。兩次連續(xù)成功的COMMIT或ROLLBACK之間的操作,稱為一個(gè)事務(wù)。在一個(gè)事務(wù)內(nèi),數(shù)據(jù)的修改一起提交或撤銷,如果發(fā)生故障或系統(tǒng)錯(cuò)誤,整個(gè)事務(wù)也會(huì)自動(dòng)撤銷。我們可以這樣理解數(shù)據(jù)庫(kù)事物:對(duì)數(shù)據(jù)庫(kù)所做的一系列修改,在修改過(guò)程中,暫時(shí)不寫(xiě)入數(shù)據(jù)庫(kù),而是緩存起來(lái),用戶在自己的終端可以預(yù)覽變化,直到全部修改完成,并經(jīng)過(guò)檢查確認(rèn)無(wú)誤后,一次性提交并寫(xiě)入數(shù)據(jù)庫(kù),在提交之前,必要的話所做的修改都可以取消。提交之后,就不能撤銷,提交成功后其他用戶才可以通過(guò)查詢?yōu)g覽數(shù)據(jù)的變化。以事務(wù)的方式對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn),有如下的優(yōu)點(diǎn):* 把邏輯相關(guān)的操作分成了一個(gè)組。
44、* 在數(shù)據(jù)永久改變前,可以預(yù)覽數(shù)據(jù)變化。* 能夠保證數(shù)據(jù)的讀一致性。數(shù)據(jù)庫(kù)事務(wù)處理可分為隱式和顯式兩種。顯式事務(wù)操作通過(guò)命令實(shí)現(xiàn),隱式事務(wù)由系統(tǒng)自動(dòng)完成提交或撤銷(回退)工作,無(wú)需用戶的干預(yù)。隱式提交的情況包括:當(dāng)用戶正常退出SQL*Plus或執(zhí)行CREATE、DROP、GRANT、REVOKE等命令時(shí)會(huì)發(fā)生事務(wù)的自動(dòng)提交。還有一種情況,如果把系統(tǒng)的環(huán)境變量AUTOCOMMIT設(shè)置為ON(默認(rèn)狀態(tài)為OFF),則每當(dāng)執(zhí)行一條INSERT、DELETE或UPDATE命令對(duì)數(shù)據(jù)進(jìn)行修改后,就會(huì)馬上自動(dòng)提交。設(shè)置命令格式如下:SET AUTOCOMMIT ON/OFF隱式回退的情況包括:當(dāng)異常結(jié)束SQ
45、L*Plus或系統(tǒng)故障發(fā)生時(shí),會(huì)發(fā)生事務(wù)的自動(dòng)回退。顯式事務(wù)處理的數(shù)據(jù)庫(kù)事務(wù)操作語(yǔ)句有3條,如表3-2所示。COMMIT操作把多個(gè)步驟對(duì)數(shù)據(jù)庫(kù)的修改,一次性地永久寫(xiě)入數(shù)據(jù)庫(kù),代表數(shù)據(jù)庫(kù)事務(wù)的成功執(zhí)行。ROLLBACK操作在發(fā)生問(wèn)題時(shí),把對(duì)數(shù)據(jù)庫(kù)已經(jīng)作出的修改撤消,回退到修改前的狀態(tài)。在操作過(guò)程中,一旦發(fā)生問(wèn)題,如果還沒(méi)有提交操作,則隨時(shí)可以使用ROLLBACK來(lái)撤消前面的操作。SAVEPOINT則用于在事務(wù)中間建立一些保存點(diǎn),ROLLBACK可以使操作回退到這些點(diǎn)上邊,而不必撤銷全部的操作。一旦COMMIT完成,就不能用ROLLBACK來(lái)取消已經(jīng)提交的操作。一旦ROLLBACK完成,被撤消的操
46、作要重做,必須重新執(zhí)行相關(guān)操作語(yǔ)句如何開(kāi)始一個(gè)新的事務(wù)呢?一般情況下,開(kāi)始一個(gè)會(huì)話(即連接數(shù)據(jù)庫(kù)),執(zhí)行第一條SQL語(yǔ)句將開(kāi)始一個(gè)新的事務(wù),或執(zhí)行COMMIT提交或ROLLBACK撤銷事務(wù),也標(biāo)志新的事務(wù)的開(kāi)始。另外,執(zhí)行DDL(如CREATE)或DCL命令也將自動(dòng)提交前一個(gè)事務(wù)而開(kāi)始一個(gè)新的事務(wù)。數(shù)據(jù)在修改的時(shí)候會(huì)對(duì)記錄進(jìn)行鎖定,其他會(huì)話不能對(duì)鎖定的記錄進(jìn)行修改或加鎖,只有當(dāng)前會(huì)話提交或撤銷后,記錄的鎖定才會(huì)釋放。 我們通過(guò)以下的訓(xùn)練來(lái)為雇員SCOTT增加工資,SCOTT的雇員號(hào)為7788。 學(xué)習(xí)使用COMMIT和ROLLBACK。步驟1:執(zhí)行以下命令,提交尚未提交的操作:COMMIT;執(zhí)行
47、結(jié)果:提交完成。顯示SCOTT的現(xiàn)有工資:SELECT ename,sal FROM emp WHERE empno=7788;執(zhí)行結(jié)果:ENAME SAL- -SCOTT 3000步驟2:修改雇員SCOTT的工資:UPDATE emp SET sal=sal+100 WHERE empno=7788;執(zhí)行結(jié)果:已更新1行。顯示修改后的SCOTT的工資:SELECT ename,sal FROM emp WHERE empno=7788;執(zhí)行結(jié)果:ENAME SAL- -SCOTT 3100步驟3:假定修改操作后發(fā)現(xiàn)增加的工資應(yīng)該為1000而不是100,為了取消剛做的操作,可以執(zhí)行以下命令:R
48、OLLBACK;執(zhí)行結(jié)果:回退已完成。顯示回退后SCOTT的工資恢復(fù)為3000:SELECT ename,sal FROM emp WHERE empno=7788;執(zhí)行結(jié)果:ENAME SAL- -SCOTT 3000步驟4:重新修改雇員SCOTT的工資,工資在原有基礎(chǔ)上增加1000:UPDATE emp SET sal=sal+1000 WHERE empno=7788;執(zhí)行結(jié)果:已更新 1 行。顯示修改后SCOTT的工資:SELECT ename,sal FROM emp WHERE empno=7788;執(zhí)行結(jié)果:ENAME SAL- -SCOTT 4000步驟5:經(jīng)查看修改結(jié)果正確,
49、提交所做的修改:COMMIT;執(zhí)行結(jié)果:提交完成。 說(shuō)明:在執(zhí)行COMMIT后,工資的修改被永久寫(xiě)入數(shù)據(jù)庫(kù)。本訓(xùn)練的第1步,先使用COMMIT命令提交原來(lái)的操作,同時(shí)標(biāo)志一個(gè)新的事務(wù)的開(kāi)始。注意:在事務(wù)執(zhí)行過(guò)程中,隨時(shí)可以預(yù)覽數(shù)據(jù)的變化。對(duì)于比較大的事務(wù),可以使用SAVEPOINT命令在事務(wù)中間劃分一些斷點(diǎn),用來(lái)作為回退點(diǎn)?!居?xùn)練2】 學(xué)習(xí)使用SAVEPOINT命令。步驟1:插入一個(gè)雇員:INSERT INTO emp(empno, ename, job)VALUES (3000, '小馬','STUDENT');執(zhí)行結(jié)果:已創(chuàng)建 1 行。步驟2:插
50、入保存點(diǎn),檢查點(diǎn)的名稱為PA:SAVEPOINT pa;執(zhí)行結(jié)果:保存點(diǎn)已創(chuàng)建。步驟3:插入另一個(gè)雇員:INSERT INTO emp(empno, ename, job)VALUES (3001, '小黃','STUDENT');執(zhí)行結(jié)果:已創(chuàng)建 1 行。 步驟4:回退到保存點(diǎn)PA,則后插入的小黃被取消,而小馬仍然保留。ROLLBACK TOpa;執(zhí)行結(jié)果:回退已完成。步驟5: 提交所做的修改:COMMIT;執(zhí)行結(jié)果:提交完成。說(shuō)明:第4步的回退,將回退到保存點(diǎn)PA,即第3步被撤銷。所以最后的COMMIT只提交了對(duì)小馬的插入。請(qǐng)自行檢查插入的雇員。在Oracl
51、e數(shù)據(jù)庫(kù)中,有一個(gè)叫回滾段的特殊的存儲(chǔ)區(qū)域。在提交一個(gè)事物之前,如果用戶進(jìn)行了數(shù)據(jù)的修改,在所謂的回滾段中將保存變化前的數(shù)據(jù)。有了回滾段才能在必要時(shí)使用ROLLBACK命令或自動(dòng)地進(jìn)行數(shù)據(jù)撤銷。在提交事物之前,用戶自己可以看到修改的數(shù)據(jù),但因?yàn)樾薷倪€沒(méi)有最終提交,其他用戶看到的應(yīng)該是原來(lái)的數(shù)據(jù),也就是回滾段中的數(shù)據(jù),這時(shí)用戶自己看到的數(shù)據(jù)和其他用戶看到的數(shù)據(jù)是不同的,只有提交發(fā)生后,變化的數(shù)據(jù)才會(huì)被寫(xiě)入數(shù)據(jù)庫(kù),此時(shí)用戶自己看到的數(shù)據(jù)和其他用戶看到的數(shù)據(jù)才是一致的,這叫做數(shù)據(jù)的讀一致性。當(dāng)?shù)?個(gè)SQL*Plus會(huì)話刪除一條后,第2個(gè)SQL*Plus會(huì)話仍然可以看到該條記錄,直到第1個(gè)SQL*Plus會(huì)話提交(COMMIT)該刪除操作后,兩個(gè)會(huì)話看到的才是一致的數(shù)據(jù)。42,表的鎖定 鎖出現(xiàn)在數(shù)據(jù)共享的場(chǎng)合,用來(lái)保證數(shù)據(jù)的一致性。當(dāng)多個(gè)會(huì)話同時(shí)修改一個(gè)表時(shí),需要對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的鎖定。鎖有“只讀鎖”、“排它鎖”,“共享排它鎖”等多種類
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 校園教學(xué)樓智慧校園系統(tǒng)安裝合同
- 太陽(yáng)能項(xiàng)目合同發(fā)電效率
- 劇院租賃合同模板
- 保安設(shè)備融資租賃合同示范
- 醫(yī)療設(shè)備安裝工程總承包合同
- 農(nóng)業(yè)設(shè)施保溫施工合同
- 紡織服裝展位租賃協(xié)議
- 珠寶首飾存儲(chǔ)續(xù)約合同
- 生態(tài)工業(yè)園房產(chǎn)購(gòu)置合同模板
- 真石漆施工合同私人會(huì)所外墻翻新
- 2024年軍隊(duì)文職統(tǒng)一考試《專業(yè)科目》管理學(xué)試卷(網(wǎng)友回憶版)含解析
- DB13-T 5863-2023 造血干細(xì)胞移植病區(qū)醫(yī)院感染預(yù)防與控制規(guī)范
- 山東省水利水電工程施工企業(yè)安全生產(chǎn)管理人員(C類)考試題庫(kù)(含答案)
- 初中語(yǔ)文講座:《素養(yǎng)導(dǎo)向初中語(yǔ)文大單元教學(xué)》課件
- DPtech-FW1000系列防火墻系統(tǒng)操作手冊(cè)
- 2024-2030年中國(guó)婦科凝膠行業(yè)市場(chǎng)發(fā)展分析及前景趨勢(shì)與投資研究報(bào)告
- 2024過(guò)敏性休克搶救指南(2024)課件干貨分享
- 電批風(fēng)批扭力測(cè)試記錄
- (高清版)WS∕T 389-2024 醫(yī)學(xué)X線檢查操作規(guī)程
- 店鋪(初級(jí))營(yíng)銷師認(rèn)證考試題庫(kù)附有答案
- 《寧夏回族自治區(qū)基本醫(yī)療保險(xiǎn)工傷保險(xiǎn)和生育保險(xiǎn)醫(yī)用耗材支付目錄》
評(píng)論
0/150
提交評(píng)論