![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
oracle
zEthan
1111
展开
-
oracle中nvl()函数
oracle的nvl函数的用法通过查询获得某个字段的合计值,如果这个值位null将给出一个预设的默认值 select nvl(sum(t.dwxhl),1) from tb_jhde t where zydm=-1 这里关心的nvl的用法,nvl(arg,value)代表如果前面的arg的值为null那么返回的值为后面的value 如: NVL(a,b)就是判断a是否是NULL,如果...原创 2018-03-17 18:15:55 · 1632 阅读 · 0 评论 -
RATIO_TO_REPORT计算总数百分比
数据库如何用Oracle RATIO_TO_REPORT计算总数百分比除报告详细数据外,许多报告中还包括每行总数的百分比。例如,每名客户的订单相对于总订单的百分比,或每位销售代表的销售额相对于总销售额的百分比。传统上,Oracle计算百分比的方法是在总计报告的子查询中使用SUM函数总计报告,然后把那个结果放到细节表中相除来计算百分比。你还可以用一个子查询作为SELECT语句表达式:RATIO_TO...原创 2018-05-21 10:24:49 · 517 阅读 · 0 评论 -
oracle内部嵌套是过滤条件再筛选
SELECT dd.* 2 FROM ( 3 SELECT AI.ADMININFO_ID as a, 4 RI.ROLEINFO_NAME as b, 5 AI.DEL_SIGN 6 FROM ADMININFO AI 7 LEFT JOIN ROLEINFO RI 8 on AI.ROLEINFO_ID = RI.ROLEINFO_ID 9 AND AI.DEL_SIGN =...原创 2018-05-15 14:03:32 · 1410 阅读 · 0 评论 -
left join a on b like而不是=
table A 商品表id cat_ids1 1,2,32 1,23 1table B 分类表cat_id123表结构如上 如要搜索出 b表每个分类 含有多少个商品,应如何编写sql本人想到的是select count(*) as goods_num from b left join a on b.cat_id like 'a.cat_ids' with t1 as ( select 'ab12...原创 2018-05-15 14:21:25 · 7513 阅读 · 0 评论 -
Oracle数据库优化的方法
Oracle数据库优化的方法1、减少访问数据库的次数。2、不要让数据库做得太多。(1)SELECT子句中避免使用' * ':ORACLE在解析的过程中,会将' * '依次转换成所有的列名, 这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。(2)sql语句用大写的:因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行。另外,在java代码中尽量少用连接符“+”连接字符串!...原创 2018-05-26 22:54:30 · 8364 阅读 · 0 评论 -
索引为空是不可以
众所周知,存在空值的列,在谓词中有is null会导致索引失效,因为索引都有保存,你怎么可能通过索引查找数据信息呢?所以,索引大部分情况下创建到主键之中;wid之中;所以is null的选择性还是很强的。那么在该字段上应该有索引,创建一个索引create index IDX_DEPT_FSTANDARDCODE on T_ORG_DEPARTMENT (FSTANDARDCODE)cost:198...原创 2018-05-27 15:46:37 · 8328 阅读 · 0 评论 -
oracle数据库优化表接口原则
表是Oracle数据库中最基本的对象之一。万丈高楼从平地起,这个基础对象对于数据库来说,非常重要。因为其设计是否合理,直接跟数据库的性能相关。从Oracle数据库菜鸟到数据库专家这个过程中,在表设计与管理上,或多或少,会犯一些错误。笔者今天就谈谈自己在这方面的经验与教训,或许能够给大家一些警示作用。 表是Oracle数据库中最基本的对象之一。万丈高楼从平地起,这个基础对象对于数据库来说,非常重要...原创 2018-06-13 16:11:41 · 385 阅读 · 0 评论 -
如何写出高效率的sql语句
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。假如有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交转载 2018-04-24 16:24:50 · 593 阅读 · 0 评论 -
SQL中的优化方法,与SQL内部执行顺序详解
先了解下SQL内部执行顺序 Oracle的解析器按照从右到左的顺序处理SQL中各个环节中的执行顺序;比如; from ; where .......(2)WHERE子句中的连接顺序: Oracle采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。 中.国.站长站(3)SE...原创 2018-06-01 11:29:06 · 512 阅读 · 0 评论 -
SQL中的WHERE,聚合函数,having区别
having子句与where有相似之处但也有区别,都是设定条件的语句。在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count)。简单说来:where子句:select sum(num) as rmb from order where id>10//只有先...原创 2018-06-01 12:35:58 · 3928 阅读 · 0 评论 -
oracle sql 语句中where条件中 1=1
1=1 是永恒成立的,意思无条件的,也就是说在SQL语句里有没有这个1=1都可以。 这个1=1常用于1.应用程序根据用户选择项的不同拼凑where条件时用的。如:web界面查询用户的信息,where默认为1=1,这样用户即使不选择任何条件,sql查询也不会出错。如果用户选择了姓名,那么where变成了where 1=1 and 姓名='用户输入的姓名',如果还选择了其他的条件,就不断在where ...原创 2018-06-01 12:49:29 · 10417 阅读 · 3 评论 -
mybatis与oracle关系
Oracle语言oracle视图 相当于是多表联查根据具体业务编写子查询 再组合起来你要确认,每个函数所实现的效果与功能;Oracle 不管是列,表,都可以通过子查询语句嵌套;嵌套; Mybatis就是ORM关系数据库映射,它把数据库包装成面向对象的模型;采用面向对象编程设计语言,程序不再直接访问底层数据库,而是以面向对象方式来操作持久化对象;ORM框架则将这些面向对象的操作转换成底层的sql操...原创 2018-06-29 14:28:54 · 836 阅读 · 0 评论 -
Oracle数据库表设计时的注意事项
表是Oracle数据库中最基本的对象之一。万丈高楼从平地起,这个基础对象对于数据库来说,非常重要。因为其设计是否合理,直接跟数据库的性能相关。从Oracle数据库菜鸟到数据库专家这个过程中,在表设计与管理上,或多或少,会犯一些错误。笔者今天就谈谈自己在这方面的经验与教训,或许能够给大家一些警示作用。 表是Oracle数据库中最基本的对象之一。万丈高楼从平地起,这个基础对象对于数据库来说,非常重要...原创 2018-06-25 15:12:08 · 735 阅读 · 0 评论 -
oracle数据库设计经验
一、实体与表对应关系表<=>实体,字段<=>属性。 二、表与表的关系(实体间的关系):一对一、一对多、多对多一对一:一条记录只对应其他表中的一条记录有关系学生基本信息表t_student,成绩表t_studentScore含有一个外键studentId。基本信息表中的studentId和成绩表中的studentId就是一对一的关系。一对多:A表一条记录对应B表中多条记录有关...原创 2018-06-26 09:19:08 · 3863 阅读 · 0 评论 -
MAX()KEEP(DENSE_RANK FIRST/LAST) 获取最大值相对应的某个字段,非常非常实用的一个函数
场景在业务数据中可能遇到这样的需求。希望获取部门内年龄最小的人中,工资最高的记录。此时就需要使用KEEP(DENSE_RANK FIRST/LAST)来处理数据了。使用首先构造一下临时数据。[sql] view plain copyWITH workers AS( SELECT 'DOM1' dept, 'zhangsan' names , 23 age, 4000 salaries F...原创 2018-05-18 08:57:02 · 3748 阅读 · 0 评论 -
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR:获取的目标类型与源类型不一致,多出现在case when 语句中,when的结果类型与源类型不一致的情况,如:case u.user_type_id when '1' then '经理' else '普通职员'此时,user_type_id是number类型的,就会报此错误,将w...原创 2018-05-17 16:09:28 · 27838 阅读 · 3 评论 -
sql中的模糊查询 like 和oracle中的instr()函数有同样的查询效果
注:MySQL中的模糊查询 like 和oracle中的instr()函数有同样的查询效果; 如下所示:select * from tableName a where name like '%helloworld%';select * from tableName a where instr(name,'helloworld')>0; --这两条语句的效果是一样的 ...原创 2018-05-11 09:31:32 · 1460 阅读 · 0 评论 -
Oracle错误: ORA-01722 无效数字
1、对于两个类型不匹配(一个数字类型,一个非数字类型,同下)的值进行赋值操作; 2、两个类型不匹配的值进行比较操作(例如,“=”); 3、to_number函数中的值,非数字的,比如,to_number(‘a’)肯定是不行的,to_number(‘12306’)则是正常的。 要避免这些问题,要做到在写sql语句时就好认真处理好不同类型的问题。 比如如果要比较的话,同时都用to_number...原创 2018-04-09 10:32:36 · 1995 阅读 · 0 评论 -
oracle中decode函数的使用
decode的几种用法 1:使用decode判断字符串是否一样 DECODE(value,if1,then1,if2,then2,if3,then3,…,else) 含义为 IF 条件=值1 THEN RETURN(value 1) ELSIF 条件=值2 THEN RETURN(value 2) …… ELSIF 条件=值n THEN RETU...原创 2018-04-02 16:45:40 · 246 阅读 · 0 评论 -
oracle or并集 和and交集
or并集 and交集; 然后串联 合并 但是 AND比OR的优先级高 1.SELECT * FROM cxzjg_across_dept_apply WHERE ( status =’2’OR STATuS= ‘3’) AND user_dept_id=’1005’ ; 2.SELECT * FROM cxzjg_across_dept_apply WHERE use...原创 2018-04-03 16:58:45 · 5610 阅读 · 1 评论 -
oracle中的exists 和 in (ps:查询条件在括号内容值域)
有两个简单例子,以说明 “exists”和“in”的效率问题1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;T1数据量小而T2数据量非常大时,T1<<T2 时,1) 的查询效率高。2) select * from T1 where T1.a in (select T2.a from T...原创 2018-03-28 17:09:37 · 577 阅读 · 0 评论 -
CONCAT()与GROUP_CONCAT(),CONCAT_WS()函数
一、CONCAT()函数 CONCAT()函数用于将多个字符串连接成一个字符串。 使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为 +—-+——–+ | id | name | +—-+——–+ | 1 | BioCyc | +—-+——–+ 1、语法及使用特点: CONCAT(str1,str2,…) 返回结...原创 2018-03-28 17:39:58 · 996 阅读 · 0 评论 -
Mysql中ifNull()/if()/case when用法和Oracle中nvl()/nvl2()/decode()的用法
一、Mysql中ifNull()/if()/case when的用法 IFNULL函数的用法: IFNULL(expr1,expr2),表示若expr1为NULL,则返回expr2,否则返回expr1。IF函数的用法: IF(expr1,expr2,expr3),表示若expr1为TRUE(expr1<>0且expr1<>NULL),则返回expr2,否则...原创 2018-04-04 10:25:29 · 711 阅读 · 0 评论 -
oracle子查询详解
当一个查询结果是另一个查询的条件的时候,那么就称为子查询,子查询是在SQL语句内的另外一条SELECT语句。在SELECT、INSERT、UPDATE或DELETE命令中只要是表达式的地方都可以包含子查询,子查询甚至可以包含在另外一个子查询中,以便完成更为复杂的查询。下面通过一个实例来了解一下子查询。实例 查询部门名称为RESEARCH的员工信息在员原创 2018-04-24 10:37:37 · 2800 阅读 · 0 评论 -
ORACLE WITH AS
语法:with tempName as (select ….) select …例:现在要从1-19中得到11-14。一般的sql如下:select * from ( –模拟生一个20行的数据 SELECT LEVEL AS lv FROM DUAL CONNECT BY LE...原创 2018-04-20 09:44:05 · 100 阅读 · 0 评论 -
nulls first和nulls last
Nulls first和nulls last是Oracle Order by支持的语法 如果Order by 中指定了表达式Nulls first则表示null值的记录将排在最前(不管是asc 还是 desc) 如果Order by 中指定了表达式Nulls last则表示null值的记录将排在最后 (不管是asc 还是 desc) 使用语法如下: –将nulls始终放在最前 selec...原创 2018-04-20 10:33:19 · 6021 阅读 · 0 评论 -
ORA-01791: not a SELECTed expression
Student表有3个字段:id,name,age看这两个SQL语句(1)select name from student order by id;(2)select distinct(name) from student order by id;执行结果你可能会说:第1句返回以id排序的所有name字段第2句返回以id排序的所有不重复的name字段.但是执行结果不是这...原创 2018-04-25 10:36:47 · 492 阅读 · 0 评论 -
oracle 两个时间相减
oracle 两个时间相减默认的是天数oracle 两个时间相减默认的是天数*24 为相差的小时数oracle 两个时间相减默认的是天数*24*60 为相差的分钟数oracle 两个时间相减默认的是天数*24*60*60 为相差的秒数--MONTHS_BETWEEN(date2,date1) 给出date2-date1的月份 SQL> select mo原创 2018-05-10 15:20:35 · 14583 阅读 · 0 评论 -
SQL逻辑查询语句执行顺序
理解sql语句的执行顺序对优化sql非常重要,那么sql语句的执行顺序是怎样的呢,以一条简单的的语句做分析: 这一条语句包含我们经常用到的一些关键字,select,from,where,group by,order by,它的执行顺序如下:先执行from关键字后面的语句,明确数据的来源,它是从哪张表取来的。接着执行where关键字后面的语句,对数据进行筛选。再接着执行group...原创 2018-05-10 11:14:40 · 1787 阅读 · 0 评论 -
oracle中的having子句
oracle中的having子句having子句having子句和group by一起使用,紧跟在group by的后边,having子句可以使用结果集中的列,也可以使用聚合函数(max、min、count、sum、svg)。having的作用是对分组后的结果进行过滤。这里在提一下where,where是对每一行进行过滤的,查询出符合where条件的每一行。having是对查询出结原创 2018-05-10 14:02:25 · 1517 阅读 · 0 评论 -
Oracle索引(Index)创建使用
Oracle对象教程:索引(Index)创建使用,索引:对数据库表中的某些列进行排序,便于提高查询效率。当我们在某本书中查找特定的章节内容时,可以先从书的目录着手,找到该章节所在的页码,然后快速的定位到该页。这种做法的前提是页面编号是有序的。如果页码无序,就只能从第一页开始,一页页的查找了。数据库中索引(Index)的概念与目录的概念非常类似。如果某列出现在查询的条件中,而该列的数据是无序的,查询...原创 2018-06-20 10:42:55 · 8589 阅读 · 0 评论