oracle學習筆記

來源:互聯網
上載者:User

標籤:des   http   java   使用   os   io   檔案   資料   

第一集:

#目前主流資料庫 微軟       sqlsever and access mysql ad2 sybase informix oracle #小型資料庫:access:負載量小 100人,安全性要求不高 #中型資料庫:mysql,sqlsever  :負載在5000到15000 #大型資料庫:sybase,oracle,db2:負載可以可以處理海量的  sybase《oracle《db2 #用什麼資料庫? 1.項目規模:a、負載量多大(使用者量) 2.成本 3.安全性 oracle認證: 第二集 oracle安裝 資料庫標識 myOracle

#預設產生兩個使用者 a.sys------->change_on_install (超級使用者,具有最高許可權,sysdba角色,create database的許可權) b.system---->manager(管理操作員,許可權很大。具有sysoper角色,createdatebase許可權)

#一般來說對資料庫維護,使用system使用者就可以了

第三集,oracle的啟動、配置  #Oracle 的資料庫是  多戶 ---->到一個執行個體資料庫  ①不同使用者對錶有不同的許可權;  #sqlserver 一使用者----->多個資料庫 #啟動 ①OracleServer+資料庫名; ②啟動oracleOraHome90TNSListener

#卸載 ① #oracle管路工具的介紹

內建的工具軟體,主要於執行sql語句,p1\sql快。 步驟: 1)開始-->oracle orachome90-->appliacation  development --.sql*plus 2)在運行欄輸入sqlpusw 即可 3)程式-->Oracle orahome 90-->appplication  development -->sql*plus  worksheet

oracle企業

主機字串:即資料庫名稱;

#https://localhost:5500/em 可以查看資料庫運行狀態,進行建立資料表空間和使用者配置

#show user;

#plSqlDeveloper

#scott/tiger #串連命令 1)conn 用法:conn 使用者名稱/密碼@網路伺服器名 當特權使用者身份串連時,必須帶上 as  sysdba 或是 as  sysoper conn system/manager #中斷連線命令 :disc #修改密碼命令:passw # 退出命令:exit    #檔案操作命令  1)start和@   //運行指令碼 start d:\aa.sql; 2)edit :編輯指定檔案 3)spool:將sql*plus螢幕上的內容輸出到指定檔案中去。 spool d:\b.sql 最後輸入 spool  off

#設定顯示行的寬度:set linesize 120;  分頁設定:set pagesize 5;(設定每頁的行數,預設為14)

 第三節oracle 使用者管理

 #建立一個新的使用者使用create user語句,一般是具有dba的許可權才能使用  create user xiaoming identified by m123;

 #給使用者修改密碼  需要有dba的許可權或者是擁有alter user系統許可權;  password xiaoming;

 #刪除使用者  一般以dba的身份刪除某使用者,不能自殺;如果其他使用者去刪除使用者需要drop user的許可權。

*在刪除使用者時,如果刪除的使用者已經建立了表,那麼就需要帶一個參數。(cascade)。 列入:drop user 使用者名稱 【cascade】

#建立的新使用者是沒有任何許可權的,甚至連登陸資料庫的許可權都沒有,需要為其指定相應的許可權,給使用者賦予許可權使用grant命令,回收許可權使用revoke。 *grant connect to xiaoming #許可權: 系統許可權(使用者對資料庫訪問的許可權)和 對象許可權(使用者對其他使用者的資料對象操作的許可權select、insert、update) #資料對象:使用者建立的表、視圖、索引、觸發器。。。。。 #角色:自訂角色和預定義角色 dba角色; connect角色; resource角色(可以在任何錶空間建表);

#建立表 *grant resource to xiaoming(授予建立表的全許可權) create table test(userId vachar2(30),userName vachar2(30));

#希望使用者去查詢scott的emp表; *grant select on emp to xiaoming #grant select on emp xiaoming//授權給小明

#select *form scott.emp;

#收回許可權:revoke select on emp from xiaoming

#許可權的傳遞(許可權的維護): 小明使用者可以查詢scott的emp表,還希望小明可以把這個許可權繼續傳給其他使用者。

*如果是對象許可權,就加入with grant option *grant select on emp to xiaoming with grant option; 如果是系統許可權,就加 grant connect to xiaoming with admin option;

#使用profile 系統管理使用者口令:profile是口令限制,資源限制的命令集合,當建立資料庫時,oracle就會自動建立名稱為default的profile 。當建立使用者沒有指定profile選項,oracle就會將default分配給使用者。 1)賬戶鎖定:指使用者登入時最多可以輸入密碼的次數,也可以指使用者鎖定的時間,一般用dba的身份去執行該命令。

//①列子:建立profile檔案 create profile lock_account limit//lock——account代表名稱 failed_logion_attempts 3 password_lock_time 2; //②指定使用者 alter user xiaoming profile lock_account;

2)給賬戶解鎖 *alter user xiaming account unlock;

3)終止 為了讓使用者定期修改密碼,可以使用終止口令來執行;用dba身份來操作 *create profile myprofile limit password_life_time 10 password_garce_time 2;//要求使用者每隔10天修改自己的登入面膜。寬限2天。

4)口令曆史  希望使用者在修改密碼時,不能使用以前用過的密碼,可以使用口令曆史。 *create profile password_history limit password_life_time 10 password_grace_time2password_reuse_time 10;

5)刪除profile *drop profile password_history[cascade];

https://localhost:5500/em

第06講 oracle 表的管理

#表名和列的命名規則 1)必須以字母開頭 20不能超過30字元 3)不能使用oracle保留字

#oracle的資料類型 1)char 定長 最長2000字元 2)varchar2 變長 最大4000字元 3)clob  字元型大對象 最大4g

4)數字類型 number 範圍-10的-38~10的38次方,可以表示整數,也可以表示小數

5)日期類型  date  包含年月日和分秒 timestamp是對date資料類型的擴充

6)圖片(包括聲音、視頻) blob  位元據

#怎樣建立表 ---學生表 create table student( StNumber number(4), StName   varchar2(20), sex char(2), birthday date, sal number(7,2) ); #刪除表 drop table students;

---班級表 CREATE table classes( classId number(2), cname varchar2(40));

#添加欄位 alter table student add (classId number(2));

#查看錶 desc student

#修改欄位的長度 alter table student modify (xm varchar2(30));

#刪除一個欄位//盡量不使用 alter table student drop column sal;

#修改表名 rename student to stu;

#添加資料 所有欄位都添加 insert into student values (‘A001’,‘張三’,‘男’,‘11-12月-1997’,’222.2‘,21) 日期的格式:oracle預設的日期格式‘DD-MON-YY’改日期的預設格式: alter session set nls_date_format=‘yyyy-mm-dd’; #插入部分欄位 insert into student (xh,xm,sex)value (‘’,‘’,)

#插入空值 insert into student (xh,xm,sex)value (‘’,‘’,null)

#查詢沒有生日的人 select *from student where birthday is null;//is not null;

#修改一個欄位 update student set sex=‘女’ where=‘A001’;

#修改多個欄位 update student set sex=‘女’, birthday=‘1980-04-01’ where=‘A001’; 修改欄位加逗號就可以。

#修改含有null用is修改。

#刪除資料 delete from student;//刪除了表裡面的內容,但是表的結構還在;可以通過日誌恢複;

#在刪除之前添加復原點(設定儲存點) savepoint a; #復原命令 rollback to a;

#刪除表的結構和資料 drop table student;

#刪除一條記錄 delete from student where xh=‘A001’;

#刪除表中的所有記錄,表結構還在,不寫日誌,無法找回刪除記錄,熟讀快 truncate table student;

#第八講 oracle表查詢

#查看錶的結構 desc emp

#查詢指定列 select ename ,sal,job,deptno from emp;

#set timing on;開啟操作時間;

#insert into users (userid,username,userpassword) select *from users;自動成長資料;

#如何取消重複行 select distinct deptno,job from emp;

#如何smith 的薪水,工作,所在部門 select deptno,job,sal from emp where ename=‘SMITH‘;

#使用算術運算式

select sal*13,ename from emp;

#給列取別名 select sal*13+nvl(comm,0)*13 ”年工資“,ename from emp;

#如何處理null值:使用nvl函數來處理

#顯示工資高於3000的員工 *select ename,sal from emp where sal>=3000;

#顯示在1982後入職的職員 *select ename,hiredate from emp where hiredate>‘1-1月-1982‘

#顯示工資在2000~2500的員工 *select ename,sal from emp where sal>=2000&sal在<=2500;

#如何使用like操作符 %表示任意0到多個字元; _表示任意單個字元; #如何顯示首字元為S的員工姓名和工資 *select ename,sal from emp where ename like ‘S%’;

#如何顯示第三個字元為S的員工姓名和工資 *select ename,sal from emp where ename like ‘__o%’;

#在where條件中使用in *select *from emp where empno in(123,213,324);

#如何顯示沒有上級的員工 *select *from emp where mgr is null;

#第09講

#使用order by字句

#如何按照工資從低到高顯示員工資訊 *select *from emp order by sal #從高到底 *select *from emp  order by sal desc;

#按照部門號升序而僱員的工資降序; *select *from emp order by deptno ,sal desc;

#使用列的別名排序 *select enamel,sal*12 ”年薪“ from emp order by “年薪”;

#oracle表複雜查詢 #資料分組----max,min,avg,count

#如何顯示所有員工最高最低工資 *select max(sal),min(sal) from emp;

#如何顯示所有員工最高最低工資 *select ename,sal from emp where sal=(select min(sal) from emp);

#顯示工資高於平均工資的員工資訊 *select *from emp where sal>(select avg(sal) from emp);

#group by 和group by group by用於對查詢的結果分組統計 group by用於限制分組顯示結果

#顯示每個部門的平均工資和最高工資 *select avg(sal),max(sal),deptno from emp gruop by deptno;

#顯示每個部門的每種崗位的平均工資和最低工資 *select avg(sal),max(sal),deptno,job from emp group by deptno,job;

#顯示平均工資低於2000的部門 *select avg(sal),max(sal),deptno from emp gruop by deptno having avg(sal)<2000 #注意 1)分組只能出現在選擇列裡面,或者出現在having 。orderby裡面; 2)先出現order by再有having;

#顯示平均工資高於2000的部門,再按avg排序 *select avg(sal),max(sal),deptno from emp group by deptno having avg(sal)>2000 order by avg(sal);

#多表查詢:兩個兩個以上的表或是視圖的查詢。

#顯示僱員工資所在部門的名字 *select a1.ename,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno;

#規定:多表查詢的條件是 至少不能少於 表的個數-1;

#第10講多表查詢 #顯示部門號為10的部門名、員工名和工資 *select a1.dname,a2.ename,a2.sal from dept a1,emp a2 where a1.deptno=a2.deptno and a1.deptno=10;

#顯示各員工的姓名,工資,及其工資層級 #select a1.ename,a1.sal,a2.grade from emp a1,salgrade a2 where a1.sal between a2.LOSAL and a2.HISAL;

#自串連:在同一張表的串連查詢;

#顯示某員工的上級領導的姓名//把一張表看作兩張 *select woker.ename,?boss.ename from emp worker,emp boss where wokker.mgr=boss.empno and worker.ename=KING;

#子查詢(巢狀查詢):嵌入在其他sql中的select語句;

#單行子查詢:只返回一行資料的查詢 顯示SMITN同一部門的員工

*查詢SIMITH的部門號 select deptno from emp where ename=‘SMITH‘ *顯示 select *from emp where deptno=(select deptno from emp where ename=‘SMITH‘); #執行語句從左至右;

#多行子查詢 #查詢和10號部門的工作相同的僱員的名字、崗位、工資、部門號

select * from emp where job in (select distinct job from emp where deptn=10 );

注意:where job 後面寫=還是in 取決於是單行還是多行,單用=;

#在多行子查詢中使用all 操作符

#如何顯示工資比部門30的所有員工的工資高的員工的姓名。工資和部門 *select ename,sal,dept from emp where sal> all(select sal from emp wherr deptno=30); *方法2 select *from emp where sal>(select max(sal) from emp where deptno=30);

#在多行子查詢中使用any 操作符

顯示工資比部門30的任意一個員工的工資的姓名、 *select ename,sal,dept from emp where sal> any(select sal from emp wherr deptno=30); *方法2 select *from emp where sal>(select min(sal) from emp where deptno=30);

#多列子查詢

#如何查詢與simth 部門和崗位相同的員工 //查詢他的部門 select deptno,job from emp where ename=‘SMITH‘; //顯示 select *from emp where (deptno,job)=(select deptno,job from emp where ename=‘SMITH‘);

#在from子句中使用子查詢 #顯示高於自己部門平均工資的員工的資訊 //1、查詢部門的平均工資和部門號 select deptno,avg(sal) mysal from emp group by deptno; //把上面的查詢看作是一張子表 select a2.ename,a2.sal,a2.deptno,a1.mysal from emp a2,(select deptno,avg(sal) mysal from emp group by deptno) a1 where a2.deptno=a1.deptno and a2.sal>a1.mysal;

#分頁查詢 *分頁一共有三種方式 1)rownum分頁 select *from emp 2)顯示rownum select a1.*,rownum rn from (select *from emp) a1 3)

取6~10行 select a1.*,rownum rn from (select *from emp) a1;//rn行號 步驟 1.select a1.*,rownum rn from (select *from emp) a1 where rownum<10; 2.select *from(select a1.*,rownum rn from (select *from emp) a1 where rownum<=10) where rn>=6;

注意: a。若指定查詢列,只需修改最裡層的查詢 select *from(select a1.*,rownum rn from (select ename,sal from emp) a1 where rownum<=10) where rn>=6; b。排序 只需修改最裡層的查詢 select *from(select a1.*,rownum rn from (select ename,sal from emp order by sal ) a1 where rownum<=10) where rn>=6;

#用結果建立新表 這個命令是一個快捷的建標的方法 create table my table (id,name,sal,deptno) as select empno,ename,sal,job,deptno from emp; *比如create table Myemp1 (id,name,sal) as select empno,ename,sal from emp;

#合并查詢:操作符號 union ,union all,intersect,minus 1)union 該操作用於取得兩結果集的並集。會自動去掉結果集中重複行。 *select ename,sal,job from emp where sal >2500 union select ename,sak ,job from emp where job=‘manager‘; 2)union all:不會取消重複行 3)intersect 操作用於取得兩結果集的交集 4)minus 操作用於取得兩結果集的差集

#建立新的資料庫 1)工具嚮導:adca 2)手工建立

-----------第12講java操作oracle--------

#java串連oracle????? #

#使用特定格式插入日期 *使用to_date函數:使用者指定添加日期的格式 *insert into emp values(9998,‘小紅‘,‘MANAGER‘,‘7782‘,to_date(1998-12-12,‘yyyy-mm-dd‘),78.9,55.33,10);

#當用values子句時一次能插入多值 *create table kkk(myid number(4),myname varchar2(50),mydept number(5)); insert into kkk(myid,muname,mydept)select empno,ename,deptno from emp where deptno=10;

#用子查詢更新資料 *希望員工scott的崗位、工資、補助與smith一樣; *update emp set (job,sal,comm)=(select job,sal,comm from emp where ename=‘SMITh‘) where ename=‘SCOTT‘;

--------oracle交易處理------

#事物用於保證資料的一致性,它由一組相關的dml語句組成,該組的dml語句要麼全部成功,要麼全部失敗;

#事物和鎖:當執行一事務操作時(dml語句),oracle會在被作用的表上加鎖,防止其他使用者該表的結構。 #鎖:檔案鎖。。。

#提交事務 *當使用commit語句可以提交事務,當執行commit語句後,會確認事務的變化。結束事務。刪除儲存點、釋放鎖。當使用commit語句結束事務之後,其他會話將卡哇伊查看到事務變化後的新資料

#回退事務:儲存點是事務中的一點,用於取消部分事務,當結束事務時,會自動刪除該事物所定義的所有儲存點。當執行rollback時,通過儲存點可以回退到指定的點。

#savapoint a1; #delete from emp where empno=9996; #savapoint a2; #delete from emp where empno=9999; #rollback to a2;

#第14講 oracle的函數

#唯讀事務:只允許執行查詢的操作,而不允許執行任何其他dml操作事務,使用唯讀事務可以確保使用者只能取得某時間點的資料。其他會話可以提交新事務,但是唯讀事務將不會取得最新資料變化 #設定唯讀事務:set transaction read only;

#sql函數的使用 1)字元函數 lower(char):將字串轉換為小寫格式; upper(char):將字串轉換為大寫格式; length(char):返回字串的長度; substr(char,m,n):取字串的子串; replace(char1,search_string,replace_string) instr(char1,char2,[,n[,m]])取子串在字串的位置

*將員工的名字按小寫方式顯示 select lower(ename) from emp;

*將員工的名字按大寫的方式顯示 select upper(ename) from emp;

*顯示員工名字正好為5個的字元的員工; select *from emp length(ename)=5;

*顯示所有員工姓名的前三個字元; select substr(ename,1,3) from emp;

*以首字母大寫的方式顯示所有員工的姓名; select upper(substr(ename,1,1)) from epm;//首大寫 select lower(substr(ename,1,length(ename)-1)) from epm;//小寫 select upper(substr(ename,1,1)) || lower(substr(ename,1,length(ename)-1)) from emp;合并

#替換 select replace(ename,‘A‘,‘我是老虎‘);

--------數學函數-------- #包括:cos cosh,exp,il,log,sin,round,trunc,mod,floor,ceil #round(n,[m]) 該函數用於執行 四捨五入; #trunc(n,[m])該函數用於截取數字;如果省掉m,就截取小數部分,如果m是正數就截取到小數點的m位後,如果m是負數就截取到小數點的前m位, #mod模數; #floor(返回小於或等於n的最大整數);向上取整 #ceil(返回大於或等於n的最小整數);

*顯示在一個月為30天的情況所有員工的日薪,忽略餘數;

#SQL 函數的使用--日期函數 #日期函數用於處理date類型的資料。預設情況下日期的格式是dd-mon-yy. 1)sysdate:該函數返回系統時間; *select sysdate from dual; 2)add_months(d,n):加月份 *尋找八個月多的員工 select *from emp where sysdate>add_months(hiredate,800) 3)last_day(d):返回指定日期所在月份額度最後一天 顯示員工加入公司的天數 select sysdate-hiredate "入職天數",ename from emp; 4)找出各月倒數第3天受雇的所有員工 select hiredate, ename from emp where  last_day(hiredate)-2=hiredate;

#轉換函式

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.