oracle常用命令

--备份scott
exp
--创建表空间
create tablespace xxx datafile 'e:\xxx.ora' size 5m autoextend on;
--创建用户
create user xxx identified by xxx default tablespace users quota 10M users;
grant create session,create table,create view to xxx;
--导入数据
imp

--删除用户
drop user XXX cascade;

--授权
grant create table ,create view to scott;

--(desc)查看表结构
desc emp;
--复制一张表
create table emp2 as select * from emp;

--特殊表(dual)
select 2*3 from dual;
select sysdate dual;
--列字段取别名
select ename,sal*2 as anuual_sal from emp;--使用as关键字
select ename,sal*2 anuual_sal from emp;--不使用as关键字
select ename,sal*2 "anuual sal" from emp;--使用“”保持原有格式
--连接符
select ename||sal from emp;
select ename||'sdfsdfsdfsdf''sdfsdf' from emp;--使用两个''(单引号)代表 一个'(单引号)
--(distince)过滤重复值
select distince deptno from emp;
--(is null)过滤空行
select ename,sal,comm from emp where comm is null;
--where条件
select * from emp where deptno=10;
--between...and
select ename,sal from emp where sal between 1500 and 5000;
--in关键字
select ename,sal,comm from emp where sal in(800,1500,2000);
--日期处理
select ename,sal hiredate from emp where hiredate > '20-2月-1981';
--like查询
select ename from emp where ename like '%T%';
select ename from emp where ename like '%\%%';--使用转译字符
select ename from emp where ename like '%$%%' escape '$'; --使用指定的字符串作为转译字符
--(order by)排序 ...
select * from dept order by deptno desc;
select ename,sal, deptno from emp order by deptno asc,sal desc;--首先按照deptno排序,然后按照sal降序
--(lower、upper)转换大小写
select lower(ename) from emp;
select upper(ename) from emp;
--(substr)字符串截取
select substr(ename,2,3) from emp;--从第二位开始截取,截取3个字符
--(round)四舍五入
select round(23.653)from dual;
select round(23.653,2)from dual;--四舍五入到小数点第二位
--(to_char)转换成特定格式
select to_char(sal,'$99,9999.9999')from emp;
select to_char(sal,'L99,9999.9999')from emp;--转换成本地货币格式
select to_char(hiredate,'YYYY-DD-MM HH-MI-SS')from emp;--转换时间格式 12进制时间
select to_char(hiredate,'YYYY-DD-MM HH24-MI-SS')from emp;--转换时间格式 24进制时间
--(to_date)将字符串转换成时间格式
select ename,hiredate from emp where hiredate > to_date('1981-2-20 12:34:56','YYYY-MM-DD HH24:MI:SS');
--(to_number)把字符串转换成数字
select sal from emp where sal > to_number('$1,250.00','$9,9999.9999');
--NVL(通过查询获得某个字段的合计值,如果这个值位null将给出一个预设的默认值)
select ename,sal*2+nvl(comm,0)from emp;
--(max、min、avg、count)组函数
select max(sal) from emp;
select min(sal) from emp;
select avg(sal) from emp;
select count(ename) from emp;
--(group by)分组函数
select deptno,avg(sal) from emp group by deptno;
注意:出现在select列表里面的字段没有出现在组函数里面就必须出现在group by函数里面
--(having)筛选
select avg(sal),deptno from emp group by deptno having avg(sal)>2000;
--(rownum)
select empno,ename from emp where empno<5;


*******************************************************
--薪水大于1200的雇员按照部门编号进行分组,分组后的平均薪水大于1500,然后查询分组后的平均工资,最后进行倒序排列
select avg(sal) from emp where sal>1200 group by deptno having avg(sal)>1500 order by avg(sal) desc;

*******************************************************
--子查询
select ename,sal from emp where sal=(select max(sal) from emp);--薪水最高的那个员工
select e1.ename,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno;--自连接

--交叉连接
select ename,dname from emp cross join dept;
--等值连接
select ename,dname from emp join dept on(emp.deptno=dept.deptno);
--左外连接
select e1.ename,e2.ename from emp e1 left join emp e2 on(e1.mgr=e2.empno);
--右外连接
select ename,dname from emp e right join dept d on(e.deptno=d.deptno);
--全外连接
select ename,dname from emp e full join dept d on(e.deptno=d.deptno);

*******************************************************
--求部门中哪些人的薪水最高
select ename,sal from emp
join(select max(sal) max_sal,deptno from emp group by deptno)t
on(emp.sal=t.max_sal and emp.deptno=t.deptno)
--求部门平均薪水等级
select deptno,avg_sal,grade from
(select deptno,avg(sal) avg_sal from emp group by deptno)t
join salgrade s on (t.avg_sal between s.losal and s.hisal)
--求部门平均的薪水等级
select avg(grade) from
(select deptno,ename,grade from emp join salgrade s on (emp.sal between s.losal and s.hisal))t
group by deptno
--雇员中哪些人是经理人
select ename from emp where empno in(select distinct mgr from emp)
--不使用组函数求出最高薪水
select distinct sal from emp where sal not in
(select distinct e1.sal from emp e1 join emp e2 on(e1.sal<e2.sal))
--平均薪水最高的部门的部门编号
select deptno,avg_sal from
(select avg(sal) avg_sal,deptno from emp group by deptno)
where avg_sal=
(select max(avg_sal) from (select avg(sal) avg_sal ,deptno from emp group by deptno))
--平均薪水最高的部门的部门名称
select dname from dept where deptno=
(select deptno from
(select avg(sal) avg_sal,deptno from emp group by deptno)
where avg_sal=name
(select max(avg_sal) from (select avg(sal) avg_sal ,deptno from emp group by deptno)))
--求薪水最高的前5个人
select ename,sal from (select ename,sal from emp order by sal desc)where rownum<=5;
--求薪水最高的第6个人到第10个人(分页)
select ename,sal from
(select ename,sal, rownum r from (select ename,sal from emp order by sal desc))
where r>=6 and r<=10
***************************************************************

--constraint(约束)
1.not null 非空
2.unique 唯一
3.primary key 主键约束
4.foreign key 外键约束
5.check check约束

constraint 约束名 unique(ename,email);--表级约束
constraint 约束名 foreign key(外键) references 表名(主键);

--alter(修改表结构)
alert table 表名 add(aaaa varchar2(100));--添加表结构
alert table 表名 drop(aaaa);--删除表结构
alert table 表名 modify(aaaa varchar(1111));--修改表结构
alert table 表名 drop constraint 约束名;--删除约束
alert table 表名 add constraint 约束名 foreign key(字段)references class(参考字段)


--dictionary(数据库字典表,查询当前用户下面的所有表信息)
select table_name from dictionary;

--index(索引)
create index 索引名 on 表名(字段名);
drop index 索引名;

--view(视图)一张虚拟表
create view v$_xxx;

--sequence(序列)
create sequence seq;
select seq.nextval from dual;

*******************************************************************************
PL/SQL
--变量声明的规则
1.变量名不能使用保留子,如from、select等
2.第一个字符必须是字母
3.变量名最多包含30个字符
4.不要与数据库的表或者列同名
5.每一行只能声明一个变量
--常用变量类型
1.binary_integer:整数,主要用来计数而不是用来表示字段类型
2.number:数字类型
3.char:定长字符串
4.varchar2:变长字符串
5.date:日期
6.long:长字符串,组长2GB
7.boolean:布尔类型,可以取值为true、false和null值

--简单变量赋值
declare
v_temp number(1);
v_count binary_integer :=0;
v_sal number(7,2) :=4000.00;
v_date date :=sysdate;
v_pi constant number(3,2) := 3.14;
v_valid boolean :=false;
v_name varchar2(20) not null := 'MyName';
begin
dbms_output.put_line('v_temp value:'|| v_sal );
end;

--存储过程

--输入参数
Create Or Replace Procedure Display(eno Int)
As
empname Varchar2(20);
Begin
   Select ename Into empname From emp Where empno=eno;
   Dbms_Output.put_line('姓名:'||empname);
End;
--执行
Execute display(7839)

--输出参数
Create Or Replace Procedure Display(eno Int,salary Out Number)
As
empname Varchar2(20);
Begin
   Select ename Into empname From emp Where empno=eno;
   Select sal Into salary From emp Where empno=eno;
   Dbms_Output.put_line('姓名:'||empname);
End;
--执行
Declare
    s Number;
Begin
    display(7839,s);
    Dbms_Output.put_line('薪水是'||s);
End;

*******************************************************

//创建表空间
create tablespace tx_db
logging
datafile 'F:\oracle\product\10.2.0\oradata\txdb\tx_db.dbf' size 1024M
autoextend on
next 32m maxsize 2048m
extent management local;

//创建临时表空间
create temporary tablespace tx_dbtemp
tempfile 'F:\oracle\product\10.2.0\oradata\txdb\tx_dbtemp.dbf' size 1024M
autoextend on
next 32m maxsize 2048m
extent management local;

//创建用户并赋予相关权限(有dba权限),并默认相关表空间
create user txdb identified by txdb;
grant create session to tx_db;
grant connect,resource,dba to txdb;

default tablespace tx_db
temporary tablespace tx_dbtemp;


//创建用户并赋予相关权限(有sysdba权限)
create user njtxdb identified by njtxdb;
grant connect,resource,dba,sysdba to njtxdb;

//导出数据
exp txdb/txdb@orcl full=y file=d:\txdb.dmp ignore=y
//导入相关数据库
imp txdb/txdb@orcl full=y file=d:\txdb.dmp ignore=y

// 提交已有操作
commit;

//删用户
DROP USER txdb CASCADE
//删除表空间
drop tablespace txdb_db

//赋予用户相关权限
grant create session to 用户名;
grant create table to  用户名;
grant create view to  用户名;

//查询当前默认表空间中的用户
select username,default_tablespace from dba_users;

//默认用户使用的表空间
alter user txdb default tablespace zcb_db;

// 忘记sys、system密码,重新设置
su - oracle
sqlplus /nolog
conn / as sysdba
startup (如果数据库不是处于启动状态则启动)
alter user sys identified by 123456
然后就可以使用sys用户密码登陆了

// 用户解锁
su - oracle
sqlplus /nolog
conn / as sysdba
alter user system account unlock;

你可能感兴趣的:(数据结构,oracle,sql,F#)