通用函数主要有两个:NVL(),DECODE(),这两个函数算是ORACLE自己的特色函数;
1.NVL()函数,处理 NULL
例子:查出每个雇员的全部年薪;
SQL> SELECT first_name,salary,commission_pct,(salary+commission_pct)*12 FROM employees;
FIRST_NAME SALARY COMMISSION_PCT (SALARY+COMMISSION_PCT)*12
-------------------- ---------- -------------- --------------------------
Donald 2600
Douglas 2600
Jennifer 4400
Michael 13000
Pat 6000
Susan 6500
Hermann 10000
Shelley 12000
William 8300
Steven 24000
Neena 17000
FIRST_NAME SALARY COMMISSION_PCT (SALARY+COMMISSION_PCT)*12
-------------------- ---------- -------------- --------------------------
Lex 17000
Alexander 9000
Bruce 6000
David 4800
Valli 4800
Diana 4200
Nancy 12000
Daniel 9000
John 8200
Ismael 7700
Jose Manuel 7800
FIRST_NAME SALARY COMMISSION_PCT (SALARY+COMMISSION_PCT)*12
-------------------- ---------- -------------- --------------------------
Luis 6900
Den 11000
Alexander 3100
Shelli 2900
Sigal 2800
Guy 2600
Karen 2500
Matthew 8000
Adam 8200
Payam 7900
Shanta 6500
FIRST_NAME SALARY COMMISSION_PCT (SALARY+COMMISSION_PCT)*12
-------------------- ---------- -------------- --------------------------
Kevin 5800
Julia 3200
Irene 2700
James 2400
Steven 2200
Laura 3300
Mozhe 2800
James 2500
TJ 2100
Jason 3300
Michael 2900
FIRST_NAME SALARY COMMISSION_PCT (SALARY+COMMISSION_PCT)*12
-------------------- ---------- -------------- --------------------------
Ki 2400
Hazel 2200
Renske 3600
Stephen 3200
John 2700
Joshua 2500
Trenna 3500
Curtis 3100
Randall 2600
Peter 2500
John 14000 .4 168004.8
FIRST_NAME SALARY COMMISSION_PCT (SALARY+COMMISSION_PCT)*12
-------------------- ---------- -------------- --------------------------
Karen 13500 .3 162003.6
Alberto 12000 .3 144003.6
Gerald 11000 .3 132003.6
Eleni 10500 .2 126002.4
Peter 10000 .3 120003.6
David 9500 .25 114003
Peter 9000 .25 108003
Christopher 8000 .2 96002.4
Nanette 7500 .2 90002.4
Oliver 7000 .15 84001.8
Janette 10000 .35 120004.2
这时有雇员的年薪变成了NULL,而造成这种问题的关键是在commission_pct字段上位NULL,那我们解决这个问题就必须做一种处理:将NULL变成“0”
SQL> SELECT first_name,salary,commission_pct,(salary+NVL(commission_pct,0))*12 FROM employees;
FIRST_NAME SALARY COMMISSION_PCT (SALARY+NVL(COMMISSION_PCT,0))*12
-------------------- ---------- -------------- ---------------------------------
Donald 2600 31200
Douglas 2600 31200
Jennifer 4400 52800
Michael 13000 156000
Pat 6000 72000
Susan 6500 78000
Hermann 10000 120000
Shelley 12000 144000
William 8300 99600
Steven 24000 288000
Neena 17000 204000
注意:NVL就是将NULL变为0.
2.DECODE()函数:多数值判断
DECODE()函数非常类似于程序中的if。。。else语句,不同的是DECODE()函数判断是数值,而不是逻辑条件。
例子:将雇员的职位替换成中文显示:
SH_CLERK:办事员
这种判断肯定是逐行判断,所以这时就必须用到DECODE()函数,而此时函数语法如下:
DECODE(数值 |列,判断值1,显示值1,判断值2,显示值2,判断值3,显示值3,...)
例子;实现显示操作功能
SQL> SELECT first_name,job_id,DECODE(job_id,'SH_CLERK','办事员') FROM employees;
FIRST_NAME JOB_ID DECODE
-------------------- ---------- ------
Donald SH_CLERK 办事员
Douglas SH_CLERK 办事员
注意:DECODE()函数是我们ORACLE中最有特点的函数,一定要掌握。
4.总结
SQL的基本语法是SELECT 、FROM、WHERE、ORADER BY 的关系;
HR用户的所有数据表的信息,包括列的名称,即作用和类型;
ORACLE中的几个单行函数,要记下来所有的函数都要求会使用;