zoukankan      html  css  js  c++  java
  • 38.oracle开篇

      先不聊技术,咱先闷骚一下。刚看完“解忧杂货店”的第二章“深夜的口琴声”,这一章勾起了我万千思绪,小说毕竟是小说,可能与现实不符,但能引发思考,反应一个普遍问题就是好小说。看到一半我还特意去酷狗上搜了一下有没有“深夜里的口琴声”里的“重生”这首歌,结果意料之中。我也在怀疑,我一直以来的那些想法是不是我的执念,就说“架构师”这事情,在大学校园里就为自己立了一个目标,在毕业后5年内达到架构师的水准,在一个大型技术型公司里能够独当一面,扛起担子,带领大家“干大事”;眼看现在时间快四年了,到2018年6月21日,工作满5年,回头看看自己的水平,远不及当初所想。假如当初克朗接受现实,回到家乡继承父业,把音乐当做一个爱好,会不会也生活得很悠闲?那这种情况下他的音乐会不会被现实中的琐事湮灭?但是按照小说里的情节,他也免不了最终的悲剧,即使是没有那场意外;因为他所定义的那种“实现梦想的人”毕竟是少数,虽然小芹的成名曲也是“重生”,但在章节开始,一个音乐评论家就说过:“歌唱得跟你一样好的人多的是,如果你的声音很有特色,自然另当别论,但你没有”;显然小芹的出名并不完全因为“重生”。看完这章,我的收获是,定个目标,但去除执念,一切慢慢来,顺其自然,但也不能发生“音乐被现实中的琐事湮灭”这种事情,毕竟“梦想是要有的,万一实现了呢!”。至于架构师呢,时间不变,等2018年6月21日回头看看自己的成效吧。以后的“架构师养成”这一标签的中的所有博客标题去掉前缀“架构师养成记--”,但还会放到“架构师养成”这一标签中。

       oracle很久之前就学过,工作中一直在用,但是都比较浅显。这次借着“架构师养成”把oracle再梳理一遍,包括最最基础的sql语句,不嫌麻烦,慢慢来。

      登录system 设置scott账户

      ALTER USER scott account unlock

      ALTER USER scott identified by orcl

    一、sql基础

     1、数据库语言分类

    数据操作语言:DML (data manipulation language)

      select insert update delete merge

    数据定义语言:DDL (data definition language)

      create alter drop turncate

    事务控制语言:TCL (transaction control language)

      commit rollback savepoint

    数据控制语言:DCL (data control language) 权限相关的

      grant revoke

    对于oracle,DML操作会产生undo和lock(除了select)

    2.数据类型

      包含 字符、数值、日期、大对象

    • char 固定字符,最大长度2000
    • varchar2 可变长,最长4000,最小1
    • number
    • date timestamp
    • clob(存储单字节数据,文本数据)
    • blob(存储二进制数据)

    3.常用函数

      date char number三种类型相互之间转换

    • to_timestamp('2017-03-19 21:58:12.08','YYYY-MM-DD HH24:MI:SS.FF');对应mysql中的函数 str_to_date('2008-4-2 15:3:28','%Y-%m-%d %H:%i:%s')
    • to_date('2017-03-19','YYYY-MM-DD')
    • to_char(sysdate,'YYYY-MM-DD')
    • to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS.FF');mysql中对应的函数是date_format(time, '%Y%m%d%H%i%s')
    • to_number(replace(to_char(sysdate,'YYYY-MM-DD'),'-'))

    时间与字符串之间转换的详细用法可以参考博客:

    http://www.cnblogs.com/reborter/archive/2008/11/28/1343195.html

    • decode函数 decode(deptno,10,'部门1',20,'部门2','部门3'); mysql中没有decode
    • case表达式 case when deptno=10 then '部门1' when deptno=20 then '部门2' else '部门3' end 或者使用 case deptno when 10 then '部门1' else '部门3' end 这种格式;mysql中也有对应表达式,mysql中海油if函数可实现类似功能。
    • trunc
    • add_months
    • month_between
    • last_day
    • replace
    • substr
    • concat
    • abs
    • round

     4.分组

    组函数 sum min max avg count

    分组特性 group by ... having

    翻译题:

    1.查询每个部门的平均薪水之后显示部门平均薪水大于2000的部门编号和其平均薪水

     select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;

    2查询每个部门的薪水和,在算出所有部门薪水平均值

     select sum(sal) as total,avg(sal) as average from emp group by deptno;

    5.几种连接

    • 交叉连接
    • 等值连接、非等值连接
    • 内连接

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

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

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

    • 外链接(左外,右外,全连接)

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

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

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

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

    • 自连接  
    • 自然连接(隐含连接条件,自动匹配连接)

        很少用,就是两张表字段名和字段类型完全相同,oracle就自动连接。相当于一种内连接

        select * from dept natural  join emp 也就相当于 select * from dept,emp where dept.deptno = emp.deptno

    • 集合运算

        union(重复记录只返回一条)

        union all(显示所有记录)

        intersect(显示公司的数据部分)

        minus(集合相减,那个表在前面以那个表数据为主)

    6.子查询

    • 非关联子查询:select * from emp where emp.deptno = (select deptno from dept where dept.deptno=10)
    • 关联子查询:select emp.ename,(select dept.dname from dept where dept.deptno=emp.deptno) as deptname from emp
    • in和exists。in是做全表扫描;exists是做是否存在,非全表扫描。

    7.rownum的使用

    只有用小于才能查到结果,使用大于没有结果。使用别名的形式查询,大于才有结果。

    select * from (select emp.*,rownum as rn from emp ) where rn > 5;

    select * from (select emp.*,rownum as rn from emp ) where rn between 5 and 10;

    要注意的是,使用between and 是包含的。

    这一篇就先这样了,都是一些基础的东西,不要嫌烦,再看一遍总有点收获。其他的像存储过程,函数什么的,就不多介绍了,都类似上面这些基础的东西,应该很熟练。

  • 相关阅读:
    npx 是什么?
    JavaScript 的内置对象和浏览器对象
    JS构造函数new的过程
    git 设置和取消代理
    npm配置镜像、设置代理
    SQL 注入攻击案例
    javascript:void(0);的含义以及使用场景
    让所有网页图片跳起舞来的代码
    针对Web的攻击技术
    网站常见的鉴权认证方式有哪几种?
  • 原文地址:https://www.cnblogs.com/sigm/p/6582031.html
Copyright © 2011-2022 走看看