建表规范:
1、在设计表的时候不能太冗余
2、不要让一组数据重复出现(不过有的时候确实会舍弃规则换效率)
你知道什么是游标吗?
使用游标之前要先创建游标,然后根据游标查询到的结果集,去调用这个游标,如果要INSERT 插入,插入的数据就是游标抽出的来结果集,用完之后需要关闭游标。
JAVA当中的 instanceof
用来判断这个对象是不是该类型,instanceof只可以用对象,不可以用变量
Person p1 = new Person();
Person p2 = new Man();
Man m1 = new Man();
System.out.println(p1 instanceof Man); // false
System.out.println(p2 instanceof Man); // true
System.out.println(m1 instanceof Man); // true
SQL语句的执行顺序
SQL关键字执行的先后顺序是:首先要执行的是FROM 语句;然后是WHERE 语句,GROUP BY语句;接着是HAVING 语句;最后是ORDER BY语句。
Oracle分页
--查询表中5~10条数据
SQL>SELECT T1.* FROM (SELECT TB_A.*,ROWNUM WL FROM TB_A WHERE ROWNUM <= 10)T1 WHERE WL >= 5;
--如果看不懂的话可以分两个步骤来看一下
--这个是查询TB_A表中的前10条数据
(SELECT TB_A.*,ROWNUM WL FROM TB_A WHERE ROWNUM <=10) T1
--这个是根据查询到的前10条数据用WHERE条件来取到5~10条数据 WL是伪列的意思
SELECT T1.* FROM (SELECT TB_A.*,ROWNUM WL FROM TB_A WHERE ROWNUM <=10) T1 WHERE WL >= 5;
Oracle怎么创建序列
CREATE SEQUENCE [序列名]
INCREMENT BY [递增值] //递增的序列值,如果是正数就递增,如果是负数就递减,默认值是1
START WITH [开始值] //开始的值,递增默认是 minvalue,递减默认是 maxvalue
MAXVALUE [最大值]
MINVALUE [最小值]
CYCLE | NOCYCLE //循环 | 不循环
CACHE N | NOCACHE //分配并存入到内存中
**Oracle查看当前序列**
//查看当前序列的值
SELECT [序列名].CURRVAL FROM DUAL;
//序列调用 产生一个新的序列
SELECT [序列名].NEXTVAL FROM DUAL;
**如果第一次直接用[序列名].CURRVAL 来访问序列的话就会报错**
总结:
1、序列第一次必须先调用NEXTVAL获取一个序列值,才可以用CURRVAL查看当前序列值。
2、序列的起始值不能小于最小值
3、创建一个循环序列,则不需要设定最大值
4、如果创建带缓存的序列,缓存的值必须满足约束公示:最大值-最小值>=(缓存值-1)*每次循环的值
Oracle中DEFAULT的用法
DEFAULT就是默认值的意思,当你不往里放数据的时候,默认写进去的就是你default的那个值。
Oracle中的NVL()用法
NVL函数的格式如下:NVL(expr1,expr2)
含义是:如果oracle第一个参数为null那么显示第二个参数的值,如果第一个参数的值不为null,则显示第一个参数本来的值。
例如:SQL> select ename,NVL(comm, -1) from emp;
NVL2函数的格式如下:NVL2(expr1,expr2, expr3)
含义是:如果该函数的第一个参数为null那么显示第二个参数的值,如果第一个参数的值不为null,则显示第三个参数的值。
例如:SQL> select ename,NVL2(comm,-1,1) from emp;
decode比较大小
说明:sign(value)函数会根据value的值为0,正数,负数,分别返回1、-1、0;
sign(x)或者Sign(x)叫做符号函数,其功能是取某个数的符号(正或负):
当x>0,sign(x)=1;
当x=0,sign(x)=0;
当x<0, sign(x)=-1;
需求:年龄在20以上的显示20以上,20以下的显示20以下,20的显示正好20
SELECT
T.ID
, T.NAME
, T.AGE
, DECODE(SIGN(T.AGE - 20))
, 1
, '20以上'
, -1
, '20以下'
, 0
, '正好20'
, AS SEX
FROM
TB_STUDENT T
结果:
解析:用到了SIGN这个函数,取T.AGE的正负值,当前的AGE - 20是正数的话就是20以上,当前的AGE - 20 是负数的话就是20以下,如果取到的值是0的话,刚好满20