文章目录
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,字段2) values(值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;
这时的效果图就是: