答案
三:select 用户ID from user_info where 发帖数>=100000;
四:select 用户ID from user_info where 发帖数>=10000 and 注册日期>=to_date(‘2007-09-08’,’yyyy-mm-dd’);
五:select 用户ID,妮称 from user_info order by 用户分数,发帖数量;
六:update user_info set 用户分数=用户分数+50 where 发帖数>=10000;
七:alter user_info add 等级 varchar2(14);
update user_info set 等级=’初级会员’ where 注册日期>=to_date(‘2008-6-7’) and 发帖数<=100;
update user_info set 等级=’中级会员’ where 注册日期>=to_date(‘2007-9-7’) and 发帖数<=300;
update user_info set 等级=’高级会员’ where 注册日期>=to_date(‘2006-9-7’) and 发帖数<=1000;
update user_info set 等级=’老会员’ where 注册日期>=to_date(‘2004-6-7’) and 发帖数<=3000;
update user_info set 等级=’骨灰会员’ where 发帖数<=8000;
update user_info set 等级=’管理员’ where 发帖数<=10000;
update user_info set 等级=’超级管理员’ where 发帖数<=50000;
八:delete user_info where 用户ID=’AAA’;
九:select 用户ID,妮称 from user_info where 妮称 like ‘%奥运%’;
十:select count(distinct 所在地区) from user_info where发帖数>=10000;
答案:
一:select count(*) from user_info;
二:select count(*) from user_info where 所在地区=’上海’;
三:select count(*) from user_info where 所在地区=’北京’ and 注册日期>=’2008-3-7’;
四:select 所在地区, sum(发帖数), avg(发帖数) from user_info where 注册日期>=’2007-9-7’ group by 所在地区 having sum(发帖数)>100000;
五:select 所在地区, count(*) from user_info where 注册日期>=’2008-3-7’ and 发帖数量>=1000 group by 所在地区;
答案:
一:select 所在地区 from user_info group by 所在地区 having sum(发帖数)=(select max(sum(发帖数)) from user_info group by 所在地区);
二:select 所在地区,sum(发帖数量), sum(发帖数量)/(select sum(发帖数量) from use_info) from user_info where 发帖数>=10000 group by 所在地区;
答案:
一:可以
二:不可以,因为语句的第一个单词不能是替换变量
三:方法1:select name 姓名 from 某表;
方法2:col name heading 姓名
select * from 某表;
四:col address for a20
如果长度超出,将会拐行显示
五:break on dept
二、我按照“发帖数”列排序创建了一个视图VW1,创建语句如下:
create or replace view vw1 as select * from User_info order by 发帖数列;
我是否可以向VW1视图中插入行?是否可以进行其他的DML操作
三、由于经常需要查询不同的所在地区,我创建了如下视图:
create or replace view vw2 as select distinct 所在地区列 from User_info;
我可以在此视图中删除地区为某地的行吗?
四、我创建了一个视图VM3,创建语句如下:
create or replace view vw3 as select 妮称,所在地区,注册日期,发帖数,用户分数 from User_info;
我可以向此视图插入行吗?为什么?
五、为了使注册日期列的输出结果固定为年-月-日格式,我创建了如下视图:
create or replace view vm4 as select 用户ID,to_char(注册日期,'yyyy-mm-dd hh24:mi:ss') rq from User_info;
我们可以对此视图做什么样的DML操作?为什么?
六、如果基本表被删除了,视图会随之被删除吗?
七、如果有表TAB1,它有如下的行:
SQL> select * from tab1;
ID NAME
---------- ----------
1 ICOL$
2 I_USER1
3 CON$
4 UNDO$
5 C_COBJ#
6 I_OBJ#
7 PROXY_ROLE
8 I_IND1
9 I_CDEF2
10 I_PROXY_RO
已选择10行。
我发出如下语句:select rownum, id , name from tab1 where id>=5; 显示结果如下:
ROWNUM ID NAME
-------------------- -------- -----------------
(_______) 5 C_COBJ#
(_______) 6 I_OBJ#
(_______) 7 PROXY_ROLE
(_______) 8 I_IND1
(_______) 9 I_CDEF2
(_______) 10 I_PROXY_RO
已选择6行。
请在括号中的横线上填上ROWNUM列的显示值。
答案:
一:创建一个视图,视图选择语句的条件是where 用户类型 <> ‘内部管理员’,另外,视图中不包括“密码”列。用户搜索信息时,只让他们针对此视图进行搜索,这样他们就查不出来“内部管理员”和密码列了。
二:不可以。可以更新所有行的所有列(包括排序列),也可以删除。
三:不可以。创建视图时回有Dintisct,将不能对视图进行任何DML操作
四:不可以。因为用户ID列有非空约束,而视图中不包括此列。对视图插入,将为此列添加NULL值。这将违反用户ID列的非空约束。
五:视图包含虚拟列,对视图不可以进行任何DML操作
六:不会
七:结果依次为1、2、3、4、5、6
八:select * from (select * from user_info order by 发帖数 desc) where rownum<=10;
思考题一:
col col1 noprint
select * from (select rownum col1,user_info.* from (select * from user_info order by 发帖数量 desc) where rownum<=20) where col1>=10;
还有一种方法,就是先从大到小排序取前20名,再对排序结果从小到大排序取前10名。这种方法的缺点是需要两次排序。
思考题二:
alter table user_info add find_email varchar2(2);
create or replace view vw4 as select 用户ID,妮称,所在地区,注册日期,发帖数,用户分数,case find_email when ‘是’ then email列 when ‘否’ then ‘该用户没有公布Email’ end case 用户Email from User_info;
或是用Decode实现:
create or replace view vw4 as select 用户ID,妮称,所在地区,注册日期,发帖数,用户分数,decode(find_email,‘是’,email列, ‘否’, ‘该用户没有公布Email’) 用户Email from User_info;
七、有一公有同义词TAB2,它代表UPLOOKING下的TAB2表,在USER1用户下也有一TAB2表,在USER1下使用如下的语句:select * from tab2,它将访问哪个用户下的TAB2表。
答案:
一:create sequence seq1 increment by 2 maxvalue 100 cycle;
altet table user_info add num number(4);
update user_info set num=seq1;
二:create index user_info_id on user_info(用户ID);
三:索引中除了列值外,必须还有索引条目对应行的地址。
四:create index user_info_nc on user_info(upper(妮称)); 或:
create index user_info_nc on user_info(lower(妮称));
五:会
六:create public synonym tab2 for uplooking.tab2;
七:访问的是USER1下的TAB2表。当使用某一串字符访问表时,Oracle将先在当前用户的表中查找是否存在。如果当前用户中不存在,再到公有同义词中查找是否存在,如果也不存在,就会报出“对象不存在”错误。
答案:
一:create user user2 identied by “12345”; --注意,密码外的双引号不可省略。如果密码是字符,才可以省略双引号
二:alter user user2 identied by ABCDE
三:为USER2授予Create session权限:grant create session to user2;
四:授予它使用表空间中空间的权限: grant unlimited tablespace to user2;
五:create role role1;
grant create session, unlimited tablespace to role1;
六:
七:grant insert on tab2 to user2;
八:会
(对象权限会级联撤消,系统权限不会级联撤消)