1查看表结构
SQL> desc teachers;
Name Type Nullable Default Comments
------------- ----------- -------- ------- --------
TEACHER_ID NUMBER(5)
NAME VARCHAR2(8)
TITLE VARCHAR2(6) Y
HIRE_DATE DATE Y sysdate
BONUS NUMBER(7,2) Y
WAGE NUMBER(7,2) Y
DEPARTMENT_ID NUMBER(3) Y
2查看表的数据
SQL> select * from teachers;
TEACHER_ID NAME TITLE HIRE_DATE BONUS WAGE DEPARTMENT_ID
---------- -------- ------ ----------- --------- --------- -------------
10101 王彤 教授 1990/9/1 1000.00 3000.00 101
10104 孔世杰 副教授 1994/7/6 800.00 2700.00 101
10103 邹人文 讲师 1996/1/21 600.00 2400.00 101
10106 韩冬梅 助教 2002/8/1 500.00 1800.00 101
10210 杨文化 教授 1989/10/3 1000.00 3100.00 102
10206 崔天 助教 2000/9/5 500.00 1900.00 102
10209 孙晴碧 讲师 1998/5/11 600.00 2500.00 102
10207 张珂 讲师 1997/8/16 700.00 2700.00 102
10308 齐沈阳 高工 1989/10/3 1000.00 3100.00 103
10306 车东日 助教 2001/9/5 500.00 1900.00 103
10309 臧海涛 工程师 1999/6/29 600.00 2400.00 103
10307 赵昆 讲师 1996/2/18 800.00 2700.00 103
10128 王晓 2007/9/5 1000.00 101
10328 张笑 2007/9/29 1000.00 103
10228 赵天宇 2007/9/18 1000.00 102
11111 林飞 2007/10/11 1000.00
3计算教师月收入,基本工资+奖金
SQL> select t.name as "姓名", t.bonus+t.wage as "月总收入" from teachers t;
姓名 月总收入
-------- ----------
王彤 4000
孔世杰 3500
邹人文 3000
韩冬梅 2300
杨文化 4100
崔天 2400
孙晴碧 3100
张珂 3400
齐沈阳 4100
车东日 2400
臧海涛 3000
赵昆 3500
王晓
张笑
赵天宇
林飞
16 rows selected
这里可以看到,在奖金为NULL的列上,虽然都为number类型,但这位老师的月收入为空了。显然是不对的。oracle没有默认的实现这个功能。
这个时候需要我们采用nvl函数来给列设置默认值,假如是空的,默认为零
SQL> select t.name as "姓名", nvl(t.bonus,0)+t.wage as "月总收入" from teachers t;
姓名 月总收入
-------- ----------
王彤 4000
孔世杰 3500
邹人文 3000
韩冬梅 2300
杨文化 4100
崔天 2400
孙晴碧 3100
张珂 3400
齐沈阳 4100
车东日 2400
臧海涛 3000
赵昆 3500
王晓 1000
张笑 1000
赵天宇 1000
林飞 1000
16 rows selected
这样就对了。
还可以使用nvl2函数
SQL> select t.name as "姓名" ,nvl2(t.bonus,t.bonus+t.wage,t.wage) as "总收入" from teachers t;
姓名 总收入
-------- ----------
王彤 4000
孔世杰 3500
邹人文 3000
韩冬梅 2300
杨文化 4100
崔天 2400
孙晴碧 3100
张珂 3400
齐沈阳 4100
车东日 2400
臧海涛 3000
赵昆 3500
王晓 1000
张笑 1000
赵天宇 1000
林飞 1000
16 rows selected
还可以利用coalesce函数(返回表达式中第一个非空值,如果都为空,则返回为空)来计算教师的月收入:
SQL> select t.name as "姓名" ,nvl2(t.bonus,t.bonus+t.wage,t.wage) as "总收入" from teachers t;
姓名 总收入
-------- ----------
王彤 4000
孔世杰 3500
邹人文 3000
韩冬梅 2300
杨文化 4100
崔天 2400
孙晴碧 3100
张珂 3400
齐沈阳 4100
车东日 2400
臧海涛 3000
赵昆 3500
王晓 1000
张笑 1000
赵天宇 1000
林飞 1000
16 rows selected