oracle ocp考试题051知识点总结

考点知识总结

IZ0-051

 with check option 

在通过with check option 创建的视图,做dml的时候必须满足where 的条件才可以,无论是插入还是更新还是删除.不能忽略了,数据还要满足原表的constraint.

create table A as SELECT * FROM B

A表只能接收 B表的not null ,其他的constraint 不能创建

months_beetween()

months_between(to_date('2019-05-31','YYYY-MM-DD'),to_date('2019-05-01','YYYY-MM-DD')) 大日期在前小日期在后>0  ,反之<0.

intersect

两个表交集的时候不忽略空值,如果a表有一条空记录,b表也有空记录,做交集intersect的时候会显示出来.列名可以不一样,但是类型和数量必须一样.

列名定义" "

扫描二维码关注公众号,回复: 7444143 查看本文章

在定义列名的时候必须" "内的内容会原封不动的显示,而不加双引号" "的列名会自动变成大写.

例子:SELECT MONTH ms,AREA "Name" FROM mxq;列名ms 会自动大写, "Name" 会显示成Name

转义q'[Camera's category is Photo]'

转义为括号内的原始内容.其中方括号'[ ]'可以改成任意一对特殊符号但是必须成对出现如,'\ \','< >','| |'.

distinct

只能出现在sql语句的开头,并且只能出现一次.

NULL运算规则

任何数值加减乘除null=null.

 INTERVAL

语法一

INTERVAL '123-1' YEAR(N) TO MONTH; N默认为2,为0-9的精度;

SELECT INTERVAL '123-1' YEAR(3) TO MONTH FROM DUAL ;

例1

SELECT INTERVAL '123' YEAR(3)  FROM DUAL ;

如果小于3就会报错,结果为;+123-00

例2

SELECT INTERVAL '123' MONTH  FROM DUAL ;结果为:+10-03 默认是2所以是10年

SELECT INTERVAL '123' MONTH(3)  FROM DUAL ;结果为:+010-03 精度是3所以是010年

从例子2两个结果可看出来year后面的精度和month后面的精度都是表示年的精度.

语法二

INTERVAL '{ integer | integer time_expr | time_expr }'
{ { DAY | HOUR | MINUTE } [ ( leading_precision ) ]
| SECOND [ ( leading_precision [, fractional_seconds_precision ] ) ] }
[ TO { DAY | HOUR | MINUTE | SECOND [ (fractional_seconds_precision) ] } ]
{} 为必填,[]为可填可不填,|为或者.

例子一

select  interval '5 23:45:30.457' day to  second(2) from dual;结果为+05 23:45:30.46 ,leading_precision默认为2

select  interval '5 23:45:30.457' day(3) to  second(2) from dual;结果为+005 23:45:30.46,leading_precision为3

例子二

select  interval '5 23:45:30.457' day(3) to  minute from dual;报错间隔无效,'5 23:45:30.457'不是to minute格式

select  interval '5 23:45' day(3) to  minute from dual;结果为+005 23:45:00,DAY | HOUR | MINUTE 后面不可接精度,仔细看语法只有second后面有精度fractional_seconds_precision;

总结

1.interval 后面的格式必须符合to 后面的格式,比如 '5 23:45:30.457' 已经精确到秒,不能 to  minute.

2.DAY | HOUR | MINUTE后面的精度是天的精度,TO DAY | HOUR | MINUTE|SECOND 后面 只有SECOND可以接精度.

数据类型 clob blob long

clob 最大4g varchar2(4000) 超过四千就用clob

blob 最大4g 用来储存二进制对象 类如图片,音乐等.

clob和blob还有long类型不能再group by 和 order by 语句中直接使用.

 数据类型number,char,varchar2

number和char可以不用写长度char默认为1,number不写长度的时候可以存储小数位.

varchar2必须写长度,否则会报错

 创建表名规则

不能使用预留字,表名不能以数字开头,不能有*.

表名1-30个字符,最多有1000列.

约束constraint

一列可以同时是主键和外键

check 不能直接使用sysdate.可以用to_date('2014-01-12','YYYY-MM-DD')这种date类型的.

 序列.nextval和序列.currval不能直接使用在约束中.

列级约束和表级约束

1.直接在列后面定义约束为列级约束,

2.在定义完所有列之后,在定义约束为表级约束

default和 not null 只能为列级约束

混合主键或者unique只能定义在表级约束

CREATE TABLE WAREHOUSE (
WAREHOUSE_ID NUMBER(4),
ROOMNO NUMBER(10) CONSTRAINT R_ID CHECK(ROOMNO BETWEEN 101 AND 200), -------列级别
LOCATION VARCHAR2(25),
PROD_ID NUMBER(3),
CONSTRAINT WR_PR_PK PRIMARY KEY (WAREHOUSE_ID,PROD_ID),-----表级别
CONSTRAINT PROD_FK FOREIGN KEY (PROD_ID) REFERENCES PRODUCTS(PROD_ID)----表级别);

Multitable insert

INSERT ALL
INTO Sales_info VALUES (employee_id,week_id,sales_MON)
INTO Sales_info VALUES (employee_id,week_id,sales_TUE)
INTO Sales_info VALUES (employee_id,week_id,sales_WED)
INTO Sales_info VALUES (employee_id,week_id,sales_THUR)
INTO Sales_info VALUES (employee_id,week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
sales_WED, sales_THUR,sales_FRI 
FROM Sales_source_data;

INSERT ALL
WHEN SAL>10000 THEN
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
WHEN MGR>200 THEN
INTO mgr_history VALUES(EMPID,MGR,SYSDATE)
SELECT employee_id EMPID, hire_date HIREDATE, salary SAL, manager_id MGR
FROM employees WHERE employee_id > 200;

sequence
 
cache 默认是20 如果数据库异常关闭那么存储在cache中的20个序列,在数据库正常重启之后将都不可用,直接从第21个开始取值.
 
primary key和UNIQUE KEY
 
再添加约束的时候会自动增加index.
 
index
在组合索引列上可以创建单独索引,已经有单独索引的列,不可以在创建单独索引.
view中的索引
单一视图和复杂视图都可以使用基础表上的索引.
用hint来固定表的索引
create view mxq select * from test_1 inner join test_2 on test_1 .id=test_2 .id;
语法 /*+(view.table_name index_name) (view.table_name index_name)*/
select/*+index(mxq .test_1  index_test_1 _id )  (mxq .test_2  index_test_2 _id ) */ * from mxq where id>200;
如果创建视图的时候用的是表别名
语法则为 /*+(view.table_alias_name index_name) /
序列
当序列定义为cycle,如果到达最大值之后,从1开始循环.
order by
order by 从句中的列 不一定要出现在select 中.
order by 的时候 null 值最大.
可以用null last 和 null first 来控制null值.
desc 降序 null,5,4,3,2,1
asc   升序 1,2,3,4,5,null
order by 默认是升序.
函数instr
 instr(1,2,3,4)
变量1,要搜索字符串
变量2,字符串中要搜索字符
变量3,当是正数的时候,开始位置,当是负数的时候是结束位置,都是从左往右开始搜索字符。
变量4,要搜索字符出现的次数。
函数replace
replace可以这么用select replace(to_date('2019-05-31','YYYY-MM-DD'),‘-’) from dual;
可以用于date类型的转换。
隐式转换
vachar 2和 char可以转换为number  ;
vachar 2和 char可以转换为date类型  但是格式必须相对应;对应的是数据库的默认date类型格式。
to_char(日期)
to_char(日期,‘yyyy-mm-dd’);
SELECT TO_CHAR(TO_DATE('   11-oct-2007'), 'fmDDthsp"of" Month, Year') FROM DUAL;
显示结果为   ELEVENTHof October, Two Thousand Seven
fm,去除空格
Dd,开头是首字母大写其余小写,如果为DD,那么全为大写
th,后缀th
sp,数字的拼写。
NLS_DATE_LANGUAGEE;
NLS_DATE_FORMAT;
nvl 函数
nvl(exp1,exp2) 表达式1和表达式2的类型必须一样,否则exp2会转化成exp1.
测试
select nvl(1,'aa') from dual;报错无效数字,aa转换成数字肯定是无效数字;
select nvl('aa',1) from dual;不报错,因为1隐形转换成字符格式成功.
nvl2函数
nvl2(exp1,exp2,exp3),1为空则显示3,否则显示2.
exp3,隐式转换成exp2的数据类型,如果exp3为空则不需要.
exp1可以为任意类型,exp2和3则是除了long的类型
例子
SELECT inv_no,NVL2(inv_date,'Pending','Incomplete') FROM invoice;很显然可以 因为 参数2和参数3数据类型一致;
特殊例子
SELECT inv_no,NVL2(inv_date,sysdate-inv_date,sysdate) FROM invoice; 安道理说参数2返回是数字类型,参数3是日期格式,但是可以转换成功,日期-日期获得的不是单纯的数字类型
SELECT inv_no,NVL2(inv_date,1,sysdate) FROM invoice;这样转换则报错
NULLIF
NULLIF(EXP1,EXP2)
参数1和2数据类型要一致,
如果1和2相同,那么返回空值,如果不相同,返回参数1的值.
COALESCE
COALESCE(exp1,exp2,.......)   n>=2
数据类型需要一致或者可以隐式转换成一致的
返回第一个不为空的值.
decode
decode默认返回值,需要和第一个结果返回值一个类型
聚合函数
在不分组的时候可以省略group by
例子
select sum(SHANGJIN) from XZHDX;这样可以
select max(t.SHANGJIN),zhenying from XZHDX t; 这样就必须加上group by 否则会报错
 count
count(*) 包括空值和重复值
count(id) 不包括空值
count(distinct(id)) 不包括空值和重复值
聚合函数
select 中可以不描述,直接在having 字句中使用
select AA from XZHDX t  having sum( SHANGJIN)>2 group by  AA.
SHANGJIN不需要出现在select 语句中 可以直接在having字句中使用
SELECT SUM(SHANGJIN), ZHENYING
  FROM XZHDX
 WHERE END_DATE - ST_DATE > 30
 GROUP BY ZHENYING;
先出数据 然后在分组
SELECT SUM(SHANGJIN), ZHENYING, MIN(END_DATE - ST_DATE)
  FROM XZHDX
 GROUP BY ZHENYING
HAVING MIN(END_DATE - ST_DATE) > 30;
先分组 然后在计算having条件
 
自然链接和using
链接的是表中相同的字段名字,如果字段类型不同的话 ,可以隐式转换的  则查询成功,不能隐式转换的,则查询不成功.
子查询
子查询嵌套最大级别为255.
group by 和order by
 group by 后面只能接列名,order by 后面可以接别名
 
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/throughRiversandLake/p/10894153.html