1、操做符:java
一、分類:mysql
算術、比較、邏輯、集合、鏈接;sql
二、算術操做符:函數
執行數值計算;spa
-- 工資加1000 select empno,ename,job,sal+1000 from emp;
三、比較操做符:code
-- 比較運算符(between and包頭不包尾) select * from emp where sal between 1000 and 2000;
(不等因而!= , 在mysql中是<> )blog
四、邏輯操做符:and or not ci
--查詢獎金不爲空的員工信息 select * from emp where comm is not null;
五、集合操做符:開發
將兩個查詢的結果組合成一個結果:字符串
select sid from t_score where score>=70 and cid = '01' INTERSECT select sid from t_score where score>=70 and cid = '07';
①、intersect 返回兩個查詢的公共行;
②、union:返回兩個查詢的不重複的全部行;這裏面能夠是一個表中的數據(在mysql中是另外的聯合查詢--不是一個表)
③、minus:返回從第一個查詢的結果中排除第二個查詢中出現的行;(在第一個的結果中查找不知足第二個的)
六、鏈接操做符:
將多個字符串或數據值合併成一個字符串;
--鏈接操做符 select ('員工號爲'||empno||',姓名爲'||ename||'的工資爲'||sal) from emp
七、優先級:
算術>鏈接>比較>not邏輯>and邏輯>or邏輯操做符
2、SQL函數:
用於執行特殊的操做的函數;
一、分類:
單行、 分組、分析;
二、單行函數分類:
從表中查詢的每一行只返回一個值;
字符、數字、日期、轉換、其餘;
三、字符函數:
-- 字符串函數 select lower(ename),job from emp; --小寫 select ltrim('xysdezadmas','xyz') from dual;--截取:從左邊開始按後面字段開始截取,有幾個截取幾個,沒有就不截取
①、其餘字符函數:
chr:根據ASCII碼返回對應的字符(0:48 a:97 A:65)
lpad和rpad: 填充;
trim:去除左右兩邊的空格符;
lenth:字符串長度;
decode:逐個值置換;
select sname,decode(cid,1,'開發部')as 部門 from java0322; select ename,decode(job,'CLERK','職員','SALESMAN','導購') as 工做 from emp
四、數字函數;
五、日期函數:
對日期值進行計算,並生成日期數據類型或數值類型的結果;
add_months 偏移;
months_between:月數差;
last_day 最後一天;
round:四捨五入;
trunc:只舍不入,返回指定日期模式截斷後的第一天;
next_day(d,day):下週周幾的日期
extract:計算年份差:
--日期函數 select add_months(sbirth,-3) from java0322;--月份偏移3月,能夠是負數,也就是向前偏移 select extract(year from sysdate) from dual;--截取當前時間的年份 select sname,extract(year from sysdate) - extract(year from sbirth) from java0322;--計算年紀
六、轉換函數:
to_char:按照指定的格式轉化字符串;
to_date:將字符串轉化爲日期;
to_number:將數字字符串轉化爲數字;----能夠實現直接在sql語句中進行格式的轉換
--轉換函數(字符串,格式) Select TO_CHAR(0.123,'$0.9999') FROM DUAL; --字符串轉日期 select to_date ('2005-02-28','yyyy-mm-dd') from dual; --字符串轉數字 select to_number('20') from dual;
其餘函數:
nvl:isnull,不爲空時爲自己,爲空時指定0;
nvl2:不爲空時指定值2,爲空時指定值3;
NullIF:相等時爲空,不然爲前者
--查詢員工表的全部人的姓名,工資+獎金(獎金沒有的時候,由null轉爲0)---nvl轉換空值的函數 select ename,sal+nvl(comm,0)as sal from emp;--當空爲0,不爲空爲comm select ename,sal+nvl2(comm,10000,0) from emp;---不爲空時10000,爲空時0; select nullif(100,200) from dual;--相等爲空,不等爲前者
七、分組函數:
基於一組行來返回結果;
avg、min、max、sum、count
八、分析函數:
根據一組行來計算聚合值;用於計算完成彙集的累計排名、移動平均數等;
row_number:返回連續的排位,不論值是否相等;
rank:具備相等值的行排位相同,序數隨後跳躍;
dense_rank:具備相等值的行排位相同,序號是連續的
-- 排位 select empno,ename,job,sal,row_number()over (order by sal desc) as numm from emp; --返回連續的排位,不論值是否相等12345 select empno,ename,job,sal,rank()over (order by sal desc) as numm from emp; --相等值的行排位相同,序號隨後跳躍;12245 select empno,ename,job,sal,dense_rank()over (order by sal desc) as numm from emp; --相等值的行排位相同,序號是連續的;12234