时间:2021-07-01 10:21:17 帮助过:19人阅读
Oracle查询 1.单表查询,同MySQL查询 1)select * from 表名 where name=‘...‘ //oracle中字符串只能使用‘‘ 2)select * from 表明 where like name like ‘%刘%‘ //%表示一个或多个字符,_表示一个字符,否定用not like 3)and or >= <= > < between and 和MySQL一样 4)select * from 表名 where name is null //查找空的值,否定:is not null 5)select distinct name from 表名 //得到的结果为去重后的记录 6)select * from 表名 order by usernum desc //按照usernum逆序排序,asc为顺序 2伪列 //系统会为每一个表生成的列,默认情况下不显示 1)rowid:表中的每一行在数据文件中都有一个物理地址,ROWID 伪列返回的就是该行的物理地址。使用 ROWID 可以快速的定位表中的某一行。 2)rownum:在查询的结果集中,ROWNUM 为结果集中每一行标识一个行号,第一行返回1,第二行返回2,以此类推。 3.聚合函数 1)求和 sum select sum(usenum) from t_account where year=‘2012‘ 2)求平均值 avg 3)最大值 max 最小值 min 4)个数 count 4.分组 group by //如果是分组查询,select后面只能有聚合函数或者用于分组的字段。 select areaid,sum(money) from t_account group by areaid 5.分组后条件查询having :对结果进行筛选 2.多表查询 内连接:select * from 表1,表2 ... where ... 外连接: select * from 表1 left join 表2 on ... //左外连接 select * from 表1 right join 表2 on ... //右外连接 外连接在Oracle中的语法: select * from t1,t2 where t1.id=t2.tiid(+) select * from t1,t2 where t1.id(+)=t2.tiid 3.子查询 //子查询中,如果是一条记录,作为结果相当于一个具体的值,可放再查询条件,结果中 分为单行子查询和多行子查询: //单行子查询返回一条记录,多行子查询返回多条记录 如放在> = 等的后面只能是单行子查询 如放在in any all 后面可以是多行子查询 1)where子查询 //就是将查询结果作为另一个查询的条件 select * from T_ACCOUNT where year=‘2012‘ and month=‘01‘ and usenum> ( select avg(usenum) from T_ACCOUNT where year=‘2012‘ and month=‘01‘ ) 2)from 子查询 //将查询结果作为被查询的表再查询 3)select 子查询 //将查询结果作为另一个查询的结果,此子查询只能是单行子查询 4.分页 1)采用伪列和子查询实现分页 select * from (select rownum r,t.* from T_account)where r>10 and r<=20 2)基于排序的分页 select * from (select rownum r,t.* from (select * from t_account order by usenum) t)where r>10 and r<=20 伪列中rownum的生成原理:每生成一条记录,就生成一个rownum, 所以select rownum,t.* from t_account t order by usenum ,这条语句先生成rownum ,再排序,所以最终的表中rownum为乱序 mysql的分页: select * from table limit 3,5; //表示从第三条开始(从零开始数),查询五条 5函数 数值函数: 四舍五入:ROUND(数值,保留小数位数); 数值截取:TRUNC(数值,保留小数位数); ROUND(100.567,2)=100.57 TRUNC(100.567,2)=100.56 日期函数: ADD_MONTHS(日期,值) :增加指定的月 last_day(sysdate) :求所在月的最后一天 tranc(sysdate,‘mm‘) :日期截取,丢掉月份后面的数据 转换函数: select TO_CHAR(1024) from dual :数字转字符串 //其中dual为伪表,用于测试,其中只有一个x的值 to_number(‘100‘) :字符串转数字 to_char(日期,‘yyyy-mm-dd‘) :将日期类型转换成字符串类型 //分钟,用mi表示 to_date(字符串,‘yyyy-mm-dd‘):将字符串类型转换成日期类型; 注意:在mysql中如果添加日期数据,就以字符串的形式添加即可(会自动转化为日期数据),但是在oracle中不行; insert into t_owners values(to_date(‘2018-7-18‘,‘yyyy-mm-dd‘)) 其它函数: 空值处理函数: nvl(maxnum,0) //如果maxnum不为空显示值,为空显示零 nvl2(检测的值,如果不为 null 的值,如果为 null 的值) decode(条件,值 1,翻译值 1,值 2,翻译值 2,...值 n,翻译值 n,缺省值) :【功能】根据条件返回相应值 case //可通过这个函数实现行列转换,使用在select后面 when 条件1 then 条件1成立返回值 when 条件2 then 条件2成立返回值 when 条件3 then 条件3成立返回值 ... else 缺省值 end; //必须要end关键字, 例如: select name,(case when ownertypeid= 1 then ‘居民‘ when ownertypeid= 2 then ‘行政事业‘ when ownertypeid= 3 then ‘商业‘ end ) from T_OWNERS 三种排名方式: rank 相同的值排名相同,排名跳跃 SELECT rank() OVER (ORDER BY USENUM desc) 排名,t.* FROM T_ACCOUNT t; 下面类似 dense_rank 相同的值排名相同,排名连续 row_number 返回连续的排名,无论值是否相等 集合运算: UNION ALL(并集),返回各个查询的所有记录,包括重复记录。 UNION(并集),返回各个查询的所有记录,不包括重复记录。 INTERSECT(交集),返回两个查询共有的记录。 MINUS(差集),返回第一个查询检索出的记录减去第二个查询检索出的记录之 后剩余的记录。 如:select * from t_owners where id<=7 union select * from t_owners where id>=5 分组和排序后面的字段可有多个: select * from t_account group by year,month //year 和 month 均相同才分为一组 order by year,month; //先按year排序,再按月份排序
oracle基本使用
标签:精确 有一个 仅主机模式 独立 dbf code primary size erb