Oracle数据库表的基本操作以及空值问题的解决

1.Oracle数据库语言分类:

1)DDL:数据定义语言,对数据结构起作用

  • create:创建某对象

  • alter:修改某对象

  • drop:删除某对象

  • truncate:清空数据+隐式提交

    2)DCL:数据控制语言

  • grant:授权

  • revoke:回收

    3)DQL:数据查询语言

  • select:查询

    4)DML:数据操纵语言,对数据起作用

  • insert:增添数据

  • delete:删除数据

  • update:修改数据+显式提交

    5)TCL:事务控制语言(对DML起作用)

  • commit:提交

  • savepoint:保留点,与rollback搭配使用

  • rollback:回滚

2.区分delete,drop,truncate?(面试题)

1)语言分类:delete是数据操纵语言(DML),drop和truncate是数据定义语言(DDL)

2)删除内容:drop是删除整个对象,truncate是清空对象中的数据,delete是删除数据

3)是否可以回滚:delete是可回滚的,drop和truncate是不可回滚的

3.常见命令:

1)创建数据库对象:

​ 语法:

create table 表名(字段1 数据类型,字段2 数据类型,.......);

2))添加数据:

语法:

insert into 表名 values(1,值2...); //表中有几个字段,对应就有几个值

insert into 表名(字段1,字段2values(1,值2);//给必须赋值的字段添加数据

3)查询数据:

语法:

select * from 表名;

select 字段1,字段2 from 表名;

select 表达式 from dual; //dual是虚表(一行一列的虚表)

4)查询表结构:

语法:

  desc 表名;

5)修改数据:

语法:

  update 表名 set 字段 = '值' where 字段 = '值';

6)删除数据:

语法:

  delete from 表名 where 字段='值';

4.Oracle数据库的数据类型:

1)数字类型:

  • number(n):数字(最长为n位)
  • number(n,m):最长n,小数点后保留m位

​ 例如:number(5,2)的最大值是多少? 999.99

2)字符类型:(面试题:区分char、varchar、varchar2)

  • char(n):固定长度n,若插入的数据长度不足n,则必须用空格补齐
  • varchar(n):长度可变,若插入数据长度不足n,则最后显示字符长度为插入数据的长度值
  • varchar2(n):用法与varchar一致,varchar2是Oracle 数据库特有的类型

3)日期类型:

  • date

学完了Oracle的常用命令和数据类型,我们来举个例子:

create table dept_jinli( deptno number(2) , dname char(20) , location char(20)) ;
insert into dept_jinli values(10 , 'developer' , 'beijing') ; 
insert into dept_jinli values(20 , 'account' , 'shanghai') ;
insert into dept_jinli values(30 , 'sales' , 'guangzhou') ; 
insert into dept_jinli values(40 , 'operations' , 'tianjin') ; 
commit ;


create table emp_jinli( 
empno number(4) , 
ename varchar2(20) , 
job varchar2(15) , 
salary number(7 , 2) , 
bonus number(7 , 2) , 
hiredate date, 
mgr number(4) ,
deptno number(10));

insert into emp_jinli values( 1001 , '张无忌' , 'Manager' , 10000 , 2000 ,
                                 to_date( '2010-12-12' , 'YYYY-MM-DD' ) , 1005 , 10) ; 
insert into emp_jinli values( 1002 , '小苍' , 'Analyst' , 8000 , 1000 , 
                                 to_date( '2011-01-01' , 'YYYY-MM-DD' ) , 1001, 10) ; 
insert into emp_jinli values( 1003 , '李怡' , 'Analyst' , 9000 , 1000 ,
                                 to_date( '2010-01-11' , 'YYYY-MM-DD' ) , 1001, 10) ;
insert into emp_jinli values( 1004 , '郭芙蓉' , 'Programmer' , 5000 , null , 
                                 to_date( '2011-07-01' , 'YYYY-MM-DD' ) , 1001 , 10) ; 
insert into emp_jinli values( 1005 , '张三丰' , 'President' , 15000 , null ,
                                 to_date( '2008-05-15' , 'YYYY-MM-DD' ) , null , 20) ; 
insert into emp_jinli values( 1006 , '燕小六' , 'Manager' , 5000 , 400 , 
                                 to_date( '2009-02-01' , 'YYYY-MM-DD' ) , 1005 , 20) ;
insert into emp_jinli values( 1007 , '陆无双' , 'clerk' , 3000 , 500 ,
                                 to_date( '2009-02-01' , 'YYYY-MM-DD' ) , 1006 , 20) ;
insert into emp_jinli values( 1008 , '黄蓉' , 'Manager' , 5000 , 500 , 
                                 to_date( '2009-05-01' , 'YYYY-MM-DD' ), 1005 , 30) ; 
insert into emp_jinli values( 1009 , '韦小宝' , 'salesman' , 4000 , null , 
                                 to_date( '2009-02-20' , 'YYYY-MM-DD' ) , 1008 , 30) ; 
insert into emp_jinli values( 1010 , '郭靖' , 'salesman' , 4500 , 500 , 
                                 to_date( '2009-05-10' , 'YYYY-MM-DD' ) , 1008 , 30) ;

查询员工表和部门表:

select * from emp_jinli;
select * from dept_jinli;

查询员工表中员工的月薪及年薪

select ename ,salary ,salary*12+bonus from emp_jinli;

用上面这个式子就会出现一个问题,如图所示有些人的年薪为null:
在这里插入图片描述

5.null:

1)任何数据都可以为空

2)如果null参与运算,则结果都空

3)空值null与字符串进行拼接操作,则null相当于没有(Oracle数据库中拼接操作用’||’,Java中用加号)

6.nvl(字段1,值1):

处理null的函数,如果字段1为null,则显示值1

注意

  • nvl(d1,d2)必须保证d1,d2的数据类型一致

  • nvl2(表达式,d1,d2):判断表达式,如果表达式成立则执行d1,反之执行d2,相当于三目运算 表达式?值1:值2

所以上面的那种情况可以这样改:

select ename,salary ,salary*12+nvl(bonus,0) from emp_jinli;

这时的效果图就是:
在这里插入图片描述

发布了24 篇原创文章 · 获赞 41 · 访问量 2778

猜你喜欢

转载自blog.csdn.net/abc701110/article/details/105532384