oracle insert 当前时间_Oracle知识点总结
目錄
1、Oracle的安裝與下載
2、基礎查詢
3、條件查詢
?? ?1)對比運算符
?? ?2)邏輯運算符
?? ?3)模糊查詢
?? ?4)排序
4、函數
?? ?1)數值函數
?? ?2)字符函數
?? ?3)時間日期函數
?? ?4)轉換函數
?? ?5)通用函數
5、聚合函數
6、分組查詢
在學習Oracle之前,需要先有一定的數據庫基礎知識。
一、Oracle的安裝與下載
Oracle的安裝與下載,請看博客:https://blog.csdn.net/wei_li_2015/article/details/80835614
二、基礎查詢
1.sql語言的類型有哪些
DDL:數據定義語言,創建(create),修改(alter),移除(drop)
DML:數據操作語言, 增加(insert),刪除(delete),修改(update)
DQL:數據查詢語言,查詢(select)
DCL:數據控制語言,對用戶授權撤權(grant,revoke)
TCL:事務控制語言,提交(commit),回滾(rollback),保存點(savepoint)
2. Scott用戶表的說明
3. 查詢的語法
語法說明:
????<> :表示必須的
????[]:表示可選。
select [distinct] *| [as 別名]? from ? [別名] [where ] |
示例:
--查詢所有的員工信息
select * from emp;
--需求:查詢員工的姓名,去重復
select distinct ename from emp;
--需求:查詢員工的姓名,返回的字段名使用表的別名指定
select distinct a.ename from emp a;
--需求:查詢員工的姓名,返回的字段名使用表的別名指定.將返回的字段修改為‘c’
select distinct a.ename as 員工姓名 from emp a;
二、條件查詢
1、對比運算符
運算符 | 說明 |
= | 等于 |
>? | 大于 |
小于 | |
>= | 大于等于 |
<= | 小于等于 |
<>? != | 不等于,沒有區別。 <>這個是標準SQL的不等于,所有的數據庫都支持,!=非SQL標準的不等于,就有某一些數據庫不支持。 |
in | 列表對比運算符 |
is [not] null | 判空 |
between .. and.. | 范圍對比運算符 |
?
--需求:查詢員工部門編號為10,或者20的員工。
select * from dept where deptno in (10,20);
--需求:查詢員工的獎金不為null的員工。
select * from emp where COMM is not null;
--需求:查詢員工的工資在1600和3000 之間的員工。包括上下限。
select * from emp where sal between 1600 and 3000;
select * from emp where sal>= 1600 and sal<=3000;
--需求:查詢員工的入職時間在1981-9-28至1982-1-23的員工,包括上下限。
select * from emp where hiredate between to_date('1981-09-28','yyyy-mm-dd') and to_date('1982-01-23','yyyy-mm-dd');
在該示例中涉及時間的轉換,在后面會總結到,該處不做過多的總結。
2、邏輯運算符
運算符 | 說明 |
AND | 與,并且 |
OR | 或,或者 |
NOT | 非,不 |
--邏輯運算符
--AND
--需求:查詢員工的工資在1600和3000 之間的員工。不包括上下限。
select * from emp where sal > 1600 and sal<3000;
--OR
--需求:查詢員工部門編號為10,或者20的員工。
select * from emp where deptno =10 or deptno=20;
--NOT
--需求:查詢員工的工資不在1600和3000 之間的員工。包括上下限。
--1600以下
--3000以上
select * from emp where sal not between 1600 and 3000;
3、模糊查詢
1、特殊字符
如果遇到,匹配的字符就是一個特殊字符,那么需要轉義。
定義一個轉義字符來實現,定義的轉義符可以是任何字符,只是我們習慣使用\
?_代表是匹配一個字符
%代表是匹配任何的字符
--模糊查詢
--like
--需求:查詢第三個字母為A,的員工
select * from emp where ename like '__A%';
--需求:查詢名字有_的員工
select * from emp where ename like '%\_%' escape '\';
4、排序
關鍵字:desc 和 asc
--需求:根據工資的從高到低排序
select * from emp order by sal desc;
--需求:根據部門編號從低到高排序
select * from dept order by deptno asc;
--需求,按部門編號升序排序,然后每個部門按工資從高到低排序。
select * from emp order by deptno asc,sal desc;
三、函數
1、數值函數
數值函數,就是處理數值。
1)四舍五入函數round(p,s)
??? p:原值
??? s:精度,如果是正數,表示小數點后的位數,如果是0,表示忽略小數點后的位數,如果是負數,即使從右到左,精確正數部分。
--需求:統計所有員工的平均工資,保留四位小數,四舍五入
select round(avg(sal),4) from emp;
--需求:統計所有員工的平均工資,保留三位小數,四舍五入
select round(avg(sal),3) from emp;
--需求:統計所有員工的平均工資,保留到個位
select round(avg(sal),0) from emp;
--需求:統計所有員工的平均工資,保留到十位
select round(avg(sal),-1) from emp;
2)數值截取函數??trunc(p,s)
p:原值
s:精度,如果是正數,表示小數點后的位數,如果是0,表示忽略小數點后的位數,如果是負數,即使從右到左,精確正數部分。
--需求:統計所有員工的平均工資,保留四位小數
select trunc(avg(sal),4),avg(sal) from emp;
--需求:統計所有員工的平均工資,保留到十位
select round(avg(sal),-1) from emp;
2、字符函數
字符函數:就是處理字符
1)字符函數 length(p)
字符長度計算函數,p:表示原值
--需求:計算員工的名字的長度
select length(ename),ename from emp;
2)替換函數? replace(p,c1,c2)
p:原值
c1:需要替換的值(舊值)
c2:替換后的值(新值)
--需求:my name is itcast 修改 my 為 your
select replace('my name is liwei','my','your') from dual;
--如果c2沒有值,表示直接刪除c1的值
select replace('my name is liwei','my') from dual;
3)偽表:dual
在Oracle里面,查詢都是使用select關鍵字的。而select關鍵字語法為:select 返回結果 from ?。
但是在查詢一些情況是沒有表的,查詢函數,查詢運算的結果,查詢關鍵字。Oracle在查詢這些沒有表的數據時,使用一個臨時表來存儲。這個臨時表就是偽表dual;
dual的作用就是查詢沒有表的數據時,用于維持select的語法的需要。
反正,沒有表的數據查詢時,統一使用dual
--如:查詢7+8的結果
select 7+8 from dual;
--如:查詢當前用戶
select user from dual;
--如:查詢當前的日期
select sysdate from dual;
3、日期時間函數
日期時間函數:就是處理日期時間的
1)日期函數
--如:查詢當前的日期
select sysdate from dual;
2)月份增加函數 add_months(p,m)
p:原值
m:增加的月份數,如果是正數就是加,如果是負數就是減
--需求:計算當前日期的5個月后的日期
select add_months(sysdate,5) from dual;
--需求:計算當前日期的5個月前的日期select add_months(sysdate,-5) from dual;3)日期月份對比函數 months_between(d1,d2)
日期月份對比函數,返回兩個日期的月份間隔
作用:
用于計算兩個日期的月份區間對比兩個日期的大小如果d1>d2,返回正數,如果 d1
--需求:計算當前日期,和2017-01-14.的月份間隔
select months_between(sysdate,to_date('2017-01-14','YYYY-MM-DD') ) from dual;
4)日期時間提前函數
extract(year|month|day|hour|minute|seconnd from |)
--需求:提前當前日期的年月日
--提取年
select extract(year from sysdate) from dual;
--提取月
select extract(month from sysdate) from dual;
--提取日
select extract(day from sysdate) from dual;
--提取時
--12小時制
select extract(hour from to_timestamp('2017-08-14 11:48:20','yyyy-mm-dd hh:mi:ss')) from dual;
--24小時制
select extract(hour from to_timestamp('2017-08-14 13:48:20','yyyy-mm-dd hh24:mi:ss')) from dual;
--提取分
select extract(minute from to_timestamp('2017-08-14 13:48:20','yyyy-mm-dd hh24:mi:ss')) from dual;
--提取秒
select extract(second from to_timestamp('2017-08-14 13:48:20','yyyy-mm-dd hh24:mi:ss')) from dual;
--oracle支持另種寫法,不用to_timestamp函數,使用timestamp關鍵字
--提取秒
select extract(second from timestamp '2017-08-14 13:48:20') from dual;
4、轉換函數
轉換函數:就是實現類型的轉成
1)字符串轉成日期? to_date(p,f)
p:原值
f:格式,年YYYY,月MM,日DD,時HH24,分MI,秒SS
2)字符串轉時間? to_timestamp(p,f)
p:原值
f:格式,年YYYY,月MM,日DD,時HH24,分MI,秒SS
3)將其他類型的值轉成字符串
將其他類型的值轉成字符串
將當前日期轉成字符串
to_char(p,f)
f:格式,年YYYY,月MM,日DD,時HH24,分MI,秒SS
select to_char(sysdate,'yyyy-mm-dd') from dual;
select to_char(sysdate,'yyyy/mm/dd') from dual;
4)將數值類型轉成字符串? to_char(p,f)
p:原值
f:數值的占位符是9
--需求:將8978767976,轉為$8,978,767,976
select to_char(8978767976,'$9,999,999,999') from dual;
5、通用函數
通用函數:一些幫助函數,空處理
1)空處理函數
nvl(p,v1):如果p的值為null,就返回v1.
nvl2(p,v1,v2):如果p的值不為null,返回v1,為null返回v2;
--需求:查詢有獎金員工
--nvl
select comm,nvl(comm,0) from emp;
select * from emp where nvl(comm,0)<>0;
--nvl2
select comm,nvl2(comm,comm,0) from emp;
select * from emp where nvl2(comm,comm,0)<>0;
四、聚合函數
聚合函數:就是用于統計
?max()
?min()
?count()
?sum()
?avg()
所謂的多行函數就是聚合函數,非聚合函數的其他函數就是單行函數。
五、分組查詢
1、分組查詢時什么
數據庫是支持統計數據功能,統計包括了最大值,最小值,平均值,總數,總記錄數
如果我們需要按某種字段分類后再統計呢?
我們將按某個字段分類稱為分組。
2、分組的作用
分組的作用實現將某種字段分類,再統計這個類型的統計數據。
--需求:統計員工工資的最大值,最小值,平均值,總數
select max(sal),min(sal),avg(sal),sum(sal) from emp;
--需求:按部門分組,求每個部門的最大工資和平均工資
select deptno,max(sal),avg(sal) from emp group by deptno;
--需求:按部門分組,求每個部門的最大工資和平均工資,平均工資在2000以上
--問題:使用where,還是having?
--答:因為平均工資是在分組后才可以獲得,所以使用優先級別在group by后面的having來判斷
--查詢語句的關鍵字是有優先級別的
--from > where > group by >having > select > order by
select deptno,max(sal),avg(sal) from emp group by deptno having avg(sal)>2000;
--問題:如果判斷的條件不需要分組就可以獲得,使用where.
--為什么:如果在分組前就可以過濾掉這些數據,就可以查詢時的效率。
總結
以上是生活随笔為你收集整理的oracle insert 当前时间_Oracle知识点总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 证券公司的理财产品怎么样?2019年度券
- 下一篇: 信用卡自动购汇还款如何/怎么开通