⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 谢妮娜.txt

📁 关于oracle和sql的书籍和ppt教程,非常好,本人珍藏品
💻 TXT
字号:
1,给一个表创建视图,该试图不包含约束为not null的列,怎么给该视图插入数据?对于not null约束的列,可以给个常量作为该列的默认值。

create or replace trigger shooping_tri
instead of insert
on shooping_view for each row

declare
  shu int;
  begin
  select count(*) into shu from shooping where id =:new.id;
  if shu=0 then
  insert into shooping values(:new.id,:new.gid,:new.count,100);
  end if;
  end;

========================================================================================

2,创建一个序列
create sequence seq_x
increment by 1
start with 1
order;

========================================================================================

3,用scott用户登陆,建一张表,至少包含id,name,sex,date列,插入1000000条数据,为了防止表名重复,建议大家用自己的名字做表名。用练习2创建的序列给该表的id加值,列id为该表的主键
   给name列创建B树索引,按该列查询
   给sex列创建位图索引,按该列查询
   给date列创建函数索引,按该列查询
   把查询的结果也写到你的答案里

***************************************************************表结构

SQL> desc xnn_tab;

Name     Type         Nullable Default Comments 
-------- ------------ -------- ------- -------- 
ID       INTEGER                                
NAME     VARCHAR2(20) Y                         
SEX      CHAR(6)      Y                         
BRITHDAY DATE         Y         

***************************************************************数据行总数

SQL> select count(*) from xnn_tab;

  COUNT(*)
----------
   1000000

****************************************************************建立索引

------  给name列创建B树索引

SQL> create index idx_name on xnn_tab(name);
Index created

-------对name列进行查询:
SQL> select id,name from xnn_tab where not name ='wangjian';

                                     ID NAME
--------------------------------------- --------------------
                                      7 xiaohong
                                      8 zhangjun
                                      9 wanggang
                                     10 hangqiang
                                     11 jiangyun
                                     12 huangjie
                                     13 xueshan
                                     14 shuhua
                                     15 yujie
                                     16 shubiao

10 rows selected
------ 给sex列创建位图索引

SQL> create bitmap index idx_sex on xnn_tab(sex);
Index created

-------对sex列进行查询:
SQL> select id,name from xnn_tab where sex='male';

                                     ID NAME
--------------------------------------- --------------------
                                      8 zhangjun
                                      9 wanggang
                                     13 xueshan
                                     14 shuhua
                                     16 shubiao

------ 给brithday列创建函数索引

create index idx_date on xnn_tab(to_char(brithday,'yyyy-mm-dd'));
Index created

-------对brithday列进行查询:

SQL> select id,name,brithday from xnn_tab where to_char(brithday,'yyyy-mm-dd')>'1984-12-30';

                                     ID NAME                 BRITHDAY
--------------------------------------- -------------------- -----------
                                     16 shubiao              1986-10-17
                                     14 shuhua               1987-4-15


============================================================================================

4,根据练习3的三种查询结果,创建三个视图,然后对这三个视图做相应的查询


-------------------------------------------------------------------创建视图一并查询
create view xnn1_view
as
select id,name from xnn_tab where not NAME ='wangjian';

SQL> /

View created


查询:

SQL> select * from xnn2_view;

                                     ID NAME
--------------------------------------- --------------------
                                      7 xiaohong
                                      8 zhangjun
                                      9 wanggang
                                     10 hangqiang
                                     11 jiangyun
                                     12 huangjie
                                     13 xueshan
                                     14 shuhua
                                     15 yujie
                                     16 shubiao

10 rows selected
------------------------------------------------------------------创建视图二并查询
SQL> create view xnn_3
  2  as
  3  select id,name from xnn_tab where sex='male';

View created

查询:
SQL> select * from xnn_3;

                                     ID NAME
--------------------------------------- --------------------
                                      8 zhangjun
                                      9 wanggang
                                     13 xueshan
                                     14 shuhua
                                     16 shubiao
--------------------------------------------------------------------创建视图三并查询
SQL> create view xnn4_view
  2  as
  3  select id,name,brithday from xnn_tab where to_char(brithday,'yyyy-mm-dd')>'1984-12-30';

View created

查询:
SQL> select * from xnn4_view;

                                     ID NAME                 BRITHDAY
--------------------------------------- -------------------- -----------
                                     16 shubiao              1986-10-17
                                     14 shuhua               1987-4-15


===============================================================================

5,看书的索引那章,把创建索引的要求写下来(如:不同索引的差别,那些列应该创建索引,创建什么索引等等)


******************不同索引的差别?*****************

答:按索引数据的组织形式可以将索引分为三大类:
                                              第一类:B树索引
                                              第二类:位图索引
                                              第三类:函数索引
三种索引的差别概述如下:
 ㈠B树索引
是最常用的一种索引,在创建索引时默认创建的是B树索引。B树索引按照B树结构组织并存放索引数据,它具有如下几个特点:①无论查询条件是哪种类型或算法,都具有基本相同的查询速度;
                    ②无论对于大型表或小型表,效率相同;
                    ③能够适应多种查询条件。

㈡位图索引
是通过为索引列的每个值建立一个位图,利用位图进行按位的逻辑运算来实现操作的。在基数很小的列上创建位图索引非常有效,在数据行很多的情况下,查询效率要高于在该列上创建B树索引。

函数索引
在对表进行查询操作时常常需要通过查询某列的函数或者表达式,创建函数索引即在索引中存储经常访问的、计算密集的函数或表达式。可以说,函数索引是B树索引或者位图索引的一种特殊形式,它既可以采用B树索引,也可以采用位图索引。


*******************那些列应该创建索引?**************

   答:需要创建索引的列一般情况有如下几种:
                              ①大部分列值不重复的列;   
                              ②列值包含很多个NULL值,且经常需要查询所有的非NULL值纪录的列;
                              ③在经常要进行连接查询的多个表中,用于连接的列
                              ④连接查询中使用到的外键列。

    为列创建索引主要是为了提高对表进行查询操作的效率,而另一方面由于对表增、删、改的同时也需要修改索引,所以创建索引后,也会相应降低对表增、删、改的效率。因此,是否要为一个表的某列创建索引,必须综合考虑平时对表的该列进行增、删、改、查的操作频率。如果查询频率远远高于增、删、改的频率时,则需要为此列创建索引。反之,则不需要。



********************创建什么索引?****************
   答:当需要为表的某列创建索引时,应该考虑该列的具体情况而选择索引种类:

①需要创建位图索引的列:
    基数小的列(基数只达到纪录数的1%或大部分值重复100次以上)则对改列创建位图索引;常被具有逻辑查询条件的WHERE语句引用的列也应当建立位图索引;需要进行与NULL值相关的查询的列应当建立位图索引;需要节省存储空间是时候,也可以选择建立位图索引;

②需要创建B树索引的列:
    具有高基数的列,特别是有主键约束和唯一性约束的列只能使用B数索引;经常使用"<"和">"等比较运算符进行查询的列,应当建立B树索引。

③需要创建函数索引的列:
    如果对该列进行的查询操作一般不直接查询该列的数据,而是查询包含该列数据的函数或表达式时,则应该考虑为该列创建函数索引。需要注意的是:像SUM、AVG、MAX、MIN等为不同的行返回的不是单独的答案的函数,不能包含在函数索引的表达式中。




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -