Oracle_一点整理
来源:互联网 发布:智多星项目造价软件 编辑:程序博客网 时间:2024/05/21 23:32
--Oracle 多用户,权限细--查看表结构-- 在command window窗口 desc tableName--或 右击表名——> descirbe--选中,按F8执行/* 注意:在增删改是必须要使用commit*/--Oracle没有数据库,是表空间--不区分大小写,以分号结束--先powerdesign建模,再自动生成sql/*select 聚合列,非聚合列 from tableName .... group by 非聚合列 ....语法:在查询字段中若同时存在聚合列和非聚合列,必须使用group by ,它的后面跟非聚合列select max(source), ename from employee group by ename*//*子查询:相关子查询:里面的查询语句要用到外面的查询结果执行顺序,先父查询(外面)再将结果给子查询调用非相关子查询:单独把里面的查询语句提出来也可以执行*//*同义词synonym (类似于servlet-mapping),一般 syn_tableNameoperation:File ——> new ——> synonym大型项目一般有几百张表,每张表都要设定一个同义词所有的代码都是操作同义词核心功能:当修改原始表名时,只需要修改同义词的结构*//*序列sequence ,在Oracle中没有自增长,就是用序列 , 一般 seq_tablNamesqlserver 是作用于哪张表的哪个字段Oracle是作用于表dual是一个虚表,它不能被删除Oracle的语法中必须要有from,所以没表的,就用from dual例: select sysdate会报错,改为 select sysdate from dual;sqlserver中 select 1 ,select getdate()select a 会报错,改为 select 'a' 或 起个别名 select 'a' b*/--nextval 生成一个新值,dual是一个虚表,currval 当前值 SELECT sql_tableName.nextval FROM dual;SELECT sql_tableName.currval FROM dual; --注意第一次使用该句会出错,因为还没有,要先运行一次nextval/*where 与 having的区别where 后面不能用聚合函数having 后面可用聚合函数关于exit....where exits (select * from tableName)exits 与 查询的字段(select *)无关,只要符合语法就行在insert语句中使用子查询在delete/update中使用子查询创建用户create user userName identified by passwordexample: create user xiao identified by xiao111*/--关于 daul , rowid(伪列,不用管,会自动生成), rownum--修改一: 虽然我锁定了该表,但 其他人可操作SELECT t.*,ROWID FROM tableName t FOR UPDATE; --注意:必须起个别名,不然会报from错误--修改二:锁定之后,别人不能操作,是独占模式,不可取SELECT * FROM tableName FOR UPDATE;--上述语句执行后,commit 和 rollback 两个图标会高亮,说明还必须手动提交(点commit)--步骤:先解锁(图标),编辑完后点一下对勾,最后点击commitTRUNCATE TABLE bonus;SELECT * FROM bonus;/* 索引也占空间,需要Oracle来维护,一般是业务经理决定哪些字段需要索引 索引是在表中建的, new ——> table 索引 idx_columnName 补充:只要是主键,默认都有索引*/--关于count()SELECT COUNT(1) FROM emp;SELECT COUNT(*) FROM emp;--上述两个效果是一样的,结果是14SELECT COUNT(comm) FROM emp;--结果是4--结论:count(columnName),里面若为字段,只会统计 非null 的记录/*select * from emp where .. group by.. having.. order by..sql的执行顺序from / where / group by / having / select / order by*//*分页SELECT * FROM (SELECT * FROM (SELECT e.*,ROWNUM rn FROM emp e) WHERE rn <= 当前页*每页记录数 )WHERE rn > (当前页-1)*每页记录数*/
select rownum , e.* from emp e;select rownum rn ,e.* from emp e where rownum <5select * from( select rownum rn ,e.* from emp e where rownum <5)where rn >2
--第一步:看看 rownum ,注意必须取别名SELECT e.*,ROWNUM FROM emp e;--升级: 查询前五条记录SELECT * FROM (SELECT e.*,ROWNUM rn FROM emp e)WHERE rn <=5;--或用betweenSELECT * FROM (SELECT e.*,ROWNUM rn FROM emp e)WHERE rn BETWEEN 6 AND 10--不用between做分页,下面这个效率最好,类似于SQL Server 的topSELECT * FROM (SELECT e.*,ROWNUM rn FROM emp e)WHERE rn <= 10--再嵌套一个子查询SELECT * FROM(SELECT e.*,ROWNUM rn FROM emp e)WHERE rn > 5--拼sqlSELECT * FROM (SELECT * FROM (SELECT e.*,ROWNUM rn FROM emp e) WHERE rn <= 10 )WHERE rn > 5--去重--SELECT b.* ,ROWID FROM bonus b;--SELECT b.*,ROWID FROM bonus b FOR UPDATE;--SELECT MAX(ROWID) FROM bonus b WHERE ename = 'aaa' ;DELETE FROM bonus b1 WHERE ROWID !=(SELECT MAX(ROWID) FROM bonus b2 WHERE b2.ename = b1.ename)--若有多个判断去重的条件,就往后加 WHERE b2.ename = b1.ename and b2.job = b1.job and ..-- 关于别名--SELECT empno, sal s FROM emp WHERE s > 2000;会报错,因为where 后面是不能用别名的SELECT empno, sal s FROM emp WHERE sal > 2000;--只有order by 后面才能用别名SELECT empno, sal s FROM emp ORDER BY s DESC;--动态执行5BEGIN EXECUTE IMMEDIATE 'create user xiao identified by xiao111'END;
阅读全文
0 0
- Oracle_一点整理
- oracle_结果集的处理--有道笔记整理
- 数组一点整理
- 《算法心得》一点整理
- IO流一点整理
- 整理一点js知识
- Tomcat一点整理
- 软件数字签名一点基础知识整理
- Mysql 维护的一点整理
- 关于JNI的一点整理
- 字符编码的一点整理
- ORACLE_语言
- Oracle_约束
- oracle_日期
- oracle_三角函数
- ORACLE_触发器
- ORACLE_数据处理
- oracle_视图
- java 线程public void run()中值如何返回
- 基于W3C的javascript的学习笔记总结--学习笔记
- JS小数运算不对
- Linux 查看进程、关闭进程
- Handler基本使用(二)new Message 、 Handler.obtainMessage和Message.obtain
- Oracle_一点整理
- 文山湖畔
- 20个编写现代CSS代码的建议
- axios中对cookie的封装
- 9月29日 开始用博客记录我的学习之旅 (产品)
- 用ngrok做内网穿透
- css翻转元素
- runtime的基础学习
- MySQL 获得当前日期时间(以及时间的转换)