oracle数据库基本操作

--获取当前系统时间

select systimestamp from dual ;

 

 

--rowid

select rowid,emp.* from emp ;

 

 

--rownum

select rownum,emp.* from emp ;

 

 --创建表

creat table java0512(

sid int primary key , --主键非空

sname varchar(20) unique , --唯一约束

birth date,

ssex char(5) check(ssex in(' 男 ' , ' 女 ')),--检查约束 ,在check里面直接写条件,只能填条件以内的

saddress varchar(30) default ' 山东淄博 ' , --默认约束

idcard varchar(30) not null , --非空约束

deptno number ,

foreign key(deptno) references dept(deptno) --外键约束

);

drop table java0512 ; --删除表

insert into java0512(sid,sname,birth,ssex,idcard,deptno)
values(2,'海绵宝宝',to_date('1998-08-08','yyyy-MM-dd'),'男','370303xxx',20);

--添加信息,date 类型按指定格式写

--复制表!!!

create table emp01 as select * from emp;

--复制表结构

create table emp01 as select * from emp where 1=2;

--插入来自其他表中的数据

insert into emp01 select * from emp where 条件

--创建用户,赋密码

create user 用户名 identified by 密码

--连接数据库权限,赋值查询权限(新用户可以查询旧用户的信息)

grant connect , resource to 新用户

grant select on 旧用户 to 新用户 with grant option

--新用户添加或删除别的用户的信息

GRANT update,delete,insert ON scott.emp
TO xiaoniu WITH GRANT OPTION;

--撤销权限

revoke select on scott.emp from xiaoniu 

--给表起别名

select * from emp e join dept d on e.depton=d.deptno

--左外连接
select * from dept d left join emp e on d.deptno=e.deptno
--右外接
select * from emp d right join dept e on d.deptno=e.deptno

insert into emp(empno,ename,job,mgr,hiredate,sal,comm)
values(7899,'TONY','hair',7369,to_date('1998-08-08','yyyy-mm-dd'),5000,200)
--全外连接
select * from emp e full join dept d on d.deptno=e.deptno

--分页
--第一页
select * from(select rownum as n,emp.* from emp) where n>=1 and n<=3
--er,n>(当前页-1) * 每页显示条数 and n<当前页*每页显示条数
select * from(select rownum as n,emp.* from emp) where n>=3 and n<=5

--连接操作符
select '员工编号为'||empno||',姓名为'||ename||',的工作是'||job as info from emp
--转大小写
--小写
select lower(ename),job,mgr from emp

select upper(ename),job,mgr from emp
--替换decode(多用于是否,性别,可直接替换0,1)
select ename,decode(deptno,'10','开发部',20,'测试部',30,'产品部')as ename from emp
--查询员工的工龄,当前系统时间-员工工龄
select ename,extract(year from sysdate)-extract(year from hiredate)as age from emp;

 

--把0.123转成$ 

select to_char(0.123 , ' $0.9999 ') from dual

 

--计算和

select to_number(' 200 ')+100 as num from dual 

 

 --转换空值函数

--num=sal+comm

select ename,sal,comm,sal+comm as num from emp

 

 --如果comm为null就按0计算(空值转换函数nvl(字段,字段为空时转换为什么))

select ename,sal,comm,sal+nvl(comm,0) as num from emp

 

 

--nvl2(字段,字段不为空时的值,字段为空时的值)

select ename,sal,comm,sal+nvl2(comm,comm,100) as num from emp

 

 --两数相同返回第一个值,一样返回null

select nullif(100,200) from dual

 

 

 

 --并列函数

 

--emp表工资排名

select emp.*,row_number()over(order by sal desc)as num from emp

 

 --并列,两个第一就没有第二

select emp . * , rank() over(order by sal desc) as num from emp

 

 --并列,两个第一有第二

select emp . * ,dense_rank()over(order by sal desc) as num from emp

 

 

--授权

GRANT CREATE SYNONYM TO xiaoniu;
GRANT SELECT ON SCOTT.EMP TO xiaoniu;
GRANT DELETE ON SCOTT.EMP TO xiaoniu;
GRANT UPDATE ON SCOTT.EMP TO xiaoniu;

--同义词(相当于给表起一个永久性别名)

--给表起别名,谁创建,谁使用(私有同义词)

create synonym e for scott.emp;

查表可以直接select * from e

--删除私有同义词

drop synonym e

--创建共有的同义词,都可以调

create public synonym e for scott.emp

--删除共有的同义词

drop public synonym e

 

--创建序列,自增

create sequence seq01

start with 1

increment by 1;

--删除序列

drop sequence seq01

--清空表

delete from java0512

--查当前索引页的值是几

select seq01.currval from dual

--创建视图语句

create view e_d
as select emp.*,dept.deptno as dno,dname from emp join dept on emp.deptno=dept.deptno

--设置权限

grant create view to scott

select * from e_d

--创建表

create table a_testseq
(
id number,
name varchar2(10)
);

--创建序列
create sequence aeq_value
start with 1
increment by 1;
--添加数据

 

 文件-->新建-->命令窗口

--查
select * from a_testseq where id=78888
create index in_test on a_testseq(id)

 

posted @ 2020-09-08 09:04  wangmeihao  阅读(158)  评论(0编辑  收藏  举报