oracle中decode函数的用法:
1.decode(条件,值1,返回值1,值2,返回值2,值3,返回值3,值n,返回值n,缺省值)
该函数的含义:if 条件=值1 then return(翻译值1)
elsif 条件=值2 then return (翻译值2)
...
elsis 条件=值n then return(翻译值n)
else return (缺省值)
end if
ORACLE中NVL的用法:
2.NVL(string1,repalce_with) 如果string1为null,则nvl函数返回repalce_with的值,否则返回string1的值
3.merge into 的用法:
作用:判断B表和A表是否满足ON中条件,如果满足则用B表去更新A表,如果不满足,则将B表数据插入A表但是有很多可选项
MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...) --判断B表和A表是否满足ON中条件
WHEN MATCHED THEN --如果满足则用B表去更新A表。。(MATCHED表示满足这个条件)
[UPDATE sql]
WHEN NOT MATCHED THEN --如果不满足
[INSERT sql]
4.sqlerrm:是oracle的一个函数,返回指定错误代码的错误信息。必须赋给一个变量,才能在sql中使用
5.sqlcode:常见于oracle编程中的数据库操作的返回码,其中ORA-1403和ORA-1405为最常见的返回码,返回0则表示操作完全正确。
ORA-01403:未找到数据
ORA-01405:读取的列值为NULL
6.--oracle的数据字典:
select * from v$nls_parameters; --v$nls_parameters是oracle的一张系统数据字典
alter system|session set NLS_DATE_FORMAT='yyyy-mm-dd';--修改日期格式,如果不加system(全局),那么更改只在当前会话中生效
7.oracle 中的赋值为 := --注意:等于是=,不是==
plsql中: a number :=0;
java中:int a = 0;
8. beteen...and :1.含有边界2.小值在前,大值在后
9.--null值 3. 如果集合中,含有null,不能使用not in; 但可以使用in
select * from emp where deptno in (10,20,null)
10.模糊查询:like '%',like '_';--%是任意长度的任意字符,_是一个长度的任意字符
模糊查询的特殊用法:
--查询名字中含有下划线的员工
SQL> select * from emp where ename like '%_%';--注意:这样是查不出来的,就把全部的查出来了
--转义字符escape
需要用escape转义:select *from emp where ename like '%\_%' escape '\';(注意:'\'只是声明转义字符的一般写法,当然也可以用其他代替)
11.
--SQL优化2. where解析顺序: 右--> 左
12.
--order by 排序,
--order by +列,表达式, 别名,序号(代表第几列的排序)
--order by 多个列排序
SQL> select * from emp order by deptno,sal;(先按照deptno升序,再按照相同的deptno中sal升序,但是降序只是离他最近的列)
--Oracle中,null最大,所以降序的时候会把null值排在前面,这时候进行null值得排列:
---> select * from emp order by comm desc nulls last;
13.--a命令 append
a desc(注意:a和desc之间有两个空格,意思是将降序desc追加给上面的sql后)
------------------------------------------------------------------------------------
14.多表连接
--没写left join 和right join的时候应该这么用:
SQL> 外连接:某些不成立的记录,通过外连接依然可以包含在最后的结果中
SQL> 左外连接:当where e.deptno=d.deptno不成立的时候,等号左边的表任然包含在最后的结果中
SQL> 写法:where e.deptno=d.deptno(+)
SQL> 右外连接:当where e.deptno=d.deptno不成立的时候,等号右边的表任然包含在最后的结果中
SQL> 写法: where e.deptno(+)=d.dept
----------------------------------------------------------------------------------------
SQL> delete和truncate的区别:
SQL> 1. delete逐条删除,truncate先摧毁表 再重建
SQL> 2. **** delete是DML(可以回滚) truncate是DDL(不可以回滚)
SQL> 3. delete会产生碎片 truncate不会
SQL> 4. delete不会释放空间 truncate会
SQL> 5. delete可以闪回(flashback) truncate不可以
----------------------------------------------------------------------------------------
SQL> Oracle中事务的标志
SQL> 1. 起始标志: 事务中第一条DML语句
SQL> 2. 结束标志:提交 显式 commit
SQL> 隐式 正常退出exit,DDL,DCL
SQL> 回滚 显式 rollback
SQL> 隐式 非正常退出,掉电,宕机
SQL>
SQL> */
------------------------------------------------------------------------------------------
SQL> SQL的类型
SQL> 1. DML(Data Manipulation Language 数据操作语言):insert update delete select
SQL> 2. DDL(Data Definition Language 数据定义语言): create/drop/alter/truncate table
SQL> create/drop view,sequence,index,synonym(同义词)
SQL> 3. DCL(Data Control Langauge 数据控制语言): grant(授权) revoke(撤销权限)
------------------------------------------------------------------------------------------
索引:
1.是一种独立于表的模式对象,可以存储在与表不同的磁盘或者表空间中。
2.索引被破坏或者删除,不会对表产生影响,影响的只是查询速度,
3.索引一旦建立,oracle管理系统会对其自动维护,而且由oracle管理系统决定何时使用索引.用户不在查询语句中指定使用哪个索引
4.删除一个表时,所有基于该表的索引会被自动删除
索引:index(可以看做一本书的目录)
-->比如:查询部门号为10的员工;select * from emp where deptno='10';
首先,按照deptno创建目录(也就是索引):
create index myindex(是索引名)
on emp(deptno);
它会建立一张索引表,(rowid),按照deptno排列好的。
在多个列创建索引:
create index myindex(是索引名)
on emp(deptno,job);
1.B树索引:适合insert、update
2.位图索引:适合select(数据量大的数仓使用较多)
----------------------------------------------------------------------------------------------
视图:
----------------------------------------------------------------------------------------------
分布式数据库:
1.物理上被存放在网络上的多个节点上,逻辑上十一号个数据库(整体)。
独立性:不关心如何存储和分割的,只关心数据本身
----------------------------------------------------------------------------------------------