zoukankan      html  css  js  c++  java
  • 初识数据库(函数)

    函数

      --单行函数

        --函数: 能够接收参数,完成某些计算,并且返回结果

        --测试表: dual

        select * from dual

      --字符串函数

        --大小写转换函数

        --将 'I Love sql' 转换成大写、小写、首字母大写

        select UPPER('I Love sql'),lower('I Love sql'),initcap('I Love sql') from dual

      --字符串拼接

        -- 将 'I','Love','sql'连接到一起

        select 'I '||'Love '||'sql' from dual

        select concat (concat('I ','Love '),'sql') from dual

      --截取函数: substr(源字符串,m[,n])

        --m : 从源字符串的第几位开始截取

         --n :  从截取开始位置截取几位

        select substr('I Love sql',3,4) from dual

        select substr('I Love sql',-5) from dual

        select substr('I Love sql',-5,3) from dual

      --查询emp表中职位是以'MAN'结尾的员工信息

        select * from emp where substr(job,-3) = 'MAN'

      --查询首字母是'K'的员工信息

        select * from emp where substr(ename,1,1) = 'K'

      --字符串长度函数: length(p1)

        --返回'I Love sql'长度

        select length('I Love sql') from dual

      --返回子串在源字符串中的位置 : instr(源字符串,子串[ , m , [n] ] )

        --m: 从第几位开始查起

        --n:  第几次出现的下标位置

        select instr('I Love sql','L') from dual

        select instr('I Love sqL','L',4,1) from dual

        select instr('I Love sqL','L',1,2) from dual

        instr('192.168.101.123')

      --查询emp表中 员工名字至少含有一个'E'的员工

        select * from emp

        where instr(ename,'E',1,1) != 0

      --填充函数: LPAD() - 左侧填充、RPAD() - 右侧填充

        --LPAD(源字符串,m,子串)、RPAD(源字符串,m,子串)

        select lpad('abc',10,'*') from dual

      --查询员工的工资,1000,显示一个* ,2000,显示两个*

        select ename, lpad('*',sal/1000,'*')

        from emp

      --去掉函数: trim(字符 from 源字符串)

        --将源字符串头尾两端的字符去掉

        select trim('L' from 'LEVEL') from dual  --默认both

        select trim(leading'L' from 'LEVEL') from dual

        select trim(trailing'L' from 'LEVEL') from dual

        select trim(both'L' from 'LEVEL') from dual

      --替换函数

        --replace(源字符串,查找字符串,替换字符串)

        --将源字符串中的所有查找的字符串替换成替换字符串

        --将'I Love sql'中的'sql'替换成oracle

        select replace('I Love sql','ql','oracle') from dual

      --数字函数

        --四舍五入 : round(数据源,位数)

        select round(657.36,1) from dual

        select round(657.36,0) from dual

        select round(657.36,-1) from dual

      --截断函数 : trunc(数据源,位数)

        select trunc(657.32,1) from dual

        select trunc(657.32,-1) from dual

      --取余 mod(m,n)

        select mod(10,3) from dual

      --绝对值 abs(m)

        select abs(-5.2) from dual

      --日期函数

        --sysdate : 返回当前系统的时间,没有参数,不需要括号

        select sysdate from dual

      --months_between(p1,p2) 返回两个日期之前相差多少个月

        --查询emp表中所有员工工作了多少个月

        select months_between(sysdate,hiredate) from emp

        select months_between(hiredate,sysdate) from emp

      --计算自己的年龄

        select trunc(months_between(sysdate,'10-2月-1987')/12,2)

        from dual

      --add_months(指定的日期,n) 返回指定日期加 n个月的日期

        --计算emp表中每一个员工转正日期

        select add_months(hiredate,3) from emp

        --注意: 如果给定日期是某个月的最后一天,其结果也是这个月的最后一天

      --返回给定日期后七天内的星期几: next_day(给定日期,'星期几')

        select next_day(sysdate,'星期二') from dual

      --返回给定日期的当月的最后一天

        --last_day(给定日期)

        select last_day(sysdate) from dual

    类型转换

      --隐式转换 

        select * from emp where deptno = '10'

        select * from emp where deptno = 10

      --显式转换

        --可以确保sql语句的正确性

        --利用oracle 给提供的转换函数,把对应的数据类型进行转换

      --to_char(日期|数字, 'fmt') 字符串转换函数

        --查询当前系统的日期,格式2016-03-22,星期二

        select to_char(sysdate,'yyyy-mm-dd dy') from dual

      --查询当前系统的时间,格式 :时间格式 时:分:秒

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

      --查询当前系统时间

        --格式: xxxx年xx月xx日

        select to_char(sysdate,'yyyy"年"mm"月"dd"日"') from dual

      --数字转换成字符串

        --查询员工表中King的工资,格式要求以人民币的格式进行显示

        select to_char(sal,'L99,999.99') from emp where ename = 'KING'

      --查询emp表中在1980年12月17日入职的员工

        select * from emp where hiredate = to_date('1980-12-17','yyyy-mm-dd')

      select to_number('123') from dual

      --空值转换函数

        --1、nvl(p1,p2) 如果p1不为null, 则返回p1, 否则返回p2

          --查询员工表中,员工姓名,工资,年薪

          select ename,sal,sal*12+nvl(comm,0)

          from emp

        --2、nvl2(p1,p2,p3) 如果p1不为null, 则返回p2,否则返回p3

          select ename,sal,sal*12+nvl2(comm,comm,0)

          from emp

        --3、coalesce(p1,p2,p3,p4……) 返回第一个不为null的参数值

          select ename,sal,coalesce(sal+comm,sal,0)*12

          from emp

      --case 表达式

        --语法结构

        case 列 |表达式

         when 值1 then 返回值1

         when 值2 then 返回值2

         when 值3 then 返回值3

         when 值4 then 返回值4

         ... ...

         when 值n then 返回值n

         else 默认返回值

         end

      --需求: 查询员工表中 10部门下的员工信息,要求职位用中文输出

        select ename,job,(case job

            when 'CLERK' then '办事员'

            when 'SALESMAN' then '经理'

            when 'PRESIDENT' then '董事长'

              else '员工'

             end)

        from emp where deptno = '10'

      --decode 表达式

        语法结构

        默认返回值

        --decode(列 |表达式,值1,返回值,值2,返回值……,返回值n)

        select ename,job,decode(job,'CLERK','办事员','SALESMAN','经理','PRESIDENT','董事长','员工')

        from emp where deptno = '10'

    多表查询

      --将多张表联合到一起进行查询

      --需要将表与表连接起来

      --将连接条件写到 from子句后面

      --查询emp表中 员工姓名,部门编号,以及部门名称

        select *

        from emp,dept

      --如果将两张表简单的连接起来,此时会产生笛卡尔积

      --为两张表创建关联字段,给与关联条件

      --关联字段 -> 侠义角度: 两个字段列名相同,数据类型相同,内容都在同一个范围里

      --广义角度: 两个列要有相同的意义

        select * from dept

        select ename,e.deptno

        from emp e,dept d

        where e.deptno = d.deptno

      --多表关联中

        --1、等值连接: 两个表的公共字段用 = 进行连接

        --2、不等值连接: 两个表的公共字段不用 = 进行连接

        --查询 员工姓名、工资、以及工资等级

         select ename, sal,grade

        from emp e,salgrade s

        where e.sal between s.losal and s.hisal

      --查询emp表中部门号 是 30 的员工姓名、工资、部门编号、以及工资等级、部门名称

        select e.ename,e.sal,e.deptno,s.grade,d.dname

        from emp e,dept d,salgrade s

        where e.deptno = d.deptno

        and e.sal between s.losal and s.hisal

        --注意 n个表进行连接时,至少需要 (n-1) 个条件,否则就会出现笛卡尔积

      --3、外连接: 用符号(+)做连接

        --(+)永远写在缺乏表的一端

        --如果要查询哪一张表的信息,对应的另外一张表就是缺乏表

        --查询各部门有哪些员工,即使这些部门没有员工

        select e.empno,e.deptno,d.dname

        from emp e,dept d

        where e.deptno (+)= d.deptno

        order by e.deptno

      --查询员工信息,即使这个员工没有部门

        select e.empno,e.deptno,d.dname

        from emp e,dept d

        where e.deptno = d.deptno(+)

        order by e.deptno

      --4、自连接 : 查询结果和查询条件都需要在同一张表中

        --查询员工表中和SMITH是同一部门的员工,不包含SMITH

        select e1.ename,e1.deptno

        from emp e1,emp e2 

        where e1.deptno = e2.deptno

        and e2.ename = 'SMITH'

        and e1.ename <> 'SMITH'

    SQL99连接语法

      --1、CROSS JOIN : 交叉连接,生成笛卡尔积

        --查询员工表和部门表

        select emp.*,dept.*

        from emp cross join dept

       --2、natural join : 自然连接

        --用于连接两个具有相同列名以及相同类型的表

        --查询员工表和部门表

        select ename,dname

        from emp natural join dept

      --3、using 字节连接,需要写条件

        --查询员工表和部门表

        select *

        from emp join dept using(deptno)

      --4、on 子句连接,指定连接条件

        --查询员工表和部门表

        select *

        from emp join dept on(emp.deptno = dept.deptno)

      --5、left outer join : 左外连接,也称为左连接

        --显示查询结果,左边表的全部,和右边表符合条件的数据

        select *

        from emp left outer join dept

        on(emp.deptno = dept.deptno)

      --6、right outer join : 右外连接,也称为右连接

        --显示查询结果,右边表的全部,和左边表符合条件的数据

        select *

        from emp right outer join dept

        on(emp.deptno = dept.deptno)

      --7、full outer join : 全外连接

        --两个表的数据都显示出来

        select *

        from emp full outer join dept

        on(emp.deptno = dept.deptno)

      --8、inner join : 内连接,两个表中有匹配的数据显示出来

        select *

        from emp inner join dept

        on(emp.deptno = dept.deptno)

  • 相关阅读:
    HTML5 JS 实现浏览器全屏(F11的效果)
    SpringMVC学习笔记之二(SpringMVC高级参数绑定)
    二十三种设计模式总结
    系统开发中使用拦截器校验是否登录并使用MD5对用户登录密码进行加密
    Mybatis学习笔记之二(动态mapper开发和spring-mybatis整合)
    Mybatis学习笔记之一(环境搭建和入门案例介绍)
    Java中clone方法的使用
    列举Java中常用的包、类和接口
    Spring中bean的注入方式
    [ SSH框架 ] Spring框架学习之三(AOP开发和注解的使用)
  • 原文地址:https://www.cnblogs.com/coffeerun/p/5798990.html
Copyright © 2011-2022 走看看