oracle复习

1.
首先创建表空间:指定表空间名为test_lob 并分配50MB空间;

create tablespace test_lob
datafile 'E:\app\test.dbf'
size 50M;


2.
创建用户并指定所在表空间为test_lob,并指定该用户在该表空间可使用10M大小的空间

create user mr identified by px980305
default tablespace test_lob
quota 10M on test_lob;


3.修改:
修改用户在表空间中所在份额:

alter user mr quota 20M on test_lob;


改为份额为不受限制:

alter user mr quota unlimited on test_lob;


修改密码:

alter user mr identified by 123456;


在创建了用户后要进行解锁:

alter user mr account unlock;
conn mr/123456;


4.
授权:
授予连接数据库权限:

grant connect to mr;


授予创建表的权限: 

grant create table to mr;


授予mr用户查询scott用户下dept表的权限:

grant select on scott.dept to mr;


5.
创建角色并授予创建视图的权限

create role peng identified by 123456;
alter role peng not identified;出现:角色已丢弃
set role peng;
grant create view to peng;


将角色授予mr;

grant peng to mr;
drop role peng;
revoke resource from mr;
此处要注意system若无法删除用户时可连接到sys用户
drop user mr cascade;
1.创建用户
create user pengxiang identified by px980305
2.创建表空间
create tablespace text_space datafile 'E:\pengxiang\test_space';
2.为用户指定表空间
alter user pengxiang defalut tablespace test_space;
3.解锁新用户
alter user pengxiang account unlock;
4.授予dba权限,即管理员权限
grant dba to pengxiang;
创建会话权限
grant create session to pengxiang;
创建视图权限
grant create any view to pengxiang;

1.建表 :主键约束,外键约束,检查约束

1)创建数据表宿舍表:(10分)
宿舍表(宿舍号 char(6),宿舍电话) ;要求使用:主键(宿舍号)、宿舍电话:以633开头的7位电话号码;
【提示:查阅regexp_like()函数的功能及字符模糊匹配、常用通配符的使用。】
法一:
create table sushe(
snumber char(6) primary key,
stelphone char(7) check(stelphone like'633[0-9][0-9[0-9][0-9]')
);

该方法在进行插入时会提示检查性约束错误故应采用法二:
create table sushe(
snumber char(6) primary key,
stelphone char(7) check(regexp_like(stelphone,'633[0-9][0-9][0-9][0-9]');
);

create table emp
 (id number ,
name1 varchar(8) ,
constraint aba_pr primary key(id,name1));该表中的主键有两个





 

(2)创建学生表:(10分)
学生表(学号 char(6),姓名,性别,年龄,民族,身份证号,宿舍号),要求使用:主键(学号)、默认(民族,汉族)、
非空(民族,姓名,年龄)、唯一(身份证号)、检查约束(性别)。


create table student(
sno char(6)primary key,  主键
sname varchar(8) not null,  //非空约束
sex char(2) check(sex='男' or sex='女'), 检查约束
age number(4) not null,
mincu varchar(10)default '汉族'not null,   //默认default
id char(18) unique,      唯一
constraint name unique(id), //约束名为name
snumber char(6)
);



在建表时添加主键可以不起约束名

create table  (
id number(6) primary key,--主键
name varchar2(20) not null,--非空
sex number(1),
age number(3) default 18,
birthday date,
address varchar2(50),
email varchar2(25) unique,--唯一
tel number(11),
deptno number(2) references dept(deptno)—外键
);


带约束名称:

create table user (
id number(6) constraint id_pk primary key,
name varchar2(20) constraint name_nn not null,
sex number(1),
age number(3) default 18,
birthday date,
address varchar2(50),
email varchar2(25) constraint email_uqe unique,
tel number(11),
deptno number(2) constraint dept_deptno_ref references dept(deptno)
);






2.修改表属性(注意:在已有数据的表中修改属性会报错)
在建表时若忘记了某些属性可通过alter table tablename add();来添加

alter table student add(snumber char(6)not null);添加属性列


添加外键约束

alter table student add constraint stu foreign key (snumber) references sushe(snumber);


由于主表为student表,参照的是sushe表中的数据,故应先在宿舍表中插入相应数据后才能在student表中插入,
否则会提示未找到父项关键字错误

insert into sushe values ('101','6331157');
insert into sushe values ('102','6331777');
insert into student(sno,sname,sex,age,mincu,id,snumber) values ('201601','李强','男',20,'汉族','371321199602046419','101');


添加属性列并设置默认值

alter table sushe add(snumber varchar(7) default '001');


删除表属性

alter table sushe drop column stelphone  要加column否则会认为删除该属性约束


修改字段属性

alter table sushe modify(sushe varchar(7));

修改字段名
alter table sushe rename column   原字段名 to 新字段名


更新数据
update table sushe set stelphone='6331158' where snumber='101';






3.查询表命令
 查询基本命令格式:

SELECT …
FROM…
WHERE….
GROUP BY…HAVING
ORDER BY…



 

多表连接查询
1.查询雇员的姓名、编号及所在部门名称;
代码: select emp.ename,dept.deptno,dept.dname 
from emp,dept
where emp.deptno=dept.deptno;外连接
内连接
select ename,emp.deptno,dname from emp inner join dept on emp.deptno=dept.deptno;



 

2.查询每个员工的姓名、所在部门名及对应领导的姓名。
代码: select emp1.ename as 员工姓名,dept.dname,emp2.ename as 领导姓名
from emp emp1 inner join emp emp2  起表别名
on emp1.empno=emp2.mgr
inner join dept
on emp1.deptno=dept.deptno;
在该题中,将emp表看作两个表,并且使用了三表联合查询的方法


查询每位员工的姓名、编号及工资等级。
代码: select ename,empno,grade as 工资等级
from emp inner join salgrade
on sal between losal and hisal;



 

左外连接
select emp.deptno,emp.ename,dept.dname
from emp left outer join dept
on emp.deptno=dept.deptno;
全外连接
select emp.ename,emp.empno,dept.dname
from emp full join dept
on emp.deptno=dept.deptno;
列出在每个(每个是关键字,对此group by)部门工作的员工数量、平均工资和平均服务期限。
代码: 
select count(empno) as num,round(avg(sal)) as 平均工资,round(avg(to_char(sysdate,'yyyy')-to_char(hiredate,'yyyy'))) as 平均服务年限
from emp
group by deptno;
列出各个部门的MANAGER的最低薪金。
代码: select dname,min(sal)
from emp inner join dept
on emp.deptno=dept.deptno
where job='MANAGER'
group by dname;
列出所有员工的年工资,按年薪从低到高排序。(年薪=月薪*12+佣金。提示:无需修改数据,使用nvl() :空值转化函数) 
代码: select ename,(sal*12+nvl(comm,0))as 年薪  //nvl的使用方法,两个参数,若第一个参数为空则设值为0
from emp;



 

查询10号和30号部门的最高工资,结果按照部门号升序序排序。
代码:

select deptno,max(sal)
from emp
where deptno=10 or deptno=30
group by deptno
order by deptno;


法二

select deptno,max(sal)
from emp
where deptno in (10,30)
group by deptno
order by deptno;



查询部门的名称、所在地及每个部门的人数。
代码:

select dname,loc,count(empno)
from emp inner join dept
on emp.deptno=dept.deptno
group by dname,loc;     group  by 的筛选条件不唯一






查询每个部门的部门名称及雇佣时间最长的员工姓名及其雇佣时间。(嵌套查询)
代码:

select ename,dname,hiredate 
from emp,dept 
where emp.deptno=dept.deptno and
hiredate=(select min(hiredate) from emp where emp.deptno=dept.deptno )
























 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭祥.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值