oracle pl/sql学习札记(一) 入门

oracle pl/sql学习笔记(一) 入门
--第一范式:(1NF)无重复的列
--第二范式:(2NF)属性完全依赖于主键
--第三范式:(3NF)属性不依赖于其它非主属性

--修改列
alter table 表名 drop column 列名;
alter table 表名 rename column 列名 to 新列名;
alter table 表名 add (列名 类型);
alter table 表名 modify (列名 类型);

--转移表至其他表空间
alter table 表名 move tablespace 表空间名;


--建表语句里面的子查询
create table 表名 as select * from 表名 where XXX
如果where 1<>1只获取表结构不获取数据

--插入语句中的子查询
insert into 表名 select * from 表名 where XXX

--联合语句
union  union all 并集
intersect        交集
minus            差集
混合运算中,优先级相同

自然连接   natural join
外连接简写(ORACLE专有) where a.xx=b.xx(+) b表为附属表

--层次化查询
select xx from XX start with son_name = XX connect by prior parent_id = son_id;

start with 指定起始条件   connect by 指定获得吓一跳记录的条件

sys_connect_by_path(列名,分隔符)  对起始位置到当前记录之间的结果集进行聚合操作,配合层次化查询使用

例子:
select max(sys_connect_by_path(column_name, '/')) market_path                                                                                    
from tablename                                               
start with column_name = XX                             
connect by prior parent_id = son_id;   --max()获取查出的结果集中排在末位位置的字符串

--二进制转十进制
select bin_to_num(1,1,1,1) from dual;

select sum(data)
  from (select substr('1111', rownum, 1) * power(2, length('1111') - rownum) data
          from dual
        connect by rownum <= length('1111'))

--十进制转二进制
select replace(reverse(max(sys_connect_by_path(mod(floor(15/power(2, rownum-1)), 2), '/'))), '/', '') data
from dual
connect by floor(15/power(2, rownum-1))>=1
order by rownum desc

--批量插入
insert into 表名(列名a,列名b,...) select 列名a,列名b,... ,from 表名 where XXX

--字符型
varchar 可变长度字符  占用空间不固定
char 固定长度字符,占用空间固定,效率较高

lpad()  向左补全