• oracle语句总结(一)


    1,建外键

    新建两个表来实现外键的关联。

    create table main_tab

    (

    id number,

    name varchar2(30)

    );

    create table sub_tab

    (

    id number,

    main_id number,

    name varchar2(30)

    );

    这里要设置sub_tab里面的mian_id为外键。设置外键的前提是main_id必须是main_tab的主键。所以要先设置main_tab的主键。代码如下:

    ALTER TABLE main_tab ADD CONSTRAINT pk_main_tab PRIMARY KEY(id);

    这个时候可以在sub_tab中设置外键了。代码如下:

    ALTER TABLE sub_tab ADD CONSTRAINT fk_sub_tab foreign KEY (main_id) references main_tab(id);

    解释下alter table的命令。

    ALTER TABLE sub_tab ADD CONSTRAINT fk_sub_tab foreign KEY (main_id) references main_tab(id); 

    alter table table_name-----------------------意思就是要改动某个表

    add constraint constraint_name-------------意思就是给某个表加约束/限制

    foreign key(column_name)------------------说明是外键的约束,而且是某个column的。

    references table_name(id);------------------指定这个外键是属于哪个表的

     

    那么,如何实现两张表的级连删除呢?

    重新建立PERSON的外键,加上ON DELETE CASCADE选项试一下:

    SQL> alter table person drop CONSTRAINT FK_PERSON1;

    表已更改。

    SQL>ALTER TABLE PERSON ADD (CONSTRAINT FK_PERSON1 FOREIGN KEY (PROFESSION) 
    REFERENCES PERSONPROFESSION (PROFESSIONID) ON DELETE CASCADE);


    表已更改。


    增加外键约束的时候加ON DELETE CASCADE选项目的是可以在子表记录存在的情况下直接删除父表记录,而不用受约束的限制:
    SQL> delete from PERSONPROFESSION;

    已删除 1 行。

    SQL> select PERSONID,PROFESSION from person;

    PERSONID PROFESSION
    ---------- ----------
            10          1

    SQL> select * from PERSONPROFESSION;

    未选定行

    以上可以看出父表记录删除了,子表记录还存在。

    那么在delete语句的末尾加上CASCADE,就可以实现两张表的级删除:

    SQL> delete from PERSONPROFESSION cascade;

    已删除 1 行。

    SQL> select * from person;

    未选定行

    SQL> select * from PERSONPROFESSION;

    未选定行

    2,查询为null的赋值为0 的语句

    isNULL(C.Role, 0)   或者 (case when t2.c is null then 0 else t2.c end)

    距离table1 两列 a b,table2 两列 b,c 
    select t1.*,(case when t2.c is null then 0 else t2.c end) as c
    from table1 t1 left join table2 t2 on(t1.b=t2.b)

    select a.*, isnull(b.value, 0) as value
    from maintable a
    left join lefttable b on a.joinkey = b.joinkey
  • 相关阅读:
    Virtual Earth 添加纽约3D地图
    基于Falsh的Virtual Globe
    再谈共相式GIS和ArcObjects
    World Wind JAVA亮相JavaOne,Google Earth和Virtual Earth最大竞争对手
    Google与斯坦福大学合作 应用Stanley采集3D模型
    ArcObjects,共相式GIS,跨平台?
    《3S 新闻周刊》No.14:从融资到裁员,灵图那些事儿
    NASA将在网上公布Landsat 7卫星数据
    Google街景(Streetside View)启动
    如果访问我的博客,请尽量访问:http://www.3snews.net/?mars
  • 原文地址:https://www.cnblogs.com/manmanlu/p/6288651.html
Copyright © 2020-2023  润新知