• 门道笔记 (3) Oracle


     

    --排序:
      order by


      当我们写了一个逻辑,这个逻辑已经产生了数据,但是这个数据展示出来的前后关系不是我们想要的,于是需要排序。

      排序是放在最后去做的

      select d.dname,count(e.ename)
      from emp e right join dept d
      on e.deptno=d.deptno
      group by d.dname;

     

      1、升序(asc) 默认,工作中,一般都不写asc
        select d.dname,count(e.ename)
        from emp e right join dept d
        on e.deptno=d.deptno
        group by d.dname
        order by count(e.ename) asc;

     

      2、降序(desc)

        select d.dname,count(e.ename)
        from emp e right join dept d
        on e.deptno=d.deptno
        group by d.dname
        order by count(e.ename) desc;


      3、别名

        select d.dname,count(e.ename) total
        from emp e right join dept d
        on e.deptno=d.deptno
        group by d.dname
        order by total;


      4、位置(工作中没人用,可以忘记)

        select d.dname,count(e.ename) total
        from emp e right join dept d
        on e.deptno=d.deptno
        group by d.dname
        order by 2;

    --***********************
      5、多字段排序

        先按照第一个规则排序,如果在第一个规则下还有相同数据,就接着按照第二个规则排序
        如果在第二个规则下又还有相同,就继续按第三个排序

        select * from emp order by job,deptno desc,sal,comm desc,ename,empno;


    --**请问下面的排序数据展示的效果是否一致


        select * from emp order by empno,ename,sal desc,deptno;
        select * from emp order by empno;

     

    --增删改:
        insert into、update、delete

        执行完后,一定要手动commit或者rollback

     

      insert into--插入数据


      语法:

        insert into 表(字段) values (值);


      insert into dept(deptno,dname,loc) values (50,'测试部','深圳');

    【补充】
      1、如果你要插入是是所有字段,那么可以不写(字段)部分,只写表就行
      注意:工作中几乎不用这个
      请学会复制整列
      insert into dept values (60,'研发部','北京');

      insert into emp
      (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
      values
      ();


      2、可以用别的表的数据进行插入,运维的人喜欢用或以后你做数据准备等可以用

      insert into dept(deptno,dname,loc)
      select empno,ename,job
      from emp
      where deptno=10;

     

      3、面试时,喜欢问你,如果我要批量插入100w数据
      datafactory

     


    --****************************************面试时,最喜欢问更新
    update


    语法:

    update 表
    set 字段=新值[,字段=新值][,..=...]
    where 条件


    update dept
    set dname='凤姐',loc='岗厦'
    where length(deptno)=4;


    【补充】
      1、玩update时特别小心,我的同事和我的学生就因为误操作导致丢了工作

      2、如何规避?

        1、先写select,从而确定数据和条件
        select * from dept where deptno=60;

        2、改写成update
        update dept where deptno=60;
        3、最后写set
        update dept set dname='运维部',loc = null where deptno=60;

     

      delete:

        新人特别容易理解错误:delete是删除表中的数据,并不是去删除表

       语法:
        delete from 表 where 条件

        delete from dept where deptno not in (10,20,30,40);

    【补充】
      1、删除时,先查询确认条件后再改写
      select * from dept where deptno not in (10,20,30,40);

      delete from dept where deptno not in (10,20,30,40);

      2、删除数据,除delete外,还可以用truncate(截断)
      truncate table 表;
      truncate table student;
      3、面试时常问你,truncate和delete的区别?
      delete可以带where条件,可以删除部分数据,属于DML语法,需要提交后才能生效,不会释放表空间,删除数据慢
      truncate不能带where,只能全部删除数据,不属于DML语法,不需要提交,会释放表空间,删除数据快
      4、请举例说明你用truncate的例子?
      日志、记录、备份后常作

     

    【注意】数据库中:
      DQL;数据查询语言 select
      DML:数据操纵语言 insert、update、delete
      DDL:数据定义语言 create、alter、drop

      例子:create table mt_user(
        id number,
        username varchar2(30) not null,
        sex number(1),
        birthday date,
        email varchar2(30),
        remarks varchar2(30),
        did number(4)
        );


      --唯一
        alter table mt_user
        add constraint uk_email unique(email);

      --主键
        alter table mt_user
        add constraint pk_id primary key(id);

      --外键
        alter table mt_user
        add constraint fk_did foreign key(id)
        references dept(deptno);
        --注意这里是说参考哪个表的哪个字段,这个字段一定是这个表的主键

      --约束
        --1、not null 非空
        --2、unique 唯一
        --3、primary key 主键 pk=not null+unique 表都要设定主键,一般是第一个字段设主键,都xxid或id
        --4、foreign key 外键
          --1、要在牵线表中新建一个字段,类型要和参考表一致
          --2、你参考的表的键必须是主键
          --3、写规则语句,主要和唯一以主键的区别写法

    --oracle中的时间函数

      oracle的日期默认格式为:yyyy-mm-dd hh24:mi:ss
      mysql的日期默认格式为:Y-m-d H:i;s


      sysdate--取服务器的系统时间

      select sysdate from dual;


      --例子

        select sysdate-hiredate from emp;

     

    **********************************
      to_char --把时间转成字符串
      当我们要取一个完整时间的某个部分时,采用这个函数

    --例子

      select hiredate,
      to_char(hiredate, 'yyyy') 年,
      to_char(hiredate, 'mm') 月,
      to_char(hiredate, 'dd') 日
      from emp

      --求3号入职的员工

        select ename from emp where to_char(hiredate, 'dd')='03';

     

      --求1981-02入职的员工
        select ename from emp where to_char(hiredate, 'yyyy-mm')='1981-02';

        

        to_date --把字符串转成时间 字符串要“长得像”日期
        --界面中是个字符串,表的类型却是一个日期时使用

     【例子】

      insert into emp(empno,hiredate) values (9999,to_date('2019-02-15','yyyy-mm-dd'));

      insert into emp(empno,hiredate) values (8888,to_date('2019/03/05','yyyy/mm/dd'));

     

      insert into emp(empno,hiredate) values (7777,to_date('03/05/2019','mm/dd/yyyy'));

      insert into emp(empno,hiredate) values (6666,to_date('03/05/2019','dd/mm/yyyy'));

      insert into emp(empno,hiredate) values (5555,to_date('!!!!!!','dd/mm/yyyy'));--长得不像,毫无办法

    【补充】
      日期还有N多玩法,下来自己百度学习,当然你也可以先不管,你工作需要了,再查
      因为你面试时,没有人问你日期如何处理(你又不是开发)

      星期x、公历、农历、时区、window/linux转化、时间戳--1514511419

     

     

     

     

     

    少壮不努力,老大徒伤悲
  • 相关阅读:
    UESTC 250 windy数 数位dp
    hdu 3555 bomb 数位dp
    hdu 2089 不要62 数位dp入门
    poj 3740 Easy Finding 精确匹配
    codeforces 589F. Gourmet and Banquet 二分+网络流
    hdu 3572 Escape 网络流
    hdu 3572 Task Schedule 网络流
    POJ 1823 Hotel 线段树
    2016年,机器学习和人工智能领域有什么重大进展?
    【由浅入深的VR技术之旅】初学VR要解决的三个核心技术问题
  • 原文地址:https://www.cnblogs.com/zsjlovewm/p/10444071.html
Copyright © 2020-2023  润新知