zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    如何写出优秀的代码[转载]
    [转载]Java中常用日期功能综合
    JS WebBrowser 实现打印预览
    想成为优秀的技术人员你必须做到的几件事情【转载】
    JS打印
    js阿拉伯数字转中文大写
    从 SQL Server 2005 中处理 XML
    Visual Studio 2005 Express October 2004 CTP完整版本的下载
    Debug和Release的区别
    ASP.NET 中的正则表达式
  • 原文地址:https://www.cnblogs.com/manmanlu/p/6288651.html
Copyright © 2011-2022 走看看