<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
SCOTT。是在Oracle資料庫中,一個範例使用者的名稱。其作用是為初學者提供一些簡單的應用範例,不過其預設是鎖定狀態,在安裝時,根據使用者需要,在“資料庫設定助手”介面完成後,彈出的對話方塊中--口令管理,裡面解鎖。
SCOTT是ORACLE內部的一個範例使用者,預設口令為tiger,下面有表emp, dept等,這些表和表間的關係演示了關係型資料庫的一些基本原理
(1)建立DEPT表
CREATE TABLE DEPT ( DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY, DNAME VARCHAR2(14) , LOC VARCHAR2(13) ) ;
(2)表DEPT新增資料
INSERT INTO DEPT VALUES (10 , 'ACCOUNTING' , 'NEW YORK' ); COMMIT; INSERT INTO DEPT VALUES (20 , 'RESEARCH' , 'DALLAS' ); COMMIT; INSERT INTO DEPT VALUES (30 , 'SALES' , 'CHICAGO' ); COMMIT; INSERT INTO DEPT VALUES (40 , 'OPERATIONS' , 'BOSTON' ); COMMIT;
(3)建立EMP表
CREATE TABLE EMP ( EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT );
(4)表EMP新增資料
INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20); COMMIT; INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30); COMMIT; INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30); COMMIT; INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20); COMMIT; INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30); COMMIT; INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30); COMMIT; INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10); COMMIT; INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,to_date('19-04-1987','dd-mm-yyyy')-85,3000,NULL,20); COMMIT; INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10); COMMIT; INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30); COMMIT; INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,to_date('23-05-1987','dd-mm-yyyy')-51,1100,NULL,20); COMMIT; INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30); COMMIT; INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20); COMMIT; INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10); COMMIT;
(5)建立SALGRADE表
CREATE TABLE SALGRADE ( GRADE NUMBER, LOSAL NUMBER, HISAL NUMBER );
(6)表SALGRADE新增資料
INSERT INTO SALGRADE VALUES (1,700,1200); COMMIT; INSERT INTO SALGRADE VALUES (2,1201,1400); COMMIT; INSERT INTO SALGRADE VALUES (3,1401,2000); COMMIT; INSERT INTO SALGRADE VALUES (4,2001,3000); COMMIT; INSERT INTO SALGRADE VALUES (5,3001,9999); COMMIT;
(7)建立BONUS表
CREATE TABLE BONUS ( ENAME VARCHAR2(10) , JOB VARCHAR2(9) , SAL NUMBER, COMM NUMBER ) ;
接收字元輸入返回字元或者數值,dual 是偽表
(1)把小寫的字元轉換成大寫的字元
--(1)把小寫的字元轉換成大寫的字元 select upper('smith') from dual;
(2)把大寫字元變成小寫字元
--(2)把大寫字元變成小寫字元 select lower('WHJ') from dual;
(1)四捨五入函數:round()
--四捨五入函數 小數第一位小於5 select round(5.342345) from dual;
四捨五入函數 小數第一位大於5
--四捨五入函數 小數第一位小於5 select round(5.342345) from dual;
四捨五入函數 小數點保留兩位
--四捨五入函數 小數點保留兩位 select round(5.12764,2) from dual;
(2)日期函數
Oracle 中提供了很多和日期相關的函數,包括日期的加減,在日期加減時有一些規律
日期 – 數位 = 日期
日期 + 數位 = 日期
日期 – 日期 = 數位
範例:查詢僱員的進入公司的週數。(分析:查詢僱員進入公司的天數(sysdate – 入職日期)/7就是週數)
--查詢僱員的進入公司的週數。(分析:查詢僱員進入公司的天數(sysdate – 入職日期)/7就是週數) --1.員工表 select * from emp; --2.查詢ward 進入公司的週數 select Ename,round((sysdate-hiredate)/7) from emp where Ename='WARD';
獲得兩個時間段中的月數:MONTHS_BETWEEN()
範例:查詢所有僱員進入公司的月數
--查詢所有僱員進入公司的月數 select ename,round(months_between(sysdate,hiredate)) as 進入公司月數 from emp;
(3)轉換函數
TO_CHAR:字串轉換函數
範例:查詢所有的僱員將將年月日分開,此時可以使用 TO_CHAR 函數來拆分
拆分時需要使用萬用字元
年:y, 年是四位使用 yyyy
月:m, 月是兩位使用 mm
日:d, 日是兩位使用 dd
查詢所有的僱員將將年月日分開
--查詢所有的僱員將將年月日分開 select empno,ename, to_char(hiredate,'yyyy') as 年, to_char(hiredate,'mm') as 月, to_char(hiredate,'dd') as 日 from emp;
日期將日期格式改為yyyy-mm-dd字串格式
-- 初始格式 select * from emp; --日期將日期格式改為yyyy-mm-dd字串格式 select empno,ename,to_char(hiredate,'yyyy-mm-dd') from emp;
在結果中10以下的月前面補了0,可以使用fm去掉前置0
--在結果中10以下的月前面補了0,可以使用fm去掉前置0 select empno,ename,to_char(hiredate,'fmyyyy-mm-dd') from emp;
TO_DATE:日期轉換函數
TO_DATE 可以把字串的資料轉換成日期型別
--TO_DATE 可以把字串的資料轉換成日期型別 select to_date('2022-03-10','yyyy/mm/dd:ss')as 當前日期 from dual;
(4)通用函數
空值處理 nvl
範例:查詢所有的僱員的年薪
--查詢所有的僱員的年薪 comm年終獎 select ename,sal*12+comm from emp;
我們發現很多員工的年薪是空的,原因是很多員工的獎金是 null,null 和任何數值計算都是
null,這時我們可以使用 nvl 來處理
--查詢所有的僱員的年薪 comm年終獎 select ename,nvl(comm,0) 年終獎 ,sal*12+nvl(comm,0)年薪 from emp;
Decode 函數
--該函數類似 if....else if...esle --語法: DECODE(col/expression, [search1,result1],[search2, result2]....[default]) Col/expression:列名或表示式 1. Search1,search2...:用於比較的條件 2. Result1, result2...:返回值 3. 如果 col/expression 和 Searchi 匹配就返回 resulti,否則返回 default 的預設值
--decode函數 --1. 我是1 select decode(1,1,'我是1',2,'我是2','我是無名') from dual; --2. 我是2 select decode(2,1,'我是1',2,'我是2','我是無名') from dual; --3. 我是無名 select decode(3,1,'我是1',2,'我是2','我是無名') from dual;
範例:查詢出所有僱員的職位的中文名
select ename,decode(job, 'clerk','業務員', 'SALESMAN','銷售', 'PRESIDENT','總裁', 'MANAGER','經理', 'NALYST','分析員', '員工' ) from emp ;
case when
CASE expr WHEN comparison_expr1 THEN return_expr1 [WHEN comparison_expr2 THEN return_expr2 WHEN comparison_exprn THEN return_exprn ELSE else_expr] END
範例:查詢出所有僱員的職位的中文名
--範例:Case when 查詢出所有僱員的職位的中文名 select t.empno,t.ename, case when t.job='clerk' then '業務員' when t.job='SALESMAN' then '銷售' when t.job='PRESIDENT' then '總裁' when t.job='MANAGER' then '經理' when t.job='NALYST' then '分析員' else '員工' end from emp t;
範例:查詢出所有員工的記錄數
-- 範例:查詢出所有員工的記錄數 select count(*) from emp;
不建議使用 count(*),可以使用一個具體的列以免影響效能。
--不建議使用 count(*),可以使用一個具體的列以免影響效能。 select count(ename) from emp;
範例:查詢出來員工最低工資
--範例:查詢出來員工最低工資 select min(sal) from emp;
範例:查詢出員工的最高工資
--範例:查詢出員工的最高工資 select max(sal) from emp;
範例:查詢出員工的平均工資
--範例:查詢出員工的平均工資 select avg(sal) from emp;
範例:查詢出 20 號部門的員工的工資總和
--範例:查詢出 20 號部門的員工的工資總和 select sum(sal) from emp where deptno=20;
分組統計需要使用 GROUP BY 來分組
--語法: SELECT * |列名 FROM 表名 {WEHRE 查詢條件} {GROUP BY 分組欄位} ORDER BY 列 名 1 ASC|DESC,列名 2...ASC|DESC
範例:查詢每個部門的人數
-- 範例:查詢每個部門的人數 select deptno,count(ename) from emp group by deptno;
範例:查詢出每個部門的平均工資
-- 範例:查詢出每個部門的平均工資 select deptno,avg(sal) from emp group by deptno;
如果我們想查詢出來部門編號,和部門下的人數
-- 如果我們想查詢出來部門編號,和部門下的人數 select deptno,count(ename) from emp;
我們發現報了一個 ORA-00937 的錯誤
注意:
1.如果使用分組函數,SQL 只可以把 GOURP BY 分組條件欄位和分組函數查詢出來,不能有其
他欄位。
2. 如果使用分組函數,不使用 GROUP BY 只可以查詢出來分組函數的值
範例:按部門分組,查詢出部門名稱和部門的員工數量
-- 範例:按部門分組,查詢出部門名稱和部門的員工數量 select d.deptno,d.dname,count(e.ename) from emp e,dept d where e.deptno=d.deptno group by d.deptno,d.dname
範例:查詢出部門人數大於 5 人的部門
-- 範例:查詢出部門人數大於 5 人的部門 --(分析:需要給 count(ename)加條件,此時在本查詢中不能使用 where,可以使用 HAVING) select d.deptno,d.dname,count(e.ename) from emp e,dept d where e.deptno=d.deptno group by d.deptno,d.dname having count(e.ename)>5 ;
分析:需要給 count(ename)加條件,此時在本查詢中不能使用 where,可以使用 HAVING
範例:查詢出部門平均工資大於 2000 的部門
-- 範例:查詢出部門平均工資大於 2000 的部門 select d.deptno,d.dname,avg(e.sal) from dept d ,emp e where d.deptno=e.deptno group by d.deptno,d.dname having avg(e.sal)>2000;
到此這篇關於Oracle資料庫中通用的文章就介紹到這了,更多相關Oracle通用函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45