• Oracle_day02


    oracle第二天总结
    (1)单表查询(完整语句:select from where group by having order by ) <除了第5点,其他都要求掌握>
       1.select 查询语句
         去重:select distinct deptno,mgr  作用于多列
         别名:select ename (as) "员工姓名",sal 工资 from emp;
         连接: select '员工姓名:' || ename from emp;  concat(,)  
         聚合函数:sum(),max(),min(),avg(),count()
       2.where 过滤语句
         =,!=,>,>=,<=
         not between and 边界 小值在前,大值在后
         and 和or 逻辑运算 从右边往左边执行
         is not null  ??=null 这是错误的写法
         not like==>select * from teacher where teacher_name like '%r_%' escape 'r';  
          in(10,20)  not in(10,20)特别注意要在使用not in 要防止出现null
       3.group by 分组(非聚合函数中的列都要参与group by的分组)
         select 中查询显示列并且为非聚合函数的列都要参与到group by分组中
         select deptno,max(sal) from emp group by deptno;//这里的deptno为非聚合函数的列,所有需要参与到分组中去
         select deptno,job,max(sal) from emp group by deptno,job;//多列分组,首先按照deptno分组,相同的组再按照job分组
         使用having来过滤分组后的结果
       4.order by 排序
         order by deptno,sal desc 多列排序:首先是按照deptno 升序排列,然后按照sal 降序排列
       5.伪列rowid和rownum
         rowid:每一行的物理地址    rownum:每一行排序的序号
         select rowid,rownum,empno,ename from emp;
         ROWID                  ROWNUM      EMPNO ENAME
        ------------------ ---------- ---------- ------
        AAAMfPAAEAAAAAgAAA          1       7369 SMITH
        AAAMfPAAEAAAAAgAAB          2       7499 ALLEN
        AAAMfPAAEAAAAAgAAC          3       7521 WARD
        AAAMfPAAEAAAAAgAAD          4       7566 JONES
        AAAMfPAAEAAAAAgAAE          5       7654 MARTIN
        AAAMfPAAEAAAAAgAAF          6       7698 BLAKE
        AAAMfPAAEAAAAAgAAG          7       7782 CLARK
        AAAMfPAAEAAAAAgAAH          8       7788 SCOTT
        AAAMfPAAEAAAAAgAAI          9       7839 KING
        AAAMfPAAEAAAAAgAAJ         10       7844 TURNER
        AAAMfPAAEAAAAAgAAK         11       7876 ADAMS
    (2)多表查询<掌握多表联合查询和外连接>
        where A.xxx=B.xxx<只要2个表能够建立关联关系,2个表都能够联合查询>
        外连接:全集表和子集表(全集表在哪边,就是哪边连接;(+)是帮助我们子集表)
        sql99标准:
         A  a left  join B b on  a.col1=b.col2  左连接
         A  a right join B b on  a.col1=b.col2  右连接
        orcle:
         A  a , B b where  a.col1(+)=b.col2 右连接
         A  a , B b where  a.col1 =b.col2(+) 左连接
            
        select d.deptno 部门编号,d.dname 部门名称,count(e.empno) 部门总人数 from emp e, dept d  where e.deptno(+)=d.deptno
        group by d.deptno,d.dname order by d.deptno;
    (3)子查询(select的语句嵌套)
        子查询放在哪里?select ,from ,where
        子查询用什么关键字连接?单行子查询使用(=,<>,>,>=,<,<=),多行子查询使用单行运算符和(in(),any(),all())
        子查询和主查询执行顺序?一般首先执行子查询,相关子查询首先执行主查询;

    (4)分页查询<掌握>
        一张表不经过任何操作默认带有rownum行号,经过排序操作之后,该行号也随着排序了,但不是从1-2-3排序的
       为了重新按照1-2-3排序,需要将参与排列的表放入from中构成一张新的表;新表的顺序是按照1-2-3排序的
       rownum 不能直接rownum>1,但是可以使用rownum<6
       为了使用rownum>1,我们把rownum当成列来使用而不是行号;
        select * from (select rownum rm,e1.* from (select rownum,e.* from emp e order by sal desc)
        e1  where rownum<8 ) e2 where rm>2;
    (5)函数
       字符函数
        length(),concat(),substr(),trim()
       数值函数
           round() trunc()
           select round(45.926,2) 一,round(45.926,1) 二,round(45.926,0) 三,round(45.926,-1) 四,round(45.926,-2) 五 from dual;
           select trunc(45.926,2) 一,trunc(45.926,1) 二,trunc(45.926,0) 三,trunc(45.926,-1) 四,trunc(45.926,-2) 五 from dual;
       日期函数
           sysdate  systimestamp
           next_day(,'星期一')
           last_day()
           trunc()
       查看并修改oracle默认日期格式:
           select * from v$nls_parameters;
           alter sessin|system set NLS_DATE_FORMATE=’yy-mm-dd’;
       转换函数
           to_char() 可以转换成日期或者指定格式
           to_number() 字符串转换成数字
           to_date() 字符串转换日期
    (6)其他函数
       关于null的函数:
           nvl(a,b)    a为null,则返回b
           nvl2(a,b,c) a为null,则返回c,否则返回b
           nullif(a,b) a=b,则返回null,否则返回a
       条件语句函数
           case when then else end
           decode(ename,'',,,,)
       分析排名函数
           rank() over(order by xxx )       相同的值排名相同,排名跳跃
           DENSE_RANK() over(order by xxx)  相同的值排名相同,排名连续
           ROW_NUMBER() over(order by xxx)  连续的排名,无论值是否相等
    (7)集合操作
           union 去重,union all不去重
           集合参与运算(并集,交集,差集)需要每一个集合的列个数和类型要一样;
           order by放在最后;

  • 相关阅读:
    【sqlalchemy】使用正确的DB_URI却报错密码错误-密码中包含特殊符号导致
    为什么只调用了1次函数,但是该函数却被执行了2次呢?
    【flask】使用类组织配置-使用工厂函数创建程序实例
    【python3】configparser读取ini配置文件
    【flask】使用配置类管理app测试环境-demo版
    【flask】flask项目配置 app.config
    【flask】环境配置-python-dotenv的使用
    从pip+requirements.txt+virtualenv管理依赖到使用pipenv管理依赖-修改布署方式
    【MAC】安装chrome浏览器
    【MAC】图片编辑工具-合成图片
  • 原文地址:https://www.cnblogs.com/datapool/p/6943791.html
Copyright © 2020-2023  润新知