SQL语句整理
2016-03-24 15:39
288 查看
字段描述增、删、改
添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….);
删除字段
alter table tablename drop (column);
修改字段
alter table tablename modify (column datatype [default value][null/not null],….);
//修改数据表列的类型
无数据时:ALTER TABLE INV.TRAN_INV_BILL MODIFY SERIALNO VARCHAR2(36)
有数据时:1、INV.TRAN_INV_BILL 表 2、进行修改列 SERIALNO 3、TEMP_ROWNAME临时列
ALTER TABLE INV.TRAN_INV_BILL RENAME COLUMN SERIALNO TO TEMP_ROWNAME;
ALTER TABLE INV.TRAN_INV_BILL ADD SERIALNO VARCHAR2(36);
UPDATE INV.TRAN_INV_BILL SET SERIALNO = CAST(TEMP_ROWNAME AS VARCHAR2(36));
ALTER TABLE INV.TRAN_INV_BILL DROP COLUMN TEMP_ROWNAME
修改表名称语法:
alter table cux.cux_xxx RENAME TO cux_xxx1;
修改表名称语法:
alter table cux.cux_xxx RENAME TO cux_xxx1;
添加主键(联合主键):
constraint PK_tab PRIMARY key (ID1,ID2) --主键(建表语句中写)
alter table tab add constraint pk_tab2 primary key (id1,id2);--建好表后写
新增表修改表名称语法: alter table cux.cux_xxx RENAME TO cux_xxx1;
修改表名称语法:
alter table cux.cux_xxx RENAME TO cux_xxx1;
create table 新表 as select * from 旧表 where rownum < 1;
SQL执行顺序:
1. 先where 后select2. 先where 再group 再having 后select
3. 先where 再group 再having 再select 后order
4. 先join 再where 后select
序列问题
Oracle中一般将自增sequence重置为初始1时,都是删除再重建,这种方式有很多弊端,依赖它的函数和存储过程将失效,需要重新编译。
不过还有种巧妙的方式,不用删除,利用步长参数,先查出sequence的nextval,记住,把递增改为负的
这个值(反过来走),然后再改回来。
假设需要修改的序列名:seq_name*/
1、selectseq_name.nextval from dual; //假设得到结果5656
2、 alter sequenceseq_name increment by -5655; //注意是-(n-1)
3、 selectseq_name.nextval from dual;//再查一遍,走一下,重置为1了
4、 alter sequenceseq_name increment by 1;//还原
//可以写个存储过程,以下是完整的存储过程,然后调用传参即可:
create or replace procedure seq_reset(v_seqname varchar2) as n number(10);
tsql varchar2(100);
begin
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
n:=-(n-1);
tsql:='alter sequence '||v_seqname||' increment by '|| n;
execute immediate tsql;
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
tsql:='alter sequence '||v_seqname||' increment by 1';
execute immediate tsql;
end seq_reset;
获取表从XX条到NN条的数据
查询时加rownum字段(update可以直接当过滤条件使用,查询不可以当过滤条件用)SELECT t1.* FROM (SELECT rownum row_num, t.*
FROM (SELECT * FROM cux.temp_cux_inv_profitloss t
ORDER BY t.serialno) t) t1
WHERE t1.row_num > XX AND t1.row_num <= NN;
修改表名称语法: alter tablecux.cux_xxx RENAME TO cux_xxx1;
相关文章推荐
- MYSQL 模糊查询
- redis window环境下的安装地址
- SQLite数据库框架--FMDB简单介绍
- Redis学习资源
- Oracle附加数据库
- WinXP下如何安装及御载MySQL服务
- 理解Mysql语句:insert 表名 select null 及 select last_insert_id()
- sql 聚合函数
- 数据库sqlite3的使用-ios中引用方法
- postgresql Streaming Replication监控与注意事项
- oracle sql 优化大全
- Oracle SQL性能优化
- 查看sqlserver被锁的表以及如何解锁
- sql截取字符串SUBSTRING
- 查看Oracle性能差的SQL
- sql 导数据一些问题
- oracle函数自己总结
- SQL server表中查询重复的数据
- 在SQLserver中如何获得两个日期相减的天数及日期函数
- SQL中N $ # @的作用