oracle 基本命令
1.打开计算机中的管理启动OracleServiceXE和OracleXETNSListener服务,或者打开运行输入service.msc
2.打开服务后点击开始--->运行--->cmd,进入dos,
a. 输入sqlpuls /nolog (不用登录进入sqlplus)
b. 用超级用户登录数据库,可以修改其他用户的相关信息 : conn sys as sysdba ;
c. 修改用户的密码    alter user 用户名 identified by 新密码;
d. 查看用户下的所有表 
select table_name from user_tables;或select * from tab;
e. 查看用户的视图  ----select * from user_views;   
f. 解锁  -----  alter user 用户名 account unlock;
3.登录指定用户  注意:要保证对象解锁
conn 用户名/密码;      例:conn hr/hr;
4.查看数据库下的所有用户的所有数据对象(试图,序列等)
select user_object from user_objects;
6.安装好Oracle后默认的用户及其密码
a. sys用户:超级管理员可以不输入密码(如果在安装是指定了密码,那么要输入那个密码)
b. system 用户:系统管理员 密码同上  ,
(它和sys的不同:它不能用create database创建数据库  但是sys可以创建数据库)
c. scott 密码 tiger
d. 建立自己的用户,先要登录sys用户才可以创建的自己的用户
7.显示用户的所有的表
select * from tab;
8.设置一行最多有多少个字符(在sys/或system用户下设置)
set linesize 120;
9.设置显示的页数(在sys/或system用户下设置)
set pagesize 30;
10.显示当前用户
show user;
11.与数据库断开连接并退出sqlplus
exit 回车键
12.查看表结构
desc 表名;
13.命名规则(表名,列名)
以字母开头,长度不超过30字符,不能用保留字只能使用(A-Z,a-z,0-9,$,#等)
14.数据类型
a.字符型
char :定长 最大字符2000
varchar2(20):可变长度,最大4000字符
blob :字符型,大对象,最大4g用来以二进制存放图片,声音等
b.number型
number(5,2)共5为小数点后保留两位 例 333.33
number(2)整数
c.日期型
date 默认的格式 日月年 hiredate雇佣日期
文件操作命令
1.执行制定的sql脚本
start和@
例: @ c:\1.sql 或 start d:\1.sql
2.当sql有错误时,可以编辑指定的sql脚本,编辑后保存,再次执行 用 /回车键
edit;
3.将sqlplus屏幕上的内容输出(记录)到指定文件中
spool 盘符:\文件名.sql;
如果停止记录用
spool off;
有关用户的命令
1.创建用户(在sys/system用户下)
create user 用户名 identified by 密码;
注意:在创建好用户后还要给它赋权限否则它没有
建表权利
权限:a.系统权限:用户可以直接操作数据库,描述用户对访问数据库的相应权限
b.对象权限 :可以操作其他用户,对其他用户的数据对象的访问操作权限
2.角:一系列权限的集合
connect :登录权限
resource :建表权限
dba :最高权限(一般不会分配该权限)
3.给用户赋权限(sys/system用户下)
grant connect,resource to 新用户名;
4.对象权限访问其他用户下(先登录这个其他用户)的表
grant select on 表名 to 某个用户名;
grant all on emp to 某个用户名;    all代表所有的操作
5.在其他用户下访问某个用户下的表
例:select * p;
6.撤销权限在授权的用户下
revoke all p from 某个用户名;
7.删除用户(在sys/system下)
drop user 用户名 cascade;  (cascade级联删除该用户下的表)
8.新用户赋予他人权限
例:现有两个数据库 aa bb  aa要授权给bb用户
授权方案:sys登录
grant all p to aa with grant option;
grant all p to bb;
with grant option:(对象权限)
with admin option:(系统权限)
登录bb即可访问p表
9.撤消新用户赋予他人权限时(sys/system)
revoke all p from aa; (只撤消父即可)
使用profile管理用户口令
1.限制登录,当用户的密码输入次数超过几次时就被锁(sys/system)
create profile 文件名 limit FAILED_LOGIN_ATTEMPTS 密码输入次数 PASSWORD_LOCK_TIME
被锁的时间(以天为单位);
例: create profile aa limit FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;
创建一个文件管理口令,限制为只能登录3次,3次后还不正确就会被锁2天
2.将某一限制加入给某一用户(sys/system)
alter user 用户名 profile 文件名;
例:alter user gu profile aa;
给gu用户加入aa文件管理口令
3.查看超级用户的profile(sys/system)
select * from dba_profiles
4.终止口令(sys/system)
create profile 文件名 limit password_life_time 10 password_grace_time 2;
每隔10天修改密码,宽限为2天
5.alter指定限制登录的另一种形式(sys/system)
alter profile default limit FAILED_LOGIN_ATTEMPTS 2;
解释:密码输入2次后被锁
alter user 用户名 profile default;
解释:将文件管理口令加到指定用户
6.在建profile文件时不能使用以前的密码但还是想使用
create profile password_history limit password_file_time 10 password_grance_time  2 password_reuse_time 10;
password_reuse_time 10 指定口令可以重用10天
有关表的操作
第一.表结构的操作
1.给表里添加字段
alter table 表名 add(新字段 数
据类型) ;
2.修改表的字段
alter table 表名 modify(字段名 数据类型);
3.删除字段
alter table 表名 drop column 字段名;
4.修改表名
rename 旧表名 to 新表名;
5.删除表
drop table 表名;
第二.表内容的操作
1.添加一条数据
insert into 表名 values (值。。);
2.让日期显示为年、月,日
select to_char(birthday,'yyyy-mm-dd') from 表名
3.更改日期的默认格式
alter session set nls_date_format='yyyy-mm-dd';
注意:修改后在插入数据时要按照格式插入,并且所有有关日期的都会以这种形式显示
4.查字段为空的记录
select 字段名1,字段名2 from 表名 where 字段名 is null;
5.插入空值
insert into 表名(字段名1,字段名2) values(值1,null);
6.计算工资
select empno,ename,sal,sal*12 "年薪" p;
注意:在oracle中如果有一个字段的值为null则整个结果为null
7.如何解决有一个字段值为null整个结果为null
select empno,ename,sal,comm,sal*12+nvl(comm,0) "年薪" p;
comm为奖金,nvl如果comm的值为null给它赋值为0,则结果为没有奖金的结果为(
月工资*12),有奖金的(月工资*12+奖金)
8.让字段名显示为自己想要显示的形式
select name "姓名",sex "SEX" from 表名;
排序
1.升序
默认为升序
2.降序
select empno,ename from emp order by sal desc;
如果有多个字段
select empno,ename from emp order by sal,empno desc;
3.distinct踢重
select distinct depno p;
4.获取本机当前系统时间
select sysdate from dual;
5.在什么范围
between .... and
例:select * p where sal between 100 and 300;
6.查内容是否在指定的范围内
select * p where ename in('ALLEN','TOM');
不再范围 not in 后加集合;
7.模糊查询
select * p where ename like '_A%';
查第二个字母为a的
%代表0个或多个,_代表多个
oracle的查询
1.删除数据
delete from 表名;(数据可以恢复,表结构还在)
delete中的恢复数据
a.先建立一个保存点
savepoint 保存点名;
b.删除的语句
delete from 表名;
C.恢复数据
rollback to 保存点名;
2.删除表结构和数据(表结构也不见)
drop table 表名;
3.通过select语句创建新表
create table 新表(id,birthday,name) as select id,birthday,name from 旧表;
4.截断表(即:删除表,表结构存在,但数据不可恢复,速度快)
trunca
te table 表名;
5.查看执行效率
set timing on;
6.执行结果不包括2000和3000
select * p where sal>2000 and sal<3000;
7.执行结果包含2000和3000
select * p where sal between 2000 and 3000;
8.部门降序当部门相同时工资升序
select distinct deptno p order by deptno desc, sal asc;
9.给个,别名进行降序排列
select ename,sal*12 "年薪" p order by "年薪" desc;
10.显示最高工资和最低工资
select max(sal),min(sal) p;
11.显示平均工资和工资总和
select avg(sal) "平均工资",sum(sal) "工资总和" p;
12.计算员工总数
select count(*) "员工总数" p;
13.寻工资最高的员工
select ename,sal p where sal=(select max(sal) p);
14.分组显示部门的最高工资和平均工资
select ename,max(sal) "最高工资",avg(sal) "平均工资" p group by deptno;
15.限制分组,显示平均工资高于2000
select sal,ename,avg(sal) "平均工资",max(sal) "最高工资" p group by deptno having avg(sal)>2000;
16.如果在select语句中同时包含group by,having,order by 则他们的顺序:group by,having,order by;
17.查询关联表里的内容
ame,d.dname from emp e,dept d where e.deptno=d.deptno;
18.查询部门为10 的信息
ame,d.dname from emp e,dept d where e.deptno=d.deptno and e.deptno=10;
注意:当两个表中没有重复的字段时可以不用别名,但一般要写别名,效率高
自连接
1.特殊的多表查询
ame from emp worker,emp boss =pno ame='SCOTT';
查询员工所对应的老板,
2.什么是子查询
嵌入在其他sql语句中的select,叫子查询
select sal,ename from emp where sal>any(select sal from emp where deptno=30);
any:所有的,all最大,in返回多行
3.多列查询
select ename,job,deptno from emp where(job,deptno)=(select job,deptno from emp where ename='SCOTT');
查询和scott工作,部门相同的员工
4.查询各部门平均工资
select avg(sal),deptno from emp group by deptno;
5.内嵌视图oracle登录命令
ame,a1.sal from emp a1,(select avg(sal) pj from emp group by deptno) a2 where a1.deptno=a2.deptno and
a1.sal>a2.pj;
查询各部门员工工资高于部门平均工资的
将子查询作为一个视图,虚拟表,给表命名时一般不加as
select * from(select a1.*,rownum rn from(select * from emp) a1 where rownum<=10) where rn>=6;
查询第6-10条的记录
一些基本操作
1.去除重复的,只取一次
select ename from emp where sal>2500 union select ename from
emp where job='MANAGER';
union all 合并查询比and or快(不会取消重复行)
intersect 可取重复的东西,交集
minus 取的是差集,大的减去他们的交集
2.当在insert语句中插入子查询(select语句)时一条sql语句可以插入大量的数据
例:insert into stu(id,name) values select empno,ename from emp where deptno='20';
会把部门编号为20的所有员工插入到stu表中
3.将现在的表中的数据修改为某一个表的数据
update stu set (name,id)=(select ename,empno from emp where deptno='20') where id=2;
连接oracle的步骤
1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
2.建立连接
Connection Connection("jdbc:oracle:thin:@localhost:1521:数据库名","username","password");
事务
1.事务用于保持数据的一致性
insert,delete,update;commit用来提交事务,该事务结束,保存点就会被删掉,回退事务必须在提交事务之前
设置保存点
savepoint a;
回滚
rollback to a;
取消全部事务
rollback;
每update一次事务就被自动提交一次,设置事务提交方式为手动
在得到连接之后
con.setAutoCommit(false);(设置事务提交方式为手动)
2.如果有异常出项则跳到catch块,在catch中让事务回滚
3.设置事务只读(在sys下)
set transaction read only;
4.函数
to_date:日期函数
字符函数:
lower(char):将大写转化为小写
upper(char):将小写转化为大写
length(char):字符串长度
substr(char,m,n):截取子字符串
5.长度为5的人的姓名
select ename from emp where length(ename)=5;
6.截取姓名的前三位,第一个大写,后面的小写
select upper(substr(ename,1,1)) || lower(substr(ename,2,length(ename)-1)) from emp;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。