




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、一:Oracle認證,與其它數據庫比較,安裝Oracle安裝會自動的生成sys用戶和system用戶: (1) sys用戶是超級用戶,具有最高權限,具有sysdba角色,有create database的權限,該用戶默認的密碼是change_on_install (2) system用戶是管理操作員,權限也很大。具有sysoper角色,沒有create database的權限,默認的密碼是manager (3) 一般講,對數據庫維護,使用system用戶登錄就可以拉 也就是說sys和system這兩個用戶最大的區別是在于有沒有create database的權限。二: Oracle的基本使用-
2、基本命令sql*plus的常用命令 連接命令1.connect 用法:conn 用戶名/密碼網絡服務名as sysdba/sysoper當用特權用戶身份連接時,必須帶上as sysdba或是as sysoper 2.disconnect 說明: 該命令用來斷開與當前數據庫的連接 3.psssword 說明: 該命令用于修改用戶的密碼,如果要想修改其它用戶的密碼,需要用sys/system登錄。 4.show user 說明: 顯示當前用戶名 說明: 該命令會斷開與數據庫的連接,同時會退出sql*plus 文件操作命令1.start和 說明: 運行sql腳本 案例: sql> d:a.sq
3、l或是sql>start d:a.sql ,這樣會把d:a.sql這個文件打開 說明: 該命令可以將sql*plus屏幕上的內容輸出到指定文件中去。 案例: sql>spool d:b.sql 并輸入 sql>spool off 交互式命令1.&說明:可以替代變量,而該變量在執行時,需要用戶輸入。 select * from emp where job='&job'; 說明:該命令可以編輯指定的sql腳本 案例:SQL>edit d:a.sql 說明:該命令可以將sql*plus屏幕上的內容輸出到指定文件中去。 spool d:b.sql
4、 并輸入 spool off 顯示和設置環境變量概述:可以用來控制輸出的各種格式,set show如果希望永久的保存相關的設置,可以去修改glogin.sql腳本 說明:設置顯示行的寬度,默認是80個字符 show linesize set linesize 90 說明:設置每頁顯示的行數目,默認是14 用法和linesize一樣 至于其它環境參數的使用也是大同小異 三:oracle用戶管理oracle用戶的管理 創建用戶 概述:在oracle中要創建一個新的用戶使用create user語句,一般是具有dba(數據庫管理員)的權限才能使用。 create user 用戶名 identifie
5、d by 密碼; (oracle有個毛病,密碼必須以字母開頭,如果以字母開頭,它不會創建用戶) 給用戶修改密碼 概述:如果給自己修改密碼可以直接使用 password 用戶名 如果給別人修改密碼則需要具有dba的權限,或是擁有alter user的系統權限 SQL> alter user 用戶名 identified by 新密碼 刪除用戶 概述:一般以dba的身份去刪除某個用戶,如果用其它用戶去刪除用戶則需要具有drop user的權限。 比如 drop user 用戶名 【cascade】 在刪除用戶時,注意: 如果要刪除的用戶,已經創建了表,那么就需要在刪除的時候帶一個參數casc
6、ade; 用戶管理的綜合案例 概述:創建的新用戶是沒有任何權限的,甚至連登陸的數據庫的權限都沒有,需要為其指定相應的權限。給一個用戶賦權限使用命令grant,回收權限使用命令revoke。 為了給講清楚用戶的管理,這里我給大家舉一個案例。 SQL> conn xiaoming/m12; ERROR: ORA-01045: user XIAOMING lacks CREATE SESSION privilege; logon denied 警告: 您不再連接到 ORACLE。 SQL> show user; USER 為 "" SQL> conn syste
7、m/p; 已連接。 SQL> grant connect to xiaoming; 授權成功。 SQL> conn xiaoming/m12; 已連接。 SQL> 注意:grant connect to xiaoming;在這里,準確的講,connect不是權限,而是角色。 看圖: 現在說下對象權限,現在要做這么件事情: * 希望xiaoming用戶可以去查詢emp表 * 希望xiaoming用戶可以去查詢scott的emp表 grant select on emp to xiaoming * 希望xiaoming用戶可以去修改scott的emp表
8、 grant update on emp to xiaoming * 希望xiaoming用戶可以去修改/刪除,查詢,添加scott的emp表 grant all on emp to xiaoming * scott希望收回xiaoming對emp表的查詢權限 revoke select on emp from xiaoming /對權限的維護。 * 希望xiaoming用戶可以去查詢scott的emp表/還希望xiaoming可以把這個權限繼續給別人。 -如果是對象權限,就加入 with grant option grant select on em
9、p to xiaoming with grant option 我的操作過程: SQL> conn scott/tiger; 已連接。 SQL> grant select on scott.emp to xiaoming with grant option; 授權成功。 SQL> conn system/p; 已連接。 SQL> create user xiaohong identified by m123; 用戶已創建。 SQL> grant connect to xiaohong; 授權成功。 SQL> conn xiaoming/m12; 已連接。 S
10、QL> grant select on scott.emp to xiaohong; 授權成功。 -如果是系統權限。 system給xiaoming權限時: grant connect to xiaoming with admin option 問題:如果scott把xiaoming對emp表的查詢權限回收,那么xiaohong會怎樣? 答案:被回收。 下面是我的操作過程: SQL> conn scott/tiger; 已連接。 SQL> revoke select on emp from xiaoming; 撤銷成功。 SQL> conn xiaohong/m123;
11、 已連接。 SQL> select * from scott.emp; select * from scott.emp 第 1 行出現錯誤: ORA-00942: 表或視圖不存在 結果顯示:小紅受到誅連了。使用profile管理用戶口令 概述:profile是口令限制,資源限制的命令集合,當建立數據庫的,oracle會自動建立名稱為default的profile。當建立用戶沒有指定profile選項,那么oracle就會將default分配給用戶。 概述:指定該賬戶(用戶)登陸時最多可以輸入密碼的次數,也可以指定用戶鎖定的時間(天)一般用dba的身份去執行該命令。 例子:指定scott這
12、個用戶最多只能嘗試3次登陸,鎖定時間為2天,讓我們看看怎么實現。 創建profile文件 SQL> create profile lock_account limit failed_login_attempts 3 password_lock_time 2; SQL> alter user scott profile lock_account; 2.給賬戶(用戶)解鎖 SQL> alter user tea account unlock; 為了讓用戶定期修改密碼可以使用終止口令的指令來完成,同樣這個命令也需要dba的身份來操作。 例子:給前面創建的用戶tea創建一個profi
13、le文件,要求該用戶每隔10天要修改自己的登陸密碼,寬限期為2天。看看怎么做。 SQL> create profile myprofile limit password_life_time 10 password_grace_time 2; SQL> alter user tea profile myprofile; 口令歷史 概述:如果希望用戶在修改密碼時,不能使用以前使用過的密碼,可使用口令歷史,這樣oracle就會將口令修改的信息存放到數據字典中,這樣當用戶修改密碼時,oracle就會對新舊密碼進行比較,當發現新舊密碼一樣時,就提示用戶重新輸入密碼。 例子: 1)建立prof
14、ile SQL>create profile password_history limit password_life_time 10 password_grace_time 2 password_reuse_time 10 password_reuse_time /指定口令可重用時間即10天后就可以重用 2)分配給某個用戶 刪除profile 概述:當不需要某個profile文件時,可以刪除該文件。 SQL> drop profile password_history 【casade】 注意:文件刪除后,用這個文件去約束的那些用戶通通也都被釋放了。加了casade,就會把級聯的相
15、關東西也給刪除掉四:oracle表的管理(數據類型,表創建刪除,數據CRUD操作)oracle的表的管理 表名和列的命名規則 · 必須以字母開頭 · 長度不能超過30個字符 · 不能使用oracle的保留字 · 只能使用如下字符 A-Z,a-z,0-9,$,#等 oracle支持的數據類型字符類char 定長 最大2000個字符。 例子:char(10) 小韓前四個字符放小韓,后添6個空格補全 如小韓 varchar2(20) 變長 最大4000個字符。 例子:varchar2(10
16、) 小韓 oracle分配四個字符。這樣可以節省空間。 clob(character large object) 字符型大對象 最大4G char 查詢的速度極快浪費空間,查詢比較多的數據用。 varchar 節省空間 數字型number范圍 -10的38次方 到 10的38次方 可以表示整數,也可以表示小數 number(5,2) 表示一位小數有5位有效數,2位小數 范圍:-999.99到999.99 number(5) 表示一個5位整數 范圍99999到-99999 日期類型 date 包含年月日和時分秒 oracle默認格式 1-1月-1999 tim
17、estamp 這是oracle9i對date數據類型的擴展。可以精確到毫秒。 圖片blob 二進制數據 可以存放圖片/聲音 4G 一般來講,在真實項目中是不會把圖片和聲音真的往數據庫里存放,一般存放圖片、視頻的路徑,如果安全需要比較高的話,則放入數據庫。 怎樣創建表 建表-學生表 create table student ( -表名 xh nu
18、mber(4), -學號 xm varchar2(20), -姓名 sex char(2), -性別 &
19、#160; birthday date, -出生日期 sal number(7,2) -獎學金 ); -班級表 CREATE TABLE class( classId NUMBER(2), cName VARCHAR2(4
20、0); 修改表 添加一個字段SQL>ALTER TABLE student add (classId NUMBER(2); 修改一個字段的長度 SQL>ALTER TABLE student MODIFY (xm VARCHAR2(30); 修改字段的類型/或是名字(不能有數據) 不建議做 SQL>ALTER TABLE student modify (xm CHAR(30); 刪除一個字段 不建議做(刪了之后,順序就變了。加就沒問題,應為是加在后面)SQL>ALTER TABLE student DROP COLUMN sal; 修改表的名字 &
21、#160; 很少有這種需求 SQL>RENAME student TO stu; 刪除表 SQL>DROP TABLE student; 添加數據 所有字段都插入數據 INSERT INTO student VALUES ('A001','張三','男','01-5月-05', 10); oracle中默認的日期格式dd-mon-yy dd日子(天) mon 月份 yy 2位的年 09-6月-99 1999年6月9日 修改日期的默認格式(臨時修改,數據庫重啟后仍為默認;如要修改需要修
22、改注冊表) ALTER SESSION SET NLS_DATE_FORMAT ='yyyy-mm-dd' 修改后,可以用我們熟悉的格式添加日期類型: INSERT INTO student VALUES ('A002','MIKE','男','1905-05-06', 10); 插入部分字段 INSERT INTO student(xh, xm, sex) VALUES ('A003','JOHN','女'); 插入空值 INSERT INTO student(xh
23、, xm, sex, birthday) VALUES ('A004','MARTIN','男', null); 問題來了,如果你要查詢student表里birthday為null的記錄,怎么寫sql呢? 錯誤寫法:select * from student where birthday = null; 正確寫法:select * from student where birthday is null; 如果要查詢birthday不為null,則應該這樣寫: select * from student where birthday is not
24、null; 修改數據 修改一個字段UPDATE student SET sex = '女' WHERE xh = 'A001' 修改多個字段UPDATE student SET sex = '男', birthday = '1984-04-01' WHERE xh = 'A001' 修改含有null值的數據 不要用 = null 而是用 is null; SELECT * FROM student WHERE birthday IS null; 刪除數據DELETE FROM student; 刪除所有記錄,表結構
25、還在,寫日志,可以恢復的,速度慢。 Delete 的數據可以恢復。 savepoint a; -創建保存點 DELETE FROM student; rollback to a; -恢復到保存點 一個有經驗的DBA,在確保完成無誤的情況下要定期創建還原點。 DROP TABLE student; -刪除表的結構和數據; delete from student WHERE xh = 'A001' -刪除一條記錄; truncate TABLE student; -刪除表中的所有記錄,表結構還在,不寫日志,無法找回刪除的記錄,速度快。五:oracle表查詢(1)orac
26、le表基本查詢 介紹在我們講解的過程中我們利用scott用戶存在的幾張表(emp,dept)為大家演示如何使用select語句,select語句在軟件編程中非常有用,希望大家好好的掌握。 emp 雇員表 clerk 普員工 salesman 銷售 manager 經理 analyst 分析師 president 總裁 mgr 上級的編號 hiredate 入職時間 sal 月工資 comm 獎金 deptno 部門 dept部門表 deptno 部門編號 accounting 財務部 research 研發部 operations 業
27、務部 loc 部門所在地點 salgrade 工資級別 grade 級別 losal 最低工資 hisal 最高工資 簡單的查詢語句 查看表結構DESC emp; 查詢所有列SELECT * FROM dept; 切忌動不動就用select * SET TIMING ON; 打開顯示操作時間的開關,在下面顯示查詢時間。 CREATE TABLE users(userId VARCHAR2(10), uName VARCHAR2 (20), uPassw VARCH
28、AR2(30); INSERT INTO users VALUES('a0001','啊啊啊啊','aaaaaaaaaaaaaaaaaaaaaaa'); -從自己復制,加大數據量 大概幾萬行就可以了 可以用來測試sql語句執行效率 INSERT INTO users (userId,UNAME,UPASSW) SELECT * FROM users; SELECT COUNT (*) FROM users;統計行數 查詢指定列SELECT ename, sal, job, deptno FROM emp; 如何取消重復行DISTINC
29、T SELECT DISTINCT deptno, job FROM emp; 查詢SMITH所在部門,工作,薪水 SELECT deptno,job,sal FROM emp WHERE ename = 'SMITH' 注意:oracle對內容的大小寫是區分的,所以ename='SMITH'和ename='smith'是不同的 使用算術表達式 nvl null 問題:如何顯示每個雇員的年工資? SELECT sal*13+nvl(comm, 0)*13 "年薪" , ename, comm FROM e
30、mp; 使用列的別名SELECT ename "姓名", sal*12 AS "年收入" FROM emp; 如何處理null值使用nvl函數來處理 如何連接字符串(|)SELECT ename | ' is a ' | job FROM emp; 使用where子句問題:如何顯示工資高于3000的 員工? SELECT * FROM emp WHERE sal > 3000; 問題:如何查找1982.1.1后入職的員工? SELECT ename,hiredate FROM emp WHERE hiredate >
31、;'1-1月-1982' 問題:如何顯示工資在2000到3000的員工? SELECT ename,sal FROM emp WHERE sal >=2000 AND sal <= 3000; 如何使用like操作符 %:表示0到多個字符 _:表示任意單個字符 問題:如何顯示首字符為S的員工姓名和工資? SELECT ename,sal FROM emp WHERE ename like 'S%' 如何顯示第三個字符為大寫O的所有員工的姓名和工資? SELECT ename,sal FROM emp WHERE ename like
32、39;_O%' 在where條件中使用in 問題:如何顯示empno為7844, 7839,123,456 的雇員情況? SELECT * FROM emp WHERE empno in (7844, 7839,123,456); 使用is null的操作符 問題:如何顯示沒有上級的雇員的情況? 錯誤寫法:select * from emp where mgr = '' 正確寫法:SELECT * FROM emp WHERE mgr is null;六:oracle表查詢(2)使用邏輯操作符號 問題:查詢工資高于500或者是崗位為MANAGER的雇員,同時還要滿足他們
33、的姓名首字母為大寫的J? SELECT * FROM emp WHERE (sal >500 or job = 'MANAGER') and ename LIKE 'J%' 使用order by 字句 默認asc 問題:如何按照工資的從低到高的順序顯示雇員的信息? SELECT * FROM emp ORDER by sal; 問題:按照部門號升序而雇員的工資降序排列 SELECT * FROM emp ORDER by deptno, sal DESC; 使用列的別名排序問題:按年薪排序 select ename, (sal+nv
34、l(comm,0)*12 "年薪" from emp order by "年薪" asc; 別名需要使用“”號圈中,英文不需要“”號 分頁查詢 等學了子查詢再說吧。 Clear 清屏命令 oracle表復雜查詢 說明在實際應用中經常需要執行復雜的數據統計,經常需要顯示多張表的數據,現在我們給大家介紹較為復雜的select語句 數據分組 max,min, avg, sum, count 問題:如何顯示所有員工中最高工資和最低工資? SELECT MAX(sal),min(sal) FROM emp e;
35、160; 最高工資那個人是誰? 錯誤寫法:select ename, sal from emp where sal=max(sal); 正確寫法:select ename, sal from emp where sal=(select max(sal) from emp); 注意:select ename, max(sal) from emp;這語句執行的時候會報錯,說ORA-00937:非單組分組函數。因為max是分組函數,而ename不是分組函數. 但是select min(sal), max(sal) from emp;這句是可以執行的。因為min和max都是分組函數,就是說:如果列里面
36、有一個分組函數,其它的都必須是分組函數,否則就出錯。這是語法規定的問題:如何顯示所有員工的平均工資和工資總和? 問題:如何計算總共有多少員工問題:如何擴展要求: 查詢最高工資員工的名字,工作崗位 SELECT ename, job, sal FROM emp e where sal = (SELECT MAX(sal) FROM emp); 顯示工資高于平均工資的員工信息 SELECT * FROM emp e where sal > (SELECT AVG(sal) FROM emp); group by 和 having子句 group by用于對查詢的結果分組統計, having子
37、句用于限制分組顯示結果。 問題:如何顯示每個部門的平均工資和最高工資? SELECT AVG(sal), MAX(sal), deptno FROM emp GROUP by deptno; (注意:這里暗藏了一點,如果你要分組查詢的話,分組的字段deptno一定要出現在查詢的列表里面,否則會報錯。因為分組的字段都不出現的話,就沒辦法分組了) 問題:顯示每個部門的每種崗位的平均工資和最低工資? SELECT min(sal), AVG(sal), deptno, job FROM emp GROUP by deptno, job; 問題:顯示平均工資低于2000的部門號和它的平均工資? SEL
38、ECT AVG(sal), MAX(sal), deptno FROM emp GROUP by deptno having AVG(sal) < 2000; 對數據分組的總結 1 分組函數只能出現在選擇列表、having、order by子句中(不能出現在where中) 2 如果在select語句中同時包含有group by, having, order by 那么它們的順序是group by, having, order by 3 在選擇列中如果有列、表達式和分組函數,那么這些列和表達式必須有一個出現在group by 子句中,否則就會出錯。 如SELECT deptno, AVG(
39、sal), d.dname FROM emp e, e.sal FROM emp e, s.grade FROM emp e, d.dname FROM emp e, boss.ename FROM emp worker,emp boss WHERE worker.mgr = boss.empno AND worker.ename = 'FORD' 子查詢 什么是子查詢子查詢是指嵌入在其他sql語句中的select語句,也叫嵌套查詢。 單行子查詢 單行子查詢是指只返回一行數據的子查詢語句 請思考:顯示與SMITH同部門的所有員工? 思路:1 查詢出SMITH的部門號 selec
40、t deptno from emp WHERE ename = 'SMITH' 2 顯示 SELECT * FROM emp WHERE deptno = (select deptno from emp WHERE ename = 'SMITH'); 數據庫在執行sql 是從左到右掃描的, 如果有括號的話,括號里面的先被優先執行。 多行子查詢多行子查詢指返回多行數據的子查詢 請思考:如何查詢和部門10的工作相同的雇員的名字、崗位、工資、部門號 SELECT DISTINCT job FROM emp WHERE deptno = 10; SELECT * FRO
41、M emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno = 10); (注意:不能用job=.,因為等號=是一對一的) 在多行子查詢中使用all操作符問題:如何顯示工資比部門30的所有員工的工資高的員工的姓名、工資和部門號? SELECT ename, sal, deptno FROM emp WHERE sal > all (SELECT sal FROM emp WHERE deptno = 30); 擴展要求: 大家想想還有沒有別的查詢方法。 SELECT ename, sal, deptno FROM emp W
42、HERE sal > (SELECT MAX(sal) FROM emp WHERE deptno = 30); 執行效率上, 函數高得多 在多行子查詢中使用any操作符問題:如何顯示工資比部門30的任意一個員工的工資高的員工姓名、工資和部門號? SELECT ename, sal, deptno FROM emp WHERE sal > ANY (SELECT sal FROM emp WHERE deptno = 30); 擴展要求: 大家想想還有沒有別的查詢方法。 SELECT ename, sal, deptno FROM emp WHERE sal > (SELEC
43、T min(sal) FROM emp WHERE deptno = 30); 多列子查詢單行子查詢是指子查詢只返回單列、單行數據,多行子查詢是指返回單列多行數據,都是針對單列而言的,而多列子查詢是指查詢返回多個列數據的子查詢語句。 請思考如何查詢與SMITH的部門和崗位完全相同的所有雇員。 SELECT deptno, job FROM emp WHERE ename = 'SMITH' SELECT * FROM emp WHERE (deptno, job) = (SELECT deptno, job FROM emp WHERE ename = 'SMITH
44、39;); 在from子句中使用子查詢請思考:如何顯示高于自己部門平均工資的員工的信息 思路: 1. 查出各個部門的平均工資和部門號 SELECT deptno, ds.mysal FROM emp e, (SELECT deptno, ds.mysal FROM emp e, (SELECT deptno, AVG(sal) mysal FROM emp GROUP by deptno) as ds WHERE e.deptno = ds.deptno AND e.sal > ds.mysal; 在ds前不能加as,否則會報錯 (給表取別名的時候,不能加as;但是給列取別名
45、,是可以加as的) 分頁查詢按雇員的id號升序取出 oracle的分頁一共有三種方式 1.根據rowid來分 select * from t_xiaoxi where rowid in (select rid from (select rownum rn, rid from(select rowid rid, cid from t_xiaoxi order by cid desc) where rownum<10000) where rn>9980) order by cid desc; 執行時間0.03秒 2.按分析函數來分 select * from
46、 (select t.*, row_number() over(order by cid desc) rk from t_xiaoxi t) where rk<10000 and rk>9980; 執行時間1.01秒 3.按rownum來分 select * from (select t.*,rownum rn from(select * from t_xiaoxi order by cid desc)t where rownum<10000) where rn>9980; 執行時間0.1秒 其中t_xiaoxi為表名稱,cid為表的關鍵字段,取按cid降
47、序排序后的第9981-9999條記錄,t_xiaoxi表有70000多條記錄。 個人感覺1的效率最好,3次之,2最差。 /測試通過的分頁查詢okokok select * from (select a1.*, rownum rn from(select ename,job from emp) a1 where rownum<=10)where rn>=5; 下面最主要介紹第三種:按rownum來分 1. rownum 分頁 SELECT * FROM emp; 2. 顯示rownumoracle分配的 SEL
48、ECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e; rn相當于Oracle分配的行的ID號 3.挑選出610條記錄 先查出1-10條記錄 SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM <= 10; 如果后面加上rownum>=6是不行的, 4. 然后查出6-10條記錄 SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM <= 10) WHERE
49、rn >= 6; 5. 幾個查詢變化 a. 指定查詢列,只需要修改最里層的子查詢 只查詢雇員的編號和工資 SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT ename, sal FROM emp) e WHERE ROWNUM <= 10) WHERE rn >= 6; b. 排序查詢,只需要修改最里層的子查詢 工資排序后查詢6-10條數據 SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT ename, sal FROM emp ORDER by sal) e WHERE RO
50、WNUM <= 10) WHERE rn >= 6; 用查詢結果創建新表這個命令是一種快捷的建表方式 CREATE TABLE mytable (id, name, sal, job, deptno) as SELECT empno, ename, sal, job, deptno FROM emp; 創建好之后,desc mytable;和select * from mytable;看看結果如何? 合并查詢 合并查詢有時在實際應用中,為了合并多個select語句的結果,可以使用集合操作符號union,union all,intersect,minus 多用于數據量比較大的數據局庫
51、,運行速度快。 1). union 該操作符用于取得兩個結果集的并集。當使用該操作符時,會自動去掉結果集中重復行。 SELECT ename, sal, job FROM emp WHERE sal >2500 UNION SELECT ename, sal, job FROM emp WHERE job = 'MANAGER' 2).union all 該操作符與union相似,但是它不會取消重復行,而且不會排序。 SELECT ename, sal, job FROM emp WHERE sal >2500 UNION ALL SELECT ename, sal
52、, job FROM emp WHERE job = 'MANAGER' 該操作符用于取得兩個結果集的并集。當使用該操作符時,會自動去掉結果集中重復行。 3). intersect 使用該操作符用于取得兩個結果集的交集。 SELECT ename, sal, job FROM emp WHERE sal >2500 INTERSECT SELECT ename, sal, job FROM emp WHERE job = 'MANAGER' 4). minus 使用改操作符用于取得兩個結果集的差集,他只會顯示存在第一個集合中,而不存在第二個集
53、合中的數據。 SELECT ename, sal, job FROM emp WHERE sal >2500 MINUS SELECT ename, sal, job FROM emp WHERE job = 'MANAGER' (MINUS就是減法的意思) 創建數據庫有兩種方法: 1). 通過oracle提供的向導工具。 database Configuration Assistant 【數據庫配置助手】 2).我們可以用手工步驟直接創建。七:java操作oraclejava連接oracle 介紹:前面我們一直在plsql中操作or
54、acle,那么如何在java 程序中操作數據庫呢? 下面我們舉例說明,寫一個java,分頁顯示emp表的用戶信息。 Java代碼 1. package com.sp; 2. 3. import java.sql.Connection; 4. import java.sql.DriverManager; 5. import java.sql.ResultSet; 6. import java.sql.Statement;
55、60; 7. 8. /演示 如何使用 jdbc_odbc橋連接方式 9. public class TestOracle 10. 11. public static void main(String args) 12. &
56、#160;try 13. 14. / 1.加載驅動 15. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 16.
57、 17. / 2.得到連接 18. Connection ct = DriverManager.getConnection( 19.
58、0; "jdbc.odbc:testConnectOracle", "scott", 20. 21. "tiger"); 22. 23.
59、; / 從下面開始,和SQL Server一模一樣 24. Statement sm = ct.createStatement(); 25. ResultSet rs = s
60、m.executeQuery("select * from emp"); 26. while (rs.next() 27. /用戶名
61、; 28. System.out.println("用戶名: "+rs.getString(2); 29. /默認是從1開始編號的
62、0;30. 31. catch (Exception e) 32. e.printStackTrace();
63、 33. 34. 35. package com.sp;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;/演示 如何使用 jdbc_odbc橋連接方式public class TestOracle p
64、ublic static void main(String args) try Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection ct = DriverManager.getConnection("jdbc.odbc:testConnectOracle", "scott", "tiger");/ 從下面開始,和SQL Server一模一樣Statement sm = ct.createStatement();ResultSet rs = sm.exec
65、uteQuery("select * from emp");while (rs.next() /用戶名System.out.println("用戶名: "+rs.getString(2);/默認是從1開始編號的 catch (Exception e) e.printStackTrace();在得到連接那里,要去配置數據源,點擊控制面板->系統和安全->管理工具->數據源(ODBC),打開后點添加,如圖: 可以看到,有個Oracle in OraDb10g_home1的驅動,它是Oracle安裝完后自動加上去的。 選中后,點完成,再填如下
66、信息,如圖: 這樣配好后基本就可以了,但為了安全起見,建議大家測試一下,點擊 Test Connection按鈕, 測試通過后點ok,然后數據源就生成了,如圖: 然后把數據源名稱寫進jdbc.odbc:里。 這里要注意:jdbcodbc能不能遠程連接呢?不能遠程連接,也就是你這樣寫的話就意味著java程序和oracle數據庫應該是在同一臺機器上,因為這里沒有指定IP地址,肯定默認就是本地。如果要遠程連,就用jdbc,jdbc是可以遠程連的。 ,控制臺輸出. 可惜我沒運行成功,說 java.sql.SQLException: No suitable driver found for jdbc.o
67、dbc:testConnectOracle at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at com.sp.TestOracle.main(TestOracle.java:18) 不知道為什么。 接下來講解用JDBC的方式連接Oracle Java代碼 1. package com.sp; 2. 3. import java.sql.Connecti
68、on; 4. import java.sql.DriverManager; 5. import java.sql.ResultSet; 6. import java.sql.Statement; 7. 8. /使用 jdbc連接oracle 9. public class TestOracle2 10. 11.
69、; public static void main(String args) 12. try 13. 14. / 1.加載驅動 15. Class.forName("oracle.jdbc.driver.OracleDriver"); 16. 17.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 飲料灌裝間管理制度
- 駐廠管理員管理制度
- 高壓消毒爐管理制度
- 高校學工科管理制度
- 工業廢棄物資源化利用技術
- 工業廢水處理技術與設備創新研究
- 工業大數據的應用與挑戰
- 工業安全產品推廣與營銷策略
- 工業用熱風爐系統優化設計
- 工業物聯網設備的智能管理與維護系統設計
- 新聞傳播專業修辭在新聞標題擬寫中的運用-以《鐵嶺日報》和《遼沈晚報·鐵嶺版》為例
- 運籌學課程設計
- 承認外國離婚判決申請書
- 小說閱讀答題技巧
- CC++程序設計-同濟大學中國大學mooc課后章節答案期末考試題庫2023年
- 基于GeoGebra的數學研究與教學應用課件
- 尿崩癥診療規范內科學診療規范診療指南2023版
- 老年法律法規體系初識 老年服務與管理法律法規概述
- 【地方政府促進鄉村旅游發展研究文獻綜述3600字】
- 西安市商品住宅使用說明書
- 西部科學城重慶高新區引進急需緊缺人才38人模擬檢測試卷【共1000題含答案解析】
評論
0/150
提交評論