DD

来源:互联网 发布:松下触摸屏编程说明书 编辑:程序博客网 时间:2024/05/17 07:06

QL Fundamentals1
1. 请问下列哪些属于SQl语句,sql命令与sql 语句的区别?
=======================================
3. 要看一个rowid还要看表的其他全部内容应该怎么写语句
select rowid,* from test ;(错)
select rowid,t.* from test t;
select rowid,test.* from test ;
=======================================
4. null的分类叙述 针对空值如何避免,还有判断NULL参不参与count的计算
   宝典198页
=======================================
5. all和any的用法,在前面加上not后分别是什么意思
  不加时all是比最大的大 any 是比最小的大 ,not>all(1000,2000)指2000的
not>any(1000,2000)是指1000的
=======================================
6. rownum 是在SGA中生成的ORDER BY是在PGA区生成的,所以rownum在orderby之前生成。Orderby要放在rownum之后。
=======================================
7.  &和&&的区别是什么
   &是只输入可以多次使用;&&不能多次使用,包含define
=======================================
8…………………..至months_between,interval时间间隔函数
1.下列关于函数功能使用描述正确的是()
A. to_number() 可以将16进制数转换成10进制数
B. to_number() 可以将10进制数转换成16进制数
C. to_char() 可以将10进制数转换成16进制数
D. to_char() 可以将字符串型数据转换成日期型
E. to_date() 可以将日期型数据转换成字符串型
=======================================
2.
round(d,[,fmt])返回日期时间d的四舍五入结果。如果fmt是year,则以7月1日为分界线;
如果fmt是month,则以16日为分界线;如果fmt是day则以中午12:00为分界线。
trunc(d,[,fmt])返回根据fmt指定的精度截断后的日期d.其中,d是一个日期,fmt是一个指
定日期精度的字符串。如果fmt为year,则为本年的1月1日;如果fmt为month,则为本月的1
日;如果fmt为day,则天的个位为0(只有个位时不变)
例如:
select round(to_date('04-07-01','yy-mm-dd'),'year') y1,
       round(to_date('04-06-30','yy-mm-dd'),'year') y2,
       round(to_date('04-07-15','yy-mm-dd'),'month') y3,
       round(to_date('04-07-16','yy-mm-dd'),'month') y4
from dual;
Y1          Y2          Y3          Y4
----------- ----------- ----------- -----------
2005-1-1    2004-1-1    2004-7-1    2004-8-1
select to_date('2007-12-15','yyyy-mm-dd') dd,
trunc(to_date('2007-12-15','yyyy-mm-dd'),'year') y,
trunc(to_date('2007-12-15','yyyy-mm-dd'),'month') m,
trunc(to_date('2007-12-15','yyyy-mm-dd'),'day') d1,
trunc(to_date('2007-12-16','yyyy-mm-dd'),'day') d2,
trunc(to_date('2007-12-18','yyyy-mm-dd'),'day') d3,
trunc(to_date('2007-12-13','yyyy-mm-dd'),'day') d4,
trunc(to_date('2007-12-8','yyyy-mm-dd'),'day') d5,
trunc(to_date('2007-12-28','yyyy-mm-dd'),'day') d6
from dual;
DD          Y           M           D1          D2          D3          D4          D5          D6
----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
2007-12-15  2007-1-1    2007-12-1   2007-12-9   2007-12-16  2007-12-16  2007-12-9   2007-12-2   2007-12-23
=======================================
3.
函数to_char(sysdate,'ddd'),to_char(sysdate,'dd'),to_char(sysdate,'d')中ddd一年终得第几天,dd为一月中的第几天,d一星期
中的第几天;其优先级为:ddd>dd>d;
select to_char(sysdate,'yyyy!!@mm!##!@dd') d from dual;
结果为:
D
----------------
2007!!@12!##!@18

select to_char(sysdate,'yyyy!!@mm!##!@dd!!#$d') d from dual;
输出:
D
---------------------
2007!!@12!##!@18!!#$3

select to_char(sysdate,'yyyy!!@mm!##!@d!!#$ddd') d from dual;
输出:
D
----------------------
2007!!@12!##!@3!!#$352

SQL> select to_char(sysdate,'yyyy!!@mm!##!@dddd') d from dual;
输出
D
------------------
2007!!@12!##!@3523

select to_char(sysdate,'yyyy!!@mm!##!@ddddd') d from dual;
输出:
D
-------------------
2007!!@12!##!@35218
=======================================
4.date-date结果是什么?是天数
例子:
select to_date('2007-12-18','yyyy-mm-dd')d1,to_date('2005-8-23','yyyy-mm-dd')d2,
       to_date('2007-12-18','yyyy-mm-dd')-to_date('2005-8-23','yyyy-mm-dd') d
from dual;
输出:
D1          D2                   D
----------- ----------- ----------
2007-12-18  2005-8-23          847

select to_date('2007-9-18','yyyy-mm-dd')d1,to_date('2007-8-23','yyyy-mm-dd')d2,
       to_date('2007-9-18','yyyy-mm-dd')-to_date('2007-8-23','yyyy-mm-dd') d
from dual;
输出:
D1          D2                   D
----------- ----------- ----------
2007-9-18   2007-8-23           26

select to_date('2007-9-18','yyyy-mm-dd')d1,to_date('2007-8-23','yyyy-mm-dd')d2,
       to_date('2007-8-23','yyyy-mm-dd')-to_date('2007-9-18','yyyy-mm-dd') d
from dual;
输出结果为:
D1          D2                   D
----------- ----------- ----------
2007-9-18   2007-8-23          -26
=======================================
5.
months_between(d1,d2)函数:返回日期d1和d2之间相差的月数,若d1小于d2则返回负数;
如果d1和d2的天数相同或者都是月底,则返回整数;否则oracle以每月31天为准来结果
的小数部分.
例子:
select months_between(sysdate,to_date('1998-8-31','yyyy-mm-dd')) m1,
       months_between(to_date('2001-08-02','yyyy-mm-dd'),to_date('2004-08-01','yyyy-mm-dd')) m2,
       months_between(to_date('2001-08-01','yyyy-mm-dd'),to_date('2004-08-01','yyyy-mm-dd')) m3
from dual;
输出结果为:
        M1         M2         M3
---------- ---------- ----------
111.611576 -35.967741        -36
=======================================
9.date-date得到什么?1/7周后的时间?是间隔天数,以数值型表达出,保存到小数位11位
=======================================
1)选择题:聚合函数(组合函数)
     作用于查询出的数据组(即多行数据的组),返回一个统计结果.一般情况下,聚合函数要与group by 子句联合使用,否则会将查询出的所有数据行当成一个组.
 注意点: (1)聚合函数只能出现在选择列表、order by子句、having子句中,不能出现在where 和group by子句中
       (2)如果选择列表同时包含列、表达式和聚合函数,则这些列、表达式都必须出现在group by 子句中
=======================================
2)选择题:外连接
    外连接包括:左连接(left join)、右连接(right join)、全连接(full join)
    作用:看信息最全的出现在左边还是右边
    eg:....from emp e left join dept d ....表信息最全的是emp表
注意返回行数
=======================================
3)选择题:子查询
     (1)判断语句使用正确,考点:单行、多行(书:6-12~6-15)
          eg: .....where sal=(select sal from ....)
          =:子查询只能返回单行
          <,>,>all,>any,<all,<any 子查询返回多行
      (2)6-17 in,not in 出现空值
           eg:  select * from emp where deptno in (10,20,null)==>null不影响,10和20号部门都能查出来
           eg:  select * from emp where deptno not in (10,20,null) ==>查不到任一行
=======================================
4)union/union all(并)
       (1)区别:union 会自动去重复行,并以第一列的结果进行排序
                 union all 不会自动去重复行,并不会对结果进行排序
       (2)当两者都能完成同一任务时,选择union all好
         intersect(交),minus(差)
       (3)使用union:
            select a,b,c from ...
            union
            select e,f,g||h from ... 可以返回数据,字段类型相同就行,列名可以不同.,而且结果列的列名是上面的列名a,b,c
=======================================
5)简答:insert 编程 (第八章)
=======================================
1.下列关于事务描述正确的是()
考点:
事务的原子性:all rollback,all commit;
事物的开始与结束:
开始:当commit或者rollback发生时;当DDL语句如create执行后(隐式提交);当一个DCL语句执行之后(隐式提交)。
结束:当用户退出isql*plus后;机器down掉或者系统重启。
一个事务结束后,从下一个sql语句开始表示以各新的事务的开始。
Truncate会把事务一分为二,因为truncatet一经引入就不能回滚  dcl?
=======================================
1.default,not nul的位置Default 必须放在not null之前
2.行级,表级约束的定义
3.如果没有为约束命名,系统怎样命名
4.五种约束的英文名primary key,foreign key,not null,unique,check
5.是否会自动创建 索引:会
6.表中有多少个unique key,primary key
7.如何修改约束状态
     Enable
  Disable
  Validate
 Invalidate
 

--如果创建多列的约束,必须要创建表级的约束
create table test

(
                  sno varchar2 (2),
                  sname varchar2 (5 char),
                  sex char (1 char) default '男',
                  age number(2) check(age between 15 and 25),
                  constraint test_sno_pk primary key(sno),
                  constraint test_sex_age_c check (sex='男' and age between 10 and 25
                                                   or sex='女' and age between 15 and 25)
);
drop table test ;
                
--查询该用户下所有的约束
desc user_constraints
--查看test表的约束
select * from user_constraints
  where table_name = 'TEST';
 
--删除列,在删除时会将该列的数据一起删除
alter table stud
drop column birthday

----------约束的修改----
alter table stud
add (birthday date constraint stud_birth_c
     check (birthday<to_date('1980-1-1','yyyy-mm-dd'))disable)--禁用约束
    
alter table stud
modify enable novalidate constraint stud_birth_c --启用约束,不对已经存在的记录进行检查。


----唯一约束   unique
create table temp(sno number unique)
insert into temp
values(null)
create table course
(  cno number(6),
   cname varchar(20),  --not null 不能建立在表级约束
   credit number,
   constraint course_cno_pk primary key(cno),
   constraint course_credit_c check(credit in(2,3,4))
)
  
alter table course
modify (cno number(7),cname not null);--修改not null 只能用modify

create table score
(
  sno number(2)constraint score_sno_fk references stud(sno),--创建列级的外键
  cno number(7),
  grade number(4,1) constraint score_grade_c check(grade between 0 and 150)

 


alter table score  --添加主键
add constraint score_sno_cno_pk primary key(sno,cno)

alter table score  --添加表级的外键
add constraint score_cno_fk foreign key(cno) references course(cno)

ALTER TABLE stud ADD(birthday date CONSTRAINT stud_birth_c check(birthday<to_date('1980-1-1','yyyy-mm-dd')) DISABLE novalidate)
DISABLE指约束无效, novalidate存在无意义,因为DISABLE已经让约束无效了检查以前的数据是否合法已经无意义.
ALTER TABLE stud ENABLE novalidate CONSTRAINT stud_birth_c
让约束生效,novalidate指不检查以前的数据行,如果用validate的话以前行有违反约束的就无法修改成功
=======================================
选择题:
1.对视图描述正确的是()
考点:
10-16with check option:在使用视图时,检查涉及的数据是否能通过select子查询的约束条件,否则不允许操作并返回错误提示.

create or replace view emp_view
as  select employee_id,last_name,email,phone_number
from employees
where employee_id between 140 and 150
with check option constraint emp_view_check;
======================================
10-7
创建只读视图:

create or replace view emp_view as
select empno,ename,sal*12 salary    --在视图的子查询中的表达式的列必须起别名,要不视图中无法显示该列名。
from emp with read only;---只读视图创建
简单视图可以对基表进行修改,但是不能违反基表的约束
======================================
2.对序列的描述正确的是()
考点:
start with只是开始的值,不一定要在min(),max()中间,只有在循环的时候才用到min(),max()
要先用nextvalue才能使用currentvalue
会话相关性:在会话1中查出nextvalue=10,current=10, 接着在会话2种查出:nextvalue,currentvalue=11,再回到会话1种查
currentvalue=10,查nextvalue后在察看currentvalue=12;
=======================================
3. 对索引的描述正确的是()
考点:
数据与索引是分离的,索引是附加的
索引是自动维护的,但是可以重建,索引可以加快查询的速度,对DML操作有影响。

*索引一定会减慢DML的速度?(视情况而定)
=======================================
十一章选择题:
查询对象(如视图)是否有效需要查询哪个数据字典()
答案:user_objects的status字段,valid为有效。
=======================================
第一章 权限
有表权限,系统权限,对象权限,角色是很多权限的集合。
grant create table to she with admin option;--系统级 连带授权
grant create table to she with grant table;--对象级 连带授权
revoke create table from she;--回收权限,系统权限可以传递授权,但不能传递回收,对象级可以被级联回收
=======================================
第二章
在删除整个列的数据的时候要先设置列无效,然后删除无效的列。此过程不能逆转。

alter table employees2
  set unused(dept_id)
/
alter table employees2
  drop unused columns--删除无用的列
/

on delete cacade/set null
======================================
在表的外键的作用下,对数据的操作会有参照完整性的触发。一般从表在insert,updata时会触发参照完整性,而主表在delete的时候会触发。这样的话就会用到下面的语句。

alter table score  --添加表级的外键
add constraint score_cno_fk foreign key(cno) references course(cno) on delete cascade;--连带删除,在删除主表是连带删除子表的记录


alter table score  --添加表级的外键
add constraint score_cno_fk foreign key(cno) references course(cno) on delete set null;--连带置空,在删除主表是连带置空子表的记录

alter table stud drop column sno cascade constraint;--在表中删除一列并连带删除其他表中的引用。
=======================================
SQL Fundment II
2.列存储比较多时用set unused删除速度快//没有反过程
=======================================
3.
主表 delete、update 操作可以触发fk事件
子表 insert、update 操作可以触发fk事件
Fk三种状态: on delete cascade
on delete set null
不允许删除
=======================================
4.flashback 闪回的是回收站中拥有的表~不能闪回purge掉的表
  drop后可以闪回~并不是永远找不回这张drop的表
=======================================
5.with 语句前面申明过的后面必须用得到,后面用到的必须是前面声名的
with
  x as()
  y as()
select *  -----下面的查询中一定要用到上面的x,y  不然报错~X, Y 必须是当作表来使用
from x

with dept_min as (select deptno, min(sal)
                   from emp     
                   group by deptno)
select  e.ename
from emp e jion dept_min d
om e.deptno=d.deptno and e.sal=d.salary
=======================================
7.10g才开始支持正则表达式的使用
PL/SQL
1、 PL/SQL与 SQL的关系。
PL/SQL是对SQL程序化的封装,它是一种结构化/过程化语言。
PL/SQL分为匿名和命名,编译后才能使用
=======================================
2、 函数与存储过程的区别。
函数必须有返回值。
过程和函数都以编译后的形式存放在数据库中,函数可以没有参数也可以有多个参数并有一个返回值。过程有零个或多个参数。函数和过程都可以通过参数列表接收或返回零个或多个值。函数可以出现在表达式中, 过程不可以。
(1)函数有返回值
(2)函数可以出现在sql中,如select 字段列表中或where条件中--函数专用吧
(3)前台语言包有专门机制调用存储过程,函数只能发送sql来使用
(4)存储过程执行效率高于函数
=======================================
3、 PL/SQL集合与记录类型
(1) Index_by 索引表 --PL/SQL临时表
(2) Varray 数组 密集
(3) 嵌套表 稀疏,可以从任一下标删除
Index_by表总是稀疏的,如果元素被删除了嵌套表可以是稀疏的,但VARRAY类型的集合则是紧密的.Index_by表不能存储在数据库中,但嵌套表和VARRAY可以被存储在数据库中
=======================================
4、 控制结构
(1) if case
(2) loop exit
(3) goto
如果表中一子段为Date型,要根据其不同月份选择不同的操作,应使用哪一种控制结构?
使用case结构较好。
=======================================
5、 动态SQL
DDL语句只能在动态SQL中使用。

动态SQL与dbms_sql,哪个更推荐使用?
动态SQL。
  1) 动态SQL是指DDL和不确定的DML(即带参数的DML)
2) 绑定参数列表为输入参数列表,即其类型为in类型,在运行时刻与动态SQL语句中的参数(实际上占位符,可以理解为函数里面的形式参数)进行绑定。
3) 输出参数列表为动态SQL语句执行后返回的参数列表。
4) 由于动态SQL是在运行时刻进行确定的,所以相对于静态而言,其更多的会损失一些系统性能来换取其灵活性。

动态SQL创建的对象,能否在后续的静态SQL中使用?
这要视情况而定。
如果动态SQL创建的对象是索引,在后续的静态查询语句中就可以使用;
如果动态SQL创建的对象是表,在后续的静态查询语句中就不可以使用。
=======================================
6、 通用游标使用过程
声明->打开->循环取值->退出循环->关闭游标
=======================================
7、 自治事务
这是一个非常实用的功能,特别用在记录错误日志同时要回滚主事务的时候。
AT 是由主事务(以下MT)调用但是独立于它的事务。在AT被调用执行时,MT被挂起,在AT内部,一系列的DML可以被执行并且commit或rollback.由于AT的独立性,它的commit和rollback并不影响MT的执行效果。在AT执行结束后,主事务获得控制权,又可以继续执行了。
=======================================
8、 
create or replace function fun_test(p_deptno out nocopy number) return                                                      
in在等号右边(默认是in型)。在你调用这个功能时必须给它赋值
out在等号左边,形参可修改。在功能里对它进行赋值
in out在等号两边。         可以在功能中赋值也可以在调用时赋值
=======================================
10、nocopy只是友情提示。
使用NOCOPY编译器来提高PL/SQL性能。缺省情况下,out类型和in out类型的参数是由值传递的方式进行的。但是对于大的对象类型或者集合类型的参数传递而言,其希望损耗将是很大的,为了减少损耗,可以采用引用传递的方式,即在进行参数声明的时候引用NOCOPY关键字来说明即可到达这样的效果。比如创建一个过程:
create or replace procedure test(p_object in nocopy square)
...
end;
  其中square为一个大的对象类型。这样只是传递一个地址,而不是传递整个对象了。显然这样的处理也是提高了效率。
=======================================
11、p(
 a in number;
 b in number;
 c in number;
 d in number default 3 --default 只能放在最后一个
)

exec p(va,vb,v);--a,b,c分别赋值va,vb,v   d被赋值为3
=======================================
12、包头的3个功能:包规范,命名冲突,全局变量
包头create or replace package my_package is .. end my_package;可以不需要包体
包体create or replace package body my_package is .. end my_package;必须依赖包头
=======================================
13、dbms_output 包用来输出内容
utl_file 包用来读取和写入系统文本文件,提供了有限的文件I/O流
utl_mail 包用来管理邮件
dbms_scheduler 包提供了从任意PL/SQL程序中随时提取功能和存储过程的明细单(猜想:任务管理器)
SQL Tuning
1. 选择数据库启动状态
Nomount,mount,open,shutdown.是状态,startup不是状态
shutdown immediate 关闭数据库
shutdown abort 强制关闭数据库
startup nomount 打开实例,不加载数据库
startup mount 打开实例,装载数据库
startup 正常打开实例,装载数据库,打开数据库
=======================================
2. 一个数据库对应一个或多个实例
一个实例对应一个数据库
数据库可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。实际上,准确地讲,实例在其整个生存期中最多能装载和打开一个数据库!
=======================================
3. 数据库-》表空间-》段-》区-》块
-》:为包括关系
其中,还可以为数据库-》表空间-》数据文件-》区-》块。(详见10G宝典P260图8.6)
区不可以跨数据文件,因为一个数据文件的块是连续的.
=======================================
4. 数据库链接           1-141-15
专用服务器连接。特点:事务运行时间长使用此链接
共享服务器连接。特点:为了获取并行度。
=======================================
8.#在SGA中,哪个是循环写入的(即边写边读)?选择题
RedoBuffer
=======================================
9.#调优的方法和目标
调优的目标,及适用的范围?选择题2-6
1.降低的响应时间:适用于操作型数据库(OLTP)
2.降低资源使用(即最大吞吐量):适用于分析型数据库(DSS)即数据仓库   如:汇总,月报

调优的方法:
1.rule
2.cost
    1)all-rows
    2)first-rows
    3)first –rows-n
    4)choose
 =======================================
10.#SQL语句差的原因?选择题2-8
哪些SQL语句可能 导致性能过差?
1.大量数据被存取
2.写了差的应用代码
3.优化器模式的设置
4.优化器的统计
=======================================
9.#鉴别高负载SQL语句? 选择题2-9
鉴别高负载SQL语句方法:
手动:ADDM(自动数据库诊断监视器Automatic Database Diagnostic Monitor );Top SQL
自动:动态性能视图(如:v$SQL);statspack(快照)
=======================================
11.#自动调优需要什么支持?多选题 2-22
SQL Tuning Advisor 
SQL Access advisor
=======================================
3.哪个是Inner哪个是Outer?(选择题)
  5-23
set autotrace 选项:
set autotrace {off | on | trace[only]} [explain] [statistics]
=======================================
使用下列哪个包收集统计信息
DBMS_STATS
=======================================
使用统计信息包提供哪些方法
Gether_stats_job 7-13
通过表可以收集索引的信息,反之不行
=======================================
DBMS_MONITER跟踪
SQLTRACE
Tkprof格式化跟踪文件
=======================================
创建位图索引的语法:
CREATE BITMAP INDEX cust_sales_bji
ON     sales(c.cust_city)
FROM   sales s, customers c
WHERE  c.cust_id = s.cust_id;

下列语句不能从中获益的语句是:函数索引 (选择)
出现函数索引的原因(简答)
======================================
IOT:1、必须用一个主键
     2、不能包含long型的列
     3、可以重建
     4、可以通过主键和领导列访问
=======================================
提示 只是给出建议,并不强制/*+xxx*/
逻辑上判断重启动:标志位

 

原创粉丝点击