美文网首页
04_oracle查询

04_oracle查询

作者: lww文 | 来源:发表于2019-08-23 16:10 被阅读0次

===============单行函数 多行函数 单行函数:

作用于一行 返回一个值 多汗函数:

作用于多行 返回一个值

(1)字符函数

接收字符输入返回字符或者数值,dual 是伪表

1.1: 把小写的字符转换成大的字符

upper('yes')

select  upper('yes')  from dual

1.2;把大写的字符转换成小写的字符

lower('YES')

select lower('YES') from dual

数值函数

 1. 四舍五入函数:

ROUND()默认情况下 ROUND 四舍五入取整,可以自己指定保留的位数。

select round(56.16,2) from dual

select trunc(56.16,-1)  from dual   直接截取

select mod(10,3) from dual  求余数

.日期函数

Oracle 中提供了很多和日期相关的函数,包括日期的加减,在日期加减时有一些规律

日期 – 数字 = 日期

日期 + 数字 = 日期

 日期 – 日期 = 数字

范例:查询emp中所有员工入职距离现在几天

select sysdate-e.hiredate from emp e;

算出明天刺客

select sysdate  +1 from dual

查询出emp中所有员工入职距离现在几月

select months_between(sysdate,e.hiredate) from emp e;

查询出emp中所有员工入职距离现在几年

select months_between(sysdate,e.hiredate) /12 from emp e;

查询出emp中所有员工入职距离现在几周

select  (sysdate-e.hiredate) /7 from  emp e;

转换函数

TO_CHAR:字符串转换函数

拆分时需要使用通配符

年:y, 年是四位使用 yyyy

月:m, 月是两位使用 mm

日:d, 日是两位使用 dd

select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual

2019-08-23 03:18:35

select to_char(sysdate,'fm  yyyy-mm-dd hh:mi:ss') from dual

2019-8-23 3:19:19

select to_char(sysdate,'fm yyyy-mm-dd hh24:mi:ss') from dual

2019-8-23 15:19:40

  TO_DATE:日期转换函数

TO_DATE 可以把字符串的数据转换成日期类型

select to_date('1994-05-14','yyyy-mm-dd' ) from dual    ----1994/5/14

通用函数

nvl

计算emp员工公年薪

select sal*12 + nvl(comm,0) from emp

Decode 函数

1;case when

select  条件,

case  条件

when  条件1     then  赋值1

when  条件2     then  赋值2

--else  赋值3

end

from 表;

select emp.ename,

case emp.ename

when 'SMITH' then '1'

when 'allen' then '2'

--else '3'

end

from emp;

Decode 函数

该函数类似 if....else if...esle

语法:DECODE(col/expression, [search1,result1],[search2, result2]....[default])

Col/expression:列名或表达式

Search1,search2...:用于比较的条件

Result1, result2...:返回值

如果 col/expression 和 Searchi 匹配就返回 resulti,否则返回 default 的默认值

select decode(emp.ename,'SMITH','aa','ALLEN','BB')     from emp

运行结果 设置列的别 名

select decode(emp.ename,'SMITH','aa','ALLEN','BB')   name  from emp

select decode(emp.ename,'SMITH','aa','ALLEN','BB')   "name"  from emp

oracle 除了起别名  都用单引号  别名起在from 之前

==================多行函数

统计记录数 count()

select count(1) from emp 

最小值查询 min()

select min(条件)  from 表  例如: select min(sal)  from emp

最大值查询 max()

select max(条件)  from 表  例如: select max(sal)  from emp

查询平均值 avg()

select avg(条件)  from 表  例如: select avg(sal)  from emp

求和函数 sum()

select sum(条件)  from 表  例如: select sum(sal)  from emp

=================分组查询

分组统计需要使用 GROUP BY 来分组

 语法:SELECT   */列名   条件    from  表名字  (表名字后面也可以加where 条件) GROUP BY  分组字段    

分组查询中,出现在group by 后面的原始列,才能出现在select 后面 

没有出现在group by 后面的原始列,想在select 后面 必须系上聚合函数

所有条件都不能使用别名  

例如查询每个部门平均工资

select emp.deptno, avg(emp.sal)

from emp

group by emp.deptno

例如查询每个部门平均工资高于2000的

select emp.deptno, avg(emp.sal)

from emp

group by emp.deptno

having avg(emp.sal)>2000

查询每个部门工资高于800的员工的平均值

select emp.deptno ,avg(emp.sal)  

from emp

where  emp.sal >800

group by emp.deptno

whewe 是过滤分组前的数据 having  是过滤分组之后的 数据

表现形式 where 必须在group by前,having在group by后面

========================多表查询

语法: SELECT {DISTINCT} *|列名.. FROM 表名 别名,表名 1 别名

{WHERE 限制条件 ORDER BY 排序字段 ASC|DESC...}

select * from emp ,dept;

等值连接:

两张表中我们发现有一个共同的字段,我们可以使用这个字段来做限制条件,两张表的关联查询字段一般是其中一张表的主键,另一张表的

外键。

select * from emp ,dept where emp.deptno = dept. deptno

内连接

select * from emp  inner join dept on emp.deptno = dept.deptno

外连接  {左连接 和有=右连接}

查询所有部门以及部门下的员工信息

select  * from emp right join  dept on  emp.deptno = dept.deptno

查询所有员工信息,以及所属不么

select  * from emp left join  dept on  emp.deptno = dept.deptno

oracle 专用外连接

select * from emp ,dept where emp.deptno(+) = dept. deptno

自连接

====查询员工姓名和 员工l领导姓名

select   e1.ename ,e2.ename

from    emp e1, emp e2

where  e1.mgr = e2.empno

====查询员工姓名和 员工姓名  员工领导姓名和 员工领导部门姓名

select e1.ename ,d1.dname, e2.ename, d2.dname

from    emp e1, emp e2 ,dept d1,dept d2

where e1.mgr = e2.empno

and e1.deptno = d1.deptno

and e2.deptno = d2.deptno

===============子查询

子查询:在一个查询的内部还包括另一个查询,则此查询称为子查询。

子查询在操作中有三类:

单列子查询:返回的结果是一列的一个内容

单行子查询:返回多个列,有可能是一个完整的记录

多行子查询:返回多条记录

====================Rownum与分页查询

ROWNUM:表示行号,实际上此是一个列,但是这个列是一个伪列,此列可以在每张表中出现。

当我们select 操作的时候 没查询出一行记录,就会在该还行上加一个行号  行号从1开始 一次递增不能跳着走

排序操作 影响ROWNUM顺入

如果涉及到排序 但是还要使用ROWNUM 我们可以再次嵌套

ROWNUM行号 不能写上大大于一个正数

select rownum,t.*from(select rownum, e.* from emp e order by e.sal desc) t

emp 表员工倒叙排列后 每页5条数据查询第二页

    select * from(

   select  rownum rn , e. * from (

                    select * from emp order by  sal desc

  )e  where rownum < 11 

)  where rn>5 

=========

第一种写法:

select *

from (select rownum rm, a.* from (select * from emp) a where rownum < 11) b where b.rm >

5

第二种写法:

select *

from (select rownum r ,emp.* from emp) b

where b.r >5 and b.r <11

相关文章

  • 04_oracle查询

    ===============单行函数 多行函数 单行函数: 作用于一行 返回一个值 多汗函数: 作用于多行 返回...

  • 需求查询

    需求查询需求查询需求查询需求查询需求查询需求查询需求查询

  • DML-数据操纵语言

    一、查询 查询指定列 查询所有列 取消相同取值的行 比较查询 多重条件查询 范围查询 集合查询 匹配查询 空值查询...

  • ThinkPHP查询

    查询方式 表达式查询 快捷查询 区间查询 组合查询 统计查询 动态查询 SQL查询 ThikPHP支持原生SQL查...

  • Access查询有哪些

    Access查询有哪些 Access查询分选择查询追加查询更新查询生成表查询交叉表查询联合查询等

  • hibernate中的查询

    HQL 查询所有 条件查询 分页查询 Criteria 查询所有 条件查询 分页查询 查询总记录 原生SQL

  • SQL查询语句1

    复杂查询 = 简单查询 + 限定查询 + 查询排序 + 多表查询 + 分组统计查询 + 子查询。 面对所有的复杂查...

  • mysql数据库中的多表关联查询

    条件查询 查询全部 查询单独信息 条件查询(有范围) 模糊查询 (like) 排序(order by) 查询我们...

  • 11django模型[条件查询]

    字段查询查询mysql数据库日志条件查询1) 查询等2) 模糊查询3) 空查询4) 范围查询5) 比较查询6) 日...

  • Oracel_子查询

    SQL子查询 子查询语法 子查询 (内查询) 在主查询之前一次执行完成。 子查询的结果被主查询(外查询)使用 。 ...

网友评论

      本文标题:04_oracle查询

      本文链接:https://www.haomeiwen.com/subject/fsctectx.html