• 练习题


    1.select ename as "aa",sal from emp;  //用as关键字,别名用双引

    2.select distinct sal from emp;  //distinct 去掉重复的行

    3.select ename,sal,deptno from emp order by 3 desc,2 desc ; //对数据按照第三列和第二列 从小到大排序

    4.select ename,sal from emp where sal between 1000 and 3000;  //between and  查询某个区间

    5.select ename,sal from emp where sal in (1000,2000,3000);  //当条件有多个的时候,用in

    6.select ename,deptno from emp where ename like 'J%';  //like 运算,%可以匹配零个或多个字符。

    7.select ename,deptno from emp where ename like '_A%';  //这里的_的意思是 第一个字母必须有 是什么无所谓

    8.select ename from emp where ename like '%s_%' escape 's';   //这里的escape 意思是将s 定义为转义字符。我们通常是将 / 作为转义字符

    9.select ename,comm from emp where comm is null;  //用is null 来查询null值的列

    10. not 、and 、 or   //优先级顺序

    -------------------------------------------------------------------------------------------------

    字符操作函数

    大小写操作函数

    lower  //将字符串转换成小写

    upper  //将字符串转换成大写

    initcap  //将字符串转换成首字母大写

    字符串操作函数

    concat  //将两个字符串连接到一起

    length  //求字符串字符的长度(个数)

    lengthb //求字符串字节的长度

    lengthc //求字符串unicode的长度 

    substr  //截取字符串字符的长度

    substrb   //截取字符串字节的长度

    select substr('abcd',m,n)  //m为正数的时候表示从头开始截取,为负数的时候表示从尾部开始截取。n表示截取多少位,不写表示截取到尾部

    instr  //查找字符在字符串中的位置

    select instr('abcad','a',1,2);  //表示从第一个字符开始查找,第二个字符a在字符串中的位置。0表示没有在父串中找到该子串

    trim  //将子串从父串中删除,一般用来删除空格

    select trim(leading 'a' from 'aabbccaa') from dual;  

      leading  //表示从头开始删

      trailing  //表示从尾部开始删

      both  //表示两头都删

    replace  //将子串在父串中替换

    lpad  //左对齐

    rpad  //右对齐

    操作数字的函数

    round(44.98,m)  //四舍五入

    trunc(44.98,m)  //截断,全部舍弃

    以小数点为核心,m为正数,是取小数点后边的数,m为负数,是取小数点前面的数,0表示小数点位

    ceil(44.98)   //直接进位取整

    abs(-44.98)  //取绝对值

    mod(44.98,m)  //对其取余

    日期函数

    元素 结果
    YYYY 用数字表示的完整年份
    YEAR 拼写出的年份(用英文表示)
    RR 显示年份,不显示世纪
    MM 月份的两位数值
    MONTH 月份的完整名称
    MON 月份的三个字母缩写
    DY 一周中某日的三个字母缩写
    DAY 一周中某日的完整名称
    DD 用数字表示的月份中某
    mi
    ss

    select * from nls_session_parameters where parameter='NLS_DATE_FORMAT';  //查看当前日期的显示格式

    alter session set nls_date_format='yyyy/mm/dd:hh24:mi:ss';

    日期之间可以直接相加减

    select months_between(sysdate,hiredate) from dual;  //计算两个日期的月间隔

    select add_months(hiredate,6) from emp;  //给日期加上6个月,只对月有效,年份不可以。

    select next_day(hiredate,'friday') from emp;  //从指定日期算起,下一个Friday是什么时候。

    select last_day(hiredate) from emp;  //计算当月最后一天的日期

    日期的进位和截取

    select round(hiredate,'mm') from emp;  //以月份进位

    select trunc(hiredate,'mm') from emp;  //以月份截取

    数据类型的显式转换

    日期转化为字符串

    select ename,to_char(hiredate,'fmyyyy/mm/dd') from emp;  //fm消除前置的零和空格。

    数字转换为字符串

    元素 结果
    9 代表一位数字
    0 强制显示零,但不会改变结果
    $ 放置一个浮动的美元符号
    L 使用浮动的本地货币符号
    . 显示小数点
    , 显示作为千位指示符的逗号
    G 是千分符
    D 是小数点

    注意:G只能和D一起用  ,只能和.一起使用

    select ename,to_char(sal,'L199,999D000') salary from emp;

    操作数据为null的函数

    nvl(expr1,expr2)  //如果 1 为非空就返回1,如果为空就返回2 

    nvl2(expr1,expr2,expr3)  //如果 1为非空,就返回2,如果 1 为空,返回3

    nullif(expr1,expr2)   //如果1 和 2 相同 就返回空,否则返回 1

    coalesce(expr1,expr2)  //返回括号内第一个非空的值

    case 分支函数

    select ename,job,sal,case  //标准case语句
      job when 'SALESMAN' then 1.1 * sal  //这里的when后边不能写大于小于判断条件
      when 'MANAGER' then 1.2 * sal
      else sal end aa
      from emp;

    scott@TEST>select ename,job,sal,case  //不标准格式的case语句
    2 when job='SALESMAN' then sal*1.1
    3 when job='CLERK' then sal*10
    4 when job='MANAGER' then sal*10  //如果条件出现两次 则只执行第一条命令
    5 else sal end aa
    6 from emp;

    decode 函数改写标准的case语句

    scott@TEST>select ename,job,sal,decode
    2 (job,'CLERK',1.1*sal
    3 ,'SALESMAN',1.2*sal
    4 , sal)
    5 from emp;

    select sum(decode(to_char(hiredate,'yyyy'),'1980',1,0)) "1980"

        sum(decode(to_char(hiredate,'yyyy'),'1981',1,0)) "1981"

        sum(decode(to_char(hiredate,'yyyy'),'1982',1,0)) "1982"

          sum(decode(to_char(hiredate,'yyyy'),'1983',1,0)) "1983"   from emp;

    分组函数

    avg、sum、max、min、count

    除了count(*)以外,都忽略null值

    如果计算某个列的所有函数,可以这样count(nvl(comm,0))

    group by 分组函数

    如果两个列有相同的条件,可以放在一起分组。比如说 同一个部门,同一个年龄段的,这样就可以放在一起分组

    having 是对条件再次筛选,出现在group by后边

    如果有order by 排序,得放在 group by 子句后边

    表的连接查询

    等值连接:就是两个表有相同的列,当有多个相同的列的时候 要指明连接的列名

    非等值连接:两个表没有相同的列,但是一张表和另一张表的某列有关系,比如工资和工资等级判断。

    外部连接:比如说 有一个部门编号是40,但是雇员表中40号没有雇员,这个时候 40部门就显示不出来,这个时候需要在 雇员表这边加上 + 来显示,在不含信息的一边加上+。注意,包含一个外部连接的条件 不能使用in运算符,或通过or运算符连接另一个条件

    自连接:就是 加个别名访问同一张表

    交叉连接

    自然连接

    使用子句

    完全或双向外部连接

    外部连接的任意连接条件

    子查询

    from子句中的子查询

    查询工资大于本部门平均工资的员工

    select ename,e.deptno,sal from emp e,(select deptno,avg(sal) a from emp group by deptno) b where e.deptno=b.deptno and sal > a;

    相互关联的子查询

    select ename,sal,deptno from emp e where sal > (select deptno,avg(sal) from emp a where a.deptno=e.deptno) ;

    exists 操作

    select ename,empno,mgr from emp e where exists(select 1 from emp where mgr=e.empno);

    all  any

    sal > all(select avg(sal) from emp group by deptno)

  • 相关阅读:
    synergy一个鼠标键盘控制多台电脑
    matlab 画图参考小程序
    基于centos7的真实机环境下安装 vmware workstastion
    mapreduce运行原理及YARN
    mybatis_resultMap(2)
    (第6天)mybatis_resultMap(1)
    mybatis动态SQL--传入参数为集合,数组类型
    mybatis动态SQL--Trim --Where
    mybatis动态SQL--if--choose
    (第5天)mybatis接口方法入参类型
  • 原文地址:https://www.cnblogs.com/sangmu/p/6880716.html
Copyright © 2020-2023  润新知