Oracle05

s_emp s_dept

first_name  名                        id    部门编号       

salary    月薪                      name  部门名             

dept_id    部门编号              region_id 地区编号

1.按照部门编号分组 统计每个部门的平均工资  显示平均工资小于1400 的

  最终显示 部门编号  和 平均工资

2.按照部门编号分组 统计每个部门的人数  并且要显示部门名

最终显示  部门编号  人数    部门名 

3.建立一张表  叫 myorder表    有如下字段

  id    number    pk

  name  varchar2(30) 

  money  number

  odate  date 

  要求给主键约束 起名字 

4.给第三题建立的表  插入两条数据  数据如下

  1    test1  1000.85  当前时间

  2    test1  100.99    2017-1-18 18:56:35

  注意提交数据

5.写出sql中的五种约束  并写出对应的英文 

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

1.建立一张表  叫 myemp100 

  字段有 id  number  pk        fname  varchar2(30)  uk

  sname  char(30)  nn

  要求建表之前 先删除表    要求按照表名_字段名_约束简称 给约束起名字

  测试约束是否起作用。

  drop    table  myemp100;

  create  table  myemp100(

      id    number    constraint myemp100_id_pk  primary key,

      fname  varchar2(30) constraint myemp100_fname_uk  unique,

      sname  char(30)  constraint  myemp100_sname_nn  not null

  ); 

  insert  into  myemp100 values(1,'a',a);

2.检查约束的  列级约束实现

  drop    table  myemp100;

  然后建立这张表时 加一个  salary 的字段  要求这个字段的值 大于3500

  create  table  myemp100(

      id    number    constraint myemp100_id_pk  primary key,

      fname  varchar2(30) constraint myemp100_fname_uk  unique,

      sname  char(30)  constraint  myemp100_sname_nn  not null,

      salary  number  constraint  myemp100_salary_ck  check(salary > 3500)

  ); 

  insert into  myemp100  values(1,'cc','cc',3501);

  3.主键的表级约束实现

  这是给 id  通过 表级约束加了 主键约束

  create  table  table_cons(

      id    number,

      fname  varchar(30),

      sname  char(30), constraint  table_cons_id_pk  primary key(id)

  );

  表级约束最大的优势 在于 可以完成联合约束 

  create  table  table_cons2(

      id    number,

      fname  varchar(30),

      sname  char(30),constraint  table_cons_idfname_pk  primary key(id,fname)

  );

  4.建立一张表  叫 myemp200 

  字段有 id  number  pk        fname  varchar2(30)  uk

  sname  char(30)            salary  number    ck  要求工资大于 3500

  要求建表之前 先删除表    要求按照表名_字段名_约束简称 给约束起名字 并且这些约束都要使用

表级约束完成。

drop  table  myemp200;

/* 不支持not null 的表级约束实现  */

create table myemp200(

    id    number,

    fname  varchar2(30),

    sname  char(30) constraint  myemp200_sname_nn  not null,

    salary  number,constraint  myemp200_id_pk  primary key(id),

    constraint  myemp200_fname_uk unique(fname),

    constraint  myemp200_salary_ck check(salary>3500)

    );

联合约束的解释:

    id  fname

    1    null

    1    b

    1    b

  create  table  table_cons3(

      id    number,

      fname  varchar(30),

      sname  char(30),constraint  table_cons_idfname_uk  unique(id,fname)

  );         

5.外键约束

  5.1 概念

      外键约束涉及到两张表  一张父表(主表)  一张 子表(从表)

      定义了外键的表 叫 子表

      外键字段的取值  受限于 父表中被引用的字段的取值。

      具体的受限过程是  子表中外键字段的值  要么取NULL 要么 取父表中字段对应的值。

  5.2 具体的语法

  a.建表的顺序

      先建父表  后建子表  除非你先建表 后加外键

  create table  parent100(

      id  number  constraint  parent100_id_pk  primary key,

      name  varchar2(30)

  ); 


  create table  child100(

      id  number  constraint  child100_id_pk  primary key,

      name  varchar2(30),

      fid  number  constraint  child100_fid_fk references  parent100(id)

  );

  b.插入数据

      先插入父表数据  后插入子表数据  除非子表的外键值使用null值

  insert  into child100 values(1,'ca',1);

  ERROR at line 1:

ORA-02291: integrity constraint (SYSTEM.CHILD100_FID_FK) violated - parent key

not found

  insert  into child100 values(1,'ca',null);

  commit;

  insert  into parent100 values(1,'pa');

  insert  into parent100 values(2,'pb');

  commit;

  insert  into child100 values(2,'cb',1);

  insert  into child100 values(3,'cc',1);

  commit;

  c.删除数据?

      先删子表 后删父表  除非使用 级联

  d.删除表

      先删子表  后删父表否则违反外键规定 , 除非使用 cascade constraints

  drop table  parent100;

  ERROR at line 1:

  ORA-02449: unique/primary keys in table referenced by foreign keys

  cascade constraints  意思是 先解除主外键关系  然后删除表就不受外键限制

      这样的好处 可以打破删表的顺序。

  drop  table  parent100 cascade constraints;       

  drop  table  child100 cascade constraints;

  5.3 练习

  建立一张员工表  emp100              一张部门表  dept100

  id  number  pk                  id    number  pk

  name varchar2(30)                name  varchar2(30)

  salary  number                   

  dept_id  number  fk

  要求 给约束起名字  并且 建表之前先删除表

插入如下数据  部门表    1  test1      2    test2  提交数据

            员工表  1  ea  8000  1    2  eb  10000  1    3  ec  12000  1

            4  ed  25000 2    5    ee  32000 2  提交数据

  drop table  dept100 cascade constraints;         

  drop table  emp100 cascade constraints;

  create  table dept100(

      id  number  constraint dept100_id_pk  primary key,

      name varchar2(30)

  );

  insert into dept100 values(1,'test1');

  insert into dept100 values(2,'test2');

  commit;

  create table  emp100(

      id  number  constraint emp100_id_pk primary key,

      name  varchar2(30),

      salary  number,

      dept_id  number  constraint emp100_dept_id_fk references dept100(id)

  );

  insert into emp100 values(1,'ea',8000,1);

  insert into emp100 values(2,'eb',10000,1);

  insert into emp100 values(3,'ec',12000,1);

  insert into emp100 values(4,'ed',25000,2);

  insert into emp100 values(5,'ee',32000,2);

  commit;         


  5.4 级联

  on delete  cascade    级联删除

  on delete  set  null  级联置空

  上面关键字 加在外键上 

  drop table  dept100 cascade constraints;         

  drop table  emp100 cascade constraints;

  create  table dept100(

      id  number  constraint dept100_id_pk  primary key,

      name varchar2(30)

  );

  insert into dept100 values(1,'test1');

  insert into dept100 values(2,'test2');

  commit;

  create table  emp100(

      id  number  constraint emp100_id_pk primary key,

      name  varchar2(30),

      salary  number,

      dept_id  number  constraint emp100_dept_id_fk references dept100(id)

      on delete set null

  );

  insert into emp100 values(1,'ea',8000,1);

  insert into emp100 values(2,'eb',10000,1);

  insert into emp100 values(3,'ec',12000,1);

  insert into emp100 values(4,'ed',25000,2);

  insert into emp100 values(5,'ee',32000,2);

  commit;         


  5.5 外键的表级约束实现

  drop table  dept100 cascade constraints;         

  drop table  emp100 cascade constraints;

  create  table dept100(

      id  number  constraint dept100_id_pk  primary key,

      name varchar2(30)

  );


  create table  emp100(

      id  number  constraint emp100_id_pk primary key,

      name  varchar2(30),

      salary  number,

      dept_id  number,constraint emp100_dept_id_fk foreign key(dept_id)

      references dept100(id) on delete set null

  );

  5.6 先建表 后加外键

  drop table  dept100 cascade constraints;         

  drop table  emp100 cascade constraints;

  create  table dept100(

      id  number  constraint dept100_id_pk  primary key,

      name varchar2(30)

  );

  create table  emp100(

      id  number  constraint emp100_id_pk primary key,

      name  varchar2(30),

      salary  number,

      dept_id  number

  );

  alter table emp100  add constraint emp100_dept_id_fk foreign key(dept_id)

      references dept100(id); 

  alter table emp100  disable constraint emp100_dept_id_fk;


  6.数据库中的其它对象

    6.1 序列  sequence

    6.1.1 作用

        用来产生数据库表的主键值

    6.1.2 语法

    create sequence  序列名;

        在需要主键值的地方 使用  序列名.nextval

        偶尔使用  序列名.currval 

    6.1.3 举例

    create  Table  testseq(

        id  number  constraint  testseq_id_pk  primary key,

        name  varchar2(30)

    );

    create  sequence  testseq_id_seq;

    insert  into testseq values(testseq_id_seq.nextval,

      'test'||testseq_id_seq.currval);

    6.1.4  删除序列

    drop  sequence  序列名;

    drop  sequence  testseq_id_seq;

    6.1.5  复杂的序列

        可以设置 起始值  最大值  最小值  �i进  缓存 等待

    CREATE SEQUENCE s_customer_id

  MINVALUE 1

  MAXVALUE 9999999

  INCREMENT BY 1

  START WITH 216

  NOCACHE

  NOORDER

  NOCYCLE;


  6.2 索引  index    dba  (了解)

  6.2.1  作用

      为了加速查询的

  3亿        不使用索引        500s

                    使用索引            0.01s

  6.2.2  如何实现的

      底层通过树状结构  通过消耗大量的空间  和  时间 来达到加速查询的目的。

  6.2.3  语法

  create  index  索引名  on  表名(字段名);

      注意不要在唯一性字段上 建立索引  因为系统已经自动建立过了。                       

  set timing on;

  create index  s_emp_first_name_ind on s_emp(first_name);

  6.2.4  删除所有

  drop  index  索引名;

  6.3 视图  view  (了解)

  6.3.1  view 本质

  view 的本质就是一条sql,所以相对于它对应的数据而言  视图本身的空间可以忽略。

  6.3.2  语法

  create  or replace  view  视图名  as  select语句;

  create  or replace  view  myview  as  select id,first_name name,salary

      from  s_emp;

  6.3.3 作用

      可以对同一份物理数据  作出不同的表现  起到权限控制的作用

      它可以简化子查询   

  7.Oracle 中的 分页

      根据谁来取?  id?(可能不连续  没有规律)

    oracle  rownum  伪列 

    mysql  limit  m,n


    select  rownum,first_name,salary from  s_emp;

        一页显示 11 条  要第一页

    select  rownum,first_name,salary from  s_emp  where rownum < 12; 

        一页显示 11 条  要第二页    因为rownum  碰到 第一条不满足条件的数据就停止查找 

    导致这个查询 没有结果

    select  rownum,first_name,salary from  s_emp 

        where rownum < 23 and  rownum>11;


  select r,first_name,salary from (select  rownum r,first_name,salary from  s_emp 

        where rownum < 23) where r>11;

      按照工资排序  一页显示 11 条数据  显示 第二页数据 

      先排序  还是先编号?

  select first_name,salary from (

  select rownum r,first_name,salary from

  (select  first_name,salary from s_emp  order by salary)where rownum < 23

  )where r > 11;

  最内层:负责排序 

  中间层:负责编号  和 起别名 部分过滤

最外层:负责使用别名 过滤 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容

  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,077评论 0 0
  • 第一天 7月13日OCP笔记: Oracle Ocp11g准备资料: OracleFundmentals 书 管理...
    fjxCode阅读 2,813评论 0 4
  • 系统用户: 1.sys system(sys权限最高) 2.sysman(操作企业管理器) 密码是安装的时候输入的...
    3hours阅读 1,560评论 0 0
  • 杰克韦尔奇曾经说过:衡量一家公司稳健性有三个指标,分别是现金流、客户忠诚度、员工敬业度。前两个指标直接与公司效益正...
    Blissyuan阅读 1,659评论 0 4
  • 古风刮出丹霞地,红土绿草白云飘。 五岳不如丹霞俊,黄河长江拜下风。 士兵整齐有气势,将军指点万军马。 敢问谁有此殊...
    懒猫鳶阅读 176评论 0 1