sql习题四--建表,试图,序列

1.确认当前用户是否有建表权限
SQL> select * from user_sys_privs where privilege='CREATE TABLE';
 
 
 
 
 
2.确认当前用户有哪些表
 
SQL> select table_name from user_tables;
 
3.建立一个emp1表结构与emp表结构一样--不使用子查询
SQL> create table emp1(EMPNO  NUMBER(4) NOT NULL,ENAME VARCHAR2(10),JOB
VARCHAR2(9),MGR NUMBER(4),HIREDATE DATE,SAL NUMBER(7,2),COMM
NUMBER(7,2),DEPTNO NUMBER(2));
 
4.建立一个emp2表结构与emp表结构一样--使用子查询
SQL> create table emp2 as select * from emp where 0=1;
 
5.给emp1表增加列dname和loc(结构与dept表的dname,loc一致),然后更新emp1表的dname,loc数据
SQL> alter table emp1 add(dename VARCHAR2(14),LOC VARCHAR2(13));
SQL> insert into emp1 select a.* ,b.dname,b.loc from emp a,dept b where
a.deptno=b.deptno;
 
6.将dept,emp,salgrade表的结构合并为一个新表empnew  
SQL> create table empnew as select a.* ,b.loc,b.dname,c.* from emp a,dept
b,salgrade c where 1=0;
 
 
create table empnew as select * from emp natural join dept join salgrade
on(sal between losal and hisal);
7.修改empnew的loc列的默认值为成都
SQL> alter table empnew modify (loc VARCHAR2(13) default 'CD');
 
8.将empnew表的loc列名更改为addr
SQL> alter table empnew rename column loc to addr ;
 
9.将empnew表的addr列删除
SQL> alter table empnew drop column addr ;
 
10.将empnew表的dname列标记删除,然后在删除标记的列
SQL> alter table empnew drop  (dname) ;
 
alter table empnew set unused column dname ;
alter tabel empnew drop unused column dname;
 
11.建立一个dept1表结构与dept表结构和内容一样--使用子查询
SQL> create table dept1 as select * from dept;
 
12.给emp1表的empno增加主键约束
SQL> alter table emp1 add constraint pk_emp1_no primary key(empno);
 
alter table emp1 modify(empno primary key);
alter table empa modify(empno number(20),primary key(empno));
 
13.给emp1表的deptno增加外键约束关联到dept1表的deptno列
SQL> alter table dept1 modify(DEPTNO NUMBER(2) primary key);
SQL> alter table emp1 modify(deptno NUMBER(2) references dept1(deptno));
 
alter table emp1 modify (deptno number(10),foreign key(deptno) references
dept1(deptno));
 
14.确保emp1表的sal列值大于0
SQL> alter table emp1 modify(sal NUMBER(7,2) check(sal>0));  
 
15.确保emp1表的mgr值是empno中有的值
???SQL> alter table emp1 modify(mgr  NUMBER(4) check(mgr= select empno from
emp1));
SQL> alter table emp1 modify(mgr NUMBER(4) references emp1(empno));
 
alter table emp1 modify(mgr references emp1(empno));
 
16.删除emp1表所有约束
alter table emp1 drop constraints ;
 
17.建立一个视图empv1显示emp表员工名字,职位,月薪,奖金。
SQL> create or replace view  empv1 as select ename,job,sal,comm from emp;
 
18.建立一个视图empv2显示emp表员工名字,职位,总月薪。
SQL> create or replace view  empv2 as select ename,job,sal+comm tsal  from
emp;
 
19.建立一个只读视图empv3显示emp表所有内容
SQL> create or replace view empv3 as select * from emp with read only;
 
20.建立一个视图empv4显示sarah表所有内容,其中sarah表并不存在
SQL> create or replace force view empv4 as select * from sarah;
 
21.建立一个视图empv5显示只满足部位编号为10的emp表员工名字,职位,月薪
SQL> create or replace view empv5 as select ename,job,sal from emp where
deptno=10;
 
22.修改视图empv5显示内容为emp表员工名字,领导名字,职位,月薪
SQL> create  or replace view empv5 as select ename,sal,job,(select ename from
emp e where e1.mgr=e.empno) as leader from emp e1;
 
23.修图视图empv4显示员工名字,领导名字,部门名字,薪水,薪水等级
SQL> create  or replace view empv4 as select ename,sal,dname,(select ename
from emp e where e1.mgr=e.empno) as leader, grade from emp e1 natural join
dept join salgrade on (sal between losal and hisal);
 
 
24.分别对empv1,empv2的每个列进行DML操作,是否能成功,不能成功说明原因
SQL> update empv1 set sal=sal+1;
SQL> update empv2 set job='dancer';
SQL> alter empv1 add select deptno from emp ;
update 操作能够执行成功,但是alter操作执行不成功
 
25.查询自己建立哪些视图及视图内容
SQL> select view_name from user_views;
SQL> select view_name, text from user_views;
 
26.删除自己建立的视图
SQL> drop view empv1;
 
27.检查自己用户有哪些序列,序列下一个值是多少。
SQL> select * from  user_sequences;
SQL> select s1.nextval from dual;
 
28.删除自己建立的所有序列
SQL> drop sequence s1;
 
29.建立一个表empi1来自emp表结构和数据
SQL> select * from empi1;
create tabel empi1 as select * from emp;
 
a.给empno列建立唯一索引 索引名字与主键名字相同
SQL> create unique index empno on empi1(empno);  
 
user_constraints //查找主键
b.给sal列建立一个索引 索引名字empi1_sal_i  
SQL> create index empil_sal_i on empi1(sal);
 
c.给deptno和sal列建立一个索引,索引名字empi1_ds_i
SQL> create index empil_ds_i on empi1(deptno,sal);
//重复值少的放前面,重复值多的放后面。因为会影响性能
 
d.检查自己建立多少索引,索引类型,索引在哪个列上
SQL> select a.index_name,index_type ,column_name from user_indexes a ,
user_ind_columns b where a.index_name=b.index_name and a.table_owner='SCOTT';
 
e.删除所建立的索引
SQL> drop index EMPIL_DS_I;
SQL> drop index  EMPIL_SAL_I;
SQL> drop index  empno;
 
30.程序调用的表名字为sal 表,但数据库里面表名字为salgrade表。在不修改程序与修改表名情况下,请提供解决方法。  
SQL> create  public synonym sal for SCOTT.salgrade;
 
31.查看自己建立的同义词有哪些,对哪个对象取别名
SQL> select * from user_synonyms;
 
32.删除自己建立的同义词
SQL> drop public synonym sal;  //只有在sysdba 用户下才能删除
 

 

转载于:https://my.oschina.net/liubaizi/blog/796110

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值