函數就是封裝了特定的一些功能,直接拿過來使用,如字元串的處理,日期的運算,數值的運算等等。
函數隻是對查詢結果中的資料進行處理,不會改變資料庫中資料表的值。
函數分為單行函數和多行函數:
單行函數:單行函數是指對每一條記錄進行計算,并得到相應的結果,傳回給使用者,也就是說,每條記錄作為一個輸入參數,經過函數計算得到每條記錄的計算結果。
多行函數:多行函數是指對一組資料進行計算,針對這一組資料(多行記錄)隻傳回一個結果,也稱為分組函數。
單:改變每一條結果,每一條資料對應一條結果
多:多條資料,最終展示一個結果。
注:除了多行函數(max,min,count,sum,avg),都是單行函數
select empno,ename,lower(ename),upper(ename),sal from emp; -- 單(多個結果)
運作結果:

select max(sal),min(sal),count(sal),sum(sal),avg(sal) from emp; -- 多 (一個結果)
單行函數:
1.字元串函數:
select ename,length(ename),substring(ename,2,3) from emp; -- length長度 substring(2,3)字元串截取從2開始,截取長度為3
2.數值函數:
select abs(-5),ceil(5.2),floor(5.4),round(3.14) from emp; -- abs取絕對值 ceil向上取整 floor向下取整 round四舍五入 這裡顯示14行,沒有必要
select abs(-5),ceil(5.2),floor(5.4),round(3.14) from dual; -- dual實際是一個僞表 在控制台列印一行
注:如果沒有where條件的話,from dual 可以省略不寫,運作結果還是一樣的。
select abs(-5),ceil(5.2),floor(5.4),round(3.14) ;
3.日期與時間函數:
select curdate(),curtime(); -- 擷取目前年月日,時分秒
select now(),sysdate(),sleep(2),now(),sysdate() from dual; -- 都是傳回年月日時分秒 但是sysdate是傳回函數執行的日期和時間
insert into emp values (5200,'bobo','salasman',7698,now(),1000,null,30); -- now()可以表示年月日時分秒,但是插入資料的時候還是要參照表的結構的
添加成功後,檢視表,select * from emp;
desc emp; -- date 對應年月日 datetime對應 年月日時分秒
4.流程函數:
if相關:
select empno,ename,sal,if(sal>=2500,'高薪','底薪') as '薪資等級' from emp; -- if - else 雙分支結構
select empno,ename,sal,comm,sal+ifnull(comm,0) from emp; -- 如果comm是null,那麼取值為0 單分支
select nullif(1,1),nullif(1,2) from dual; -- 如果value1等于value2,則傳回null,否者傳回value1
case相關:
case等值判斷:
select empno,ename,job,
case job
when 'clerk' then '店員'
when 'salesman' then '銷售'
when 'manager' then '經理'
else '其他'
end as '崗位',
sal from emp;
case區間判斷:
select empno,ename,sal,
case
when sal<=1000 then 'A'
when sal<=2000 then 'B'
when sal<=3000 then 'C'
else 'D'
end as '公資等級',
deptno from emp;
5.JSON函數:先略
6.其他函數:
select database(),user(),version()from dual; -- database資料庫 user使用者 version版本
多行函數:
select max(sal),min(sal),count(sal),sum(sal),avg(sal) from emp; -- max最大 min最小 count計數 sum總共 avg平均
select max(comm),min(comm),count(comm),sum(comm),avg(comm) from emp; -- max(),min(),count()針對所有類型 sum(),avg()隻針對數值類型有效
count一般用來計算:
select * from emp;
select count(ename) from emp;
select count(*) from emp;
都是14條記錄。