Oracle資料庫基礎學習_01
–建立表空間 create tablespace itheima; DATAFILE ‘heima.dbf’ size 100m autoextend on next 10m;
–刪除表空間 drop tablespace itheima;
–建立使用者 create USEr itheima IDENTIFIED by itheima default tablespace itheima;
–給使用者授權 –pracle資料庫中常用角色 connect --連線角色,基本角色 RESOURCE --開發者角色 dba --超級管理員角色 –給 itheima 使用者授予dba角色 grant dba to itheima;
– 建立表 create TABLE person( pid number(3); panme CHAR(3); )
----- 修改表結構 –新增一列 alter table person add(gender number(1)); –修改列型別 alter table person modifygender char(1); –修改列名稱 alter table person rename column gender to sex; –刪除一列 alter table persom drop column sex;
–查詢表中記錄 select * from person; –新增一條記錄 insert into person (pid ,pname) values(1,‘小明’); commit; –修改一條記錄 update person set pname=‘小馬’ where pid = 1 ; commit;
----- 三個刪除 –刪除表中全部記錄 delete from person; –刪除表結構 drop table person; –先刪除表,再次建立空白表.效果等同於刪除表中全部記錄 –在資料量大的情況下,尤其在表中帶有索引的情況下,該操作效率高. –索引可以提高查詢效率,但是會影響增刪改的效率. truncate table person
----- 序列不真的屬於任何一張表,但是可以邏輯和表做繫結. ----- 序列: 預設從1開始,依次遞增,主要用來給主鍵賦值使用. ----- dual: 虛表,姿勢為了補全語法,沒有任何意義. ----- 必須先執行nextval才有currval create sequence s_person; drop sequence s_person; select s_person.currval from dual; select s_person.nextval from dual; insert into person (pid ,pname) values(s_person.nextval,‘小明’);
create user scott IDENTIFIED by tiger; grant dba to scott;
----- scott使用者,密碼tiger. –解鎖 scott 使用者 alter user scott account unlock; –解鎖 scott 使用者的密碼[也可以用來重置密碼] alter user scott identified by tiger;
–切換到scott使用者下
---- 單行函式: 作用於一行,返回一個值 –字元函式 select UPPER(‘yes’) from dual; select LOWER(‘YES’) from dual; –數值函式 select ROUND(26.16,1) from dual; --四捨五入,後面的引數表示保留的位數 select trunc(26.16,1) from dual; --直接擷取,不考慮後面的數字 select mod(10,3) from dual; --求餘數 –日期函式 –查詢出emp表中所有員工入住距離現在幾天 select sysdate-e.hiredate from emp e; –算出明天此刻 select sysdate+1 from dual; –查詢出emp表中所有員工入職距離現在幾月 select MONTHS_BETWEEN(sysdate, e.hiredate) from emp e; select ROUND(sysdate-e.hiredate)/7 from emp e; select MONTHS_BETWEEN(sysdate, e.hiredate)/12 from emp e; –轉換函式 –日期轉字串 select TO_CHAR(sysdate,‘fm yyyy-mm–dd hh24:mi:ss’) from dual –字串轉日期 select to_Date(‘2018-11–11 14:35:48’,‘fm yyyy-mm–dd hh24:mi:ss’) from dual –通用函式 –算出emp表中所有員工的年薪 select e.sal*12+nvl(e.com,0) from emp e;
----- 條件表示式,mysql和oracle通用 –給emp表中員工起中文名 select e.eNAME, case e.ename when ‘smith’ then ‘曹賊’ WHEN ‘allen’ then ‘大耳賊’ when ‘ward’ then ‘諸葛小兒’ else ‘無名’ END from emp e; —判斷emp表中員工工資,如果高於300顯示高收入,如果高於1500低於300顯示中等收入,其餘顯示低收入 select e.sal, case when e.sal>3000 then ‘高收入’ WHEN e.sal>1500 then ‘中收入’ else ‘低收入’ END from emp e;
----- 條件表示式,oracle專用 –oracle中除了起別名,都用單引號. select e.eNAME, decode( e.ename ‘smith’ , ‘曹賊’, ‘allen’ , ‘大耳賊’, ‘ward’ , ‘諸葛小兒’, else ‘無名’) “中文名” from emp e;
---- 多行函式: 作用於多行,返回一個值 select count(1) from emp; select max(sal) from emp; select sum(sal) from emp; select min(sal) from emp; select avg(sal) from emp;
------ oracle查詢 — 分組查詢 – 分組查詢中,出現在 group by 後面的原始列,才能出現在 select 後面 –查詢出每個部門的平均工資 select e.deptno,avg(e.sal). from emp e group by e.deptno; –查詢出平均工資高於200的部門資訊 –所有條件都不能使用別名來判斷 select e.deptno,avg(e.sal) from emp e group by e.deptno having avg(e.sal)>2000; —查詢出每個部門工資高於800的員工的平均工資 select e.deptno,avg(e.sal). from emp e where e.sal > 800 group by e.deptno; — where 所過濾分組前的資料,having是過濾分組後的資料.
----- oracle 專用外連結 – 加號在左,右邊全部顯示,加號在右,左邊全部顯示 select * from emp e , dept d where e.deptno(+) = d.deptno;
— 查詢出員工姓名,員工領導姓名 – 自連線: 自連線其實就是站在不同的角度把一張表看成多張表 SELECT e1.ename,e2.ENAME from emp e1,emp e2 WHERE e1.MGR = e2.empno
— 查詢出員工姓名,員工部門名稱,員工領導姓名,員工領導部門名稱 SELECT e1.ename,d1.dname,e2.ENAME,d2.dname from emp e1,emp e2,dept d1,dept d2 WHERE e1.MGR = e2.empno AND e1.DEPTNO = d1.DEPTNO AND e2.DEPTNO = d2.deptno
----- 子查詢 — 子查詢返回一個值 – 查詢出工資和scoot一樣的員工資訊 SELECT * from emp where sal in (select sal from emp where ename = ‘scott’); — 子查詢返回一個集合 SELECT * from emp where sal in (select sal from emp where deptno = 10); — 子查詢返回一張表 –查詢出每個部門最低工資,和最低工資員工姓名,以及該員工所在部門名稱 select t.DEPTNO, t.msal, e.ename, d.dname from ( select deptno, min(sal) msal from emp GROUP BY DEPTNO ) t, emp e, dept d where t.DEPTNO = e.deptno and t.msal = e.sal AND e.deptno = d.deptno;
----- 分頁查詢 — rownum 行號 : 當我們做select操作的時候,每頁查詢出一行記錄, –就會在改行上加上一個行號,行號從1開始,依次遞增,不能跳著走,不能使用 表名.rownum 這個寫法呼叫 – emp表工資倒敘排列後,每頁無條記錄,查詢第二頁. SELECT * from( SELECT rownum rn,e.* from ( SELECT * from emp order by sal desc) e where ROWNUM < 11 ) where rn > 5;