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

更多推荐

oracle某几列数据进行相加,oracle 基础知识:两个number列相加