门道笔记 (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(did)
    references dept(deptno);
    --注意这里是说参考哪个表的哪个字段,这个字段一定是这个表的主键

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

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/zsjlovewm/p/10444071.html