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() 向左补全