操做符及SQL函數java
SQL操做符:算術運算符、比較運算符、邏輯運算符、集合操做符、鏈接操做符函數
算術操做符3d
算術操做符用於執行數值計算blog
能夠在SQL語句中使用算術表達式,算術表達式由數值數據類型的列名、數值常量和鏈接它們的算術操做符組成ci
算術操做符包括加(+)、減(-)、乘(*)、除(/)字符串
例如:檢索出課程號是‘02’的成績+10分後的結果ast
select sid,cid,score+10 as lastscore where cid='02';class
nvl函數 若是comm列是空,則按0計算,否則sal+comm的空值,結果就會爲空date
select empno,ename,sal+nvl(comm,0) as lastsal from emp;select
比較操做符
比較操做符用於比較兩個表達式的值
比較操做符包括 =、!=、<、>、<=、>=、BETWEEN…AND、IN、LIKE 和 IS NULL等
邏輯操做符
邏輯操做符用於組合多個比較運算的結果以生成一個或真或假的結果
邏輯操做符包括與(AND)、或(OR)和非(NOT),NOT一般和AND,OR聯合使用。
集合操做符
集合操做符是將兩個查詢的結果組成一個結果
UNION 操做符返回兩個查詢的不重複的全部行。
INTERSECT 操做符只返回兩個查詢的公共行。
MINUS 操做符返回從第一個查詢結果中排除第二個查詢中出現的行。
鏈接操做符
鏈接操做符用於將多個字符串或數據值合併成一個字符串
經過使用鏈接操做符能夠將表中的多個列合併成邏輯上的一行列
SELECT ('學號爲' || SID|| '的同窗姓名是' || SNAME) as SINFO FROM t_student;
操做符的優先級
SQL 操做符的優先級從高到低的順序是:
算術操做符 --------最高優先級
鏈接操做符
比較操做符
NOT 邏輯操做符
AND 邏輯操做符
OR 邏輯操做符 --------最低優先級
SQL函數
SQL函數帶有一個或多個參數並返回一個值
單行函數
單行函數對於從表中查詢的每一行只返回一個值
能夠出如今select子句中和where子句中
單行函數分爲:字符函數、數字函數、日期函數、轉換函數、其餘函數
字符函數
字符函數接收字符輸入並返回字符或數值
以及是一些其餘的字符函數
CHR :根據ASCII碼返回對應的字符
LPAD和RPAD :填充
TRIM :去除左右兩邊的空格符
LENGTH :字符串長度
DECODE :逐個值替換
例如:
SELECT LENGTH(‘student') FROM dual;
SELECT sname , DECODE(ssex,’m’,‘男’,‘f‘,’女’) as ssex FROM t_student;
數字函數
數字函數接收數字輸入並返回數值結果
日期函數
日期函數對日期值進行運算,並生成日期數據類型或數值類型的結果
日期函數包括:ADD_MONTHS 、MONTHS_BETWEEN 、LAST_DAY 、ROUND 、TRUNC 、NEXT_DAY 、EXTRACT 計算年份差
轉換函數
轉換函數將值從一種數據類型轉換爲另外一種數據類型
經常使用的轉換函數有:
TO_CHAR :按照指定的格式轉化字符串
TO_DATE :將字符串轉化成日期
TO_NUMBER :將數字字符串轉化成數字
例如:
Select TO_CHAR(0.123,‘$0.9999') FROM DUAL;
SELECT TO_CHAR(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS') FROM dual;
SELECT TO_DATE(‘2005-12-06’ , ‘yyyy-mm-dd’) FROM dual;
SELECT TO_NUMBER('100') FROM dual;
其餘函數
如下是幾個用來轉換空值的函數(scottemp)
NVL、NVL二、NULLIF
例如:查詢員工工資和(工資sal+獎金comm)
Select empno ,sal +comm from emp;
Select empno ,sal + nvl(comm,0) from emp;
SELECT empno,sal + nvl2(comm,comm,0) from emp;
SELECT NULLIF(100,200) FROM DUAL;
分組函數
分組函數基於一組行來返回結果
爲每一組行返回一個值
分析函數
分析函數根據一組行來計算聚合值
用來計算完成彙集的累計排名、移動平均數等
分析函數爲每組記錄返回多個行
如下三個分析函數用於計算一個行在一組有序行中的排位,序號從1開始
ROW_NUMBER 返回連續的排位,不論值是否相等
select ename,job,deptno,sal,row_number() over(order by sal desc) as sal_rank from scott.emp;
RANK 具備相等值的行排位相同,序數隨後跳躍
DENSE_RANK 具備相等值的行排位相同,序號是連續的
--計算年份差 select extract (year from sysdate)-extract(year from to_date('1995-08-26','yyyy-MM-DD')) age from dual; --add_months:指定某個時間段之後的日期 select add_months (sysdate,3) from dual;--指定三個月之後的日期 --months_between:相差的月數,其中小數是以1個月31天計算出來的 select months_between(sysdate,to_date('1995-08-26','yyyy-MM-DD'))from dual; --last_day:當月的最後一天 select last_day(sysdate) from dual; --round:四捨五入 select round(months_between(sysdate,to_date('1995-08-26','yyyy-MM-DD')))from dual; --trunc:只舍不入 select trunc(months_between(sysdate,to_date('1995-08-21','yyyy-MM-DD')))from dual; --轉換函數 select to_char(0.123,'$0.999')from dual; select to_date('1995-01-07','yyyy-MM-DD')from dual; select to_number('1000')from dual; --分析函數 --ROW_NUMBER 返回連續的排位,不論值是否相等 select ename,job,deptno,sal,row_number() over(order by sal desc) as sal_rank from scott.emp; --前三名 select * from( select ename,job,deptno,sal,row_number() over(order by sal desc) as sal_rank from scott.emp )where sal_rank<=3; --RANK 具備相等值的行排位相同,序數隨後跳躍 select ename,job,deptno,sal,rank() over(order by sal desc) as sal_rank from scott.emp; --DENSE_RANK 具備相等值的行排位相同,序號是連續的 select ename,job,deptno,sal,dense_rank() over(order by sal desc) as sal_rank from scott.emp; --其餘函數 SELECT NULLIF(100,200) FROM DUAL;--兩值相等則爲空,不等則爲第一個值