一、操作符: 1、分類: 算術、比較、邏輯、集合、連接; 2、算術操作符: 執行數值計算; 3、比較操作符: (不等於是!= , 在mysql中是<> ) 4、邏輯操作符:and or not 5、集合操作符: 將兩個查詢的結果組合成一個結果: ①、intersect 返回兩個查詢的公共行; ②、u ...
一、操作符:
1、分類:
算術、比較、邏輯、集合、連接;
2、算術操作符:
執行數值計算;
-- 工資加1000 select empno,ename,job,sal+1000 from emp;
3、比較操作符:
-- 比較運算符(between and包頭不包尾) select * from emp where sal between 1000 and 2000;
(不等於是!= , 在mysql中是<> )
4、邏輯操作符:and or not
--查詢獎金不為空的員工信息 select * from emp where comm is not null;
5、集合操作符:
將兩個查詢的結果組合成一個結果:
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:返回從第一個查詢的結果中排除第二個查詢中出現的行;(在第一個的結果中查找不滿足第二個的)
6、連接操作符:
將多個字元串或數據值合併成一個字元串;
--連接操作符 select ('員工號為'||empno||',姓名為'||ename||'的工資為'||sal) from emp
7、優先順序:
算術>連接>比較>not邏輯>and邏輯>or邏輯操作符
二、SQL函數:
用於執行特殊的操作的函數;
1、分類:
單行、 分組、分析;
2、單行函數分類:
從表中查詢的每一行只返回一個值;
字元、數字、日期、轉換、其他;
3、字元函數:
-- 字元串函數 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
4、數字函數;
5、日期函數:
對日期值進行計算,並生成日期數據類型或數值類型的結果;
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;--計算年紀
6、轉換函數:
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;--相等為空,不等為前者
7、分組函數:
基於一組行來返回結果;
avg、min、max、sum、count
8、分析函數:
根據一組行來計算聚合值;用於計算完成聚集的累計排名、移動平均數等;
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