Oracle 基礎操作
#用戶創建
1 sqlplus /nolog 2 sys/password as sysdba--進系統管理員 3 create user user_name identified by password--創建用戶 4 grant dba to user_name--授予權限 5 revoke 權限 from user_name --撤銷權限 6 alter user user_name account (un)lock--解鎖或鎖定 7 alter user user_name identified by password --修改用戶密碼 8 drop user user_name --刪除用戶
#表創建
user_name/password --進用戶 create table table_name (column1 modify 約束,column2 modify 約束,...)--創建表及結構 create table table_name as select * from 另一個表 (where 條件) --把另一個表的全部數據及表結構複製/某些數據 insert into table_name (column1,column2,...) values (值1,值2,...)---給表插入數據
#增刪改
1 alter table table_name add (column modify 約束)--增加列 2 alter table table_name modify (column modify)--修改列類型 3 alter table table_name rename column (old_column to new_column)--更改列名 4 alter table table_name drop column column_name --刪除列 6 update table_name set column_name=新值 (where 條件) --更新表的某行 7 delete from table_name (where 條件)--刪除表裏的數據
#函數
1、trunc(截段函數) round(四捨五入) round(a,b): a:要進行操作(四捨五入)的對象 b:保留幾位小數 select sal/30,round(sal/30) from emp select sal/30,round(sal/30,2) from emp select sal/30,round(sal/30,-2) from emp trunc(截段) trunc(a,b): a:要進行截段的對象 b:截取幾位 select sal/30,trunc(sal/30) from emp select sal/30,trunc(sal/30,2) from emp select sal/30,trunc(sal/30,-1) from emp select trunc(sysdate,'mm') from dual 2,substr 截取函數 instr(滿足字符串返回值函數) substr(a,b,c) select substr('abcde',2,3) from dual a:截取的對象 b:從第幾位開始截 c:截取幾位長度 select substr('abcde',2) from emp; 特例:c c爲0,則不截取字符串長度,c沒有內容,從起始位截取全部字符串 select substr('abcde',2,-3) from dual b: b爲0 也爲從第一位開始截取 select substr('abcde',0) from emp; b<0 select substr('abcdeefdghjbcdvs',-7,4) from dual; instr 判斷需求字符串在已知字符串中的位置 instr(a,b) select instr('abcde','bd')from dual select instr(ename,'S') FROM EMP a:已知字符串 b:需求字符串 select instr ('abcdcba','b',1) from dual c;從第幾位開始找 select instr('abcdcba','b',1,2) from dual d;第幾次找到需求字符串(只能取正整數) select instr('abcdcba','b',1,-1) from dual C:---2(表示從右往左找位置,並且從後往前找需求字符串) select instr('abeccdcba','c',-4,2) from dual; 着重強調: 1,在substr中,若b爲負數,從後往前數b的位置,從前往後截c的長度 select substr('aabbcc',-3,2) from dual 2,在instr中,若c爲負數,從後往前數c的位置,在向前找b select instr('aabbcc','b','-3') from dual 3,在instr中,無論什麼情況,位置數總是從前向後數。
函數練習:
1 以首字母大寫的方式顯示所有員工的姓名 SELECT INITCAP(ename) FROM emp 2 將員工的職位用小寫顯示 SELECT LOWER(job) FROM emp 3 將員工的名字分別用大寫和小寫顯示 SELECT UPPER(ename),LOWER(ename) FROM emp 4 將員工名字,首字母小寫,其他字母大寫的方式顯示 SELECT LOWER(SUBSTR(ename,1,1))||UPPER(SUBSTR(ename,2)) FROM emp 5 顯示員工姓名爲5個字符的員工 SELECT * FROM emp WHERE LENGTH(ename)=5 6 顯示所有員工姓名的前三個字符 SELECT substr(ename,1,3) FROM emp 7 顯示所有員工姓名的後三個字符 SELECT SUBSTR(ename ,-3) FROM emp 8 以字符長度爲10的方式顯示員工職位,多餘的位數在右邊以*來填充 SELECT RPAD(job,10,'*') job FROM emp 9 找出字符串"oracle training"中第二個ra出現的位置 SELECT INSTR('oracle training','ra',1,2) FROM dual 10 去除字符串‘ aadde gf ’兩邊的空格 SELECT TRIM(' aadde gf') FROM dual 11 以指定格式顯示員工的工資(格式:SMITH 的工資是 800) SELECT ename||'的工資是:'||sal FROM emp 12 顯示所有員工的姓名,用a替換所有"A" SELECT REPLACE(ename,'A','a') FROM emp 13 顯示員工姓名中包含‘H’的員工 SELECT ename FROM emp WHERE ename LIKE '%H%' 14 顯示員工姓名中第二個字符是‘L’的員工 SELECT ENAME FROM EMP WHERE SUBSTR(ENAME,2,1)='L' 15 顯示員工姓名中最後一個字符是‘T’的員工 SELECT ENAME FROM EMP WHERE SUBSTR(ENAME,-1,1)='T' 16 查詢一個月前入職的員工 SELECT * FROM EMP WHERE hiredate = add_months(hiredate,-1) 17 顯示在一個月爲30天的情況所有員工的日薪,忽略餘數 SELECT FLOOR(SAL/30) FROM EMP 18 顯示員工在此公司工作了幾個月(要求結果是整數) SELECT FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12) FROM EMP 19 顯示所有12月份入職的員工 SELECT ENAME FROM EMP WHERE TO_CHAR(HIREDATE,'MM')=12 20 顯示員工的年薪(12個月的工資+補貼) SELECT (SAL+NVL(COMM,0))*12 FROM EMP 21 顯示所有員工的姓名、加入公司的年份和月份,並且按照年份排序 SELECT ENAME,TO_CHAR(HIREDATE,'YYYY') Y ,TO_CHAR(HIREDATE,'MM') M FROM EMP ORDER BY Y,M 22 顯示每月倒數第3天入職的所有員工 SELECT ENAME FROM EMP WHERE HIREDATE = LAST_DAY(HIREDATE)-2 23 顯示入職滿10年的員工的姓名和受僱日期。 SELECT ENAME,HIREDATE FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,HIREDATE)/12 >=10
#簡單查詢(列名錶名不過多贅述,以學習賬戶scott爲例)
select (column1,column2...)查詢的列名 from 查詢的表名 where 條件; --一般條件查詢
#order by 、group by
select * from emp order by sal desc (降序) asc(升序) --以工資降序或者升序排列 select deptno,max(sal) from emp group by deptno --以部門分組查詢部門最高工資
注意:用group by 分組的時候,查詢的必須是分組的列,或者用組函數(max、min、count、avg 、sum)組合使用
#子查詢
將一般查詢作爲一張表,用另一個查詢查這張表,再用上一張表繼續查詢(多表查詢)
例:求出工資排名6-10的員工
1 SELECT * 2 FROM (SELECT E.*, ROWNUM R 3 FROM (SELECT * FROM EMP ORDER BY SAL DESC) E 4 WHERE ROWNUM <= 10) 5 WHERE R >= 6