JAVA学习之 表关系、多表查询

数据完整性

    实体完整性

    主键约束

    主键的添加

    方式一:创建表时,在字段类型后添加 primary key;

    create table 表名(字段 字段类型 PRIMARY KEY);

    方式二:创建表的最后,使用primary key(字段)来添加,可以创建联合主键;

    create table 表名(

字段1 字段类型

        字段2 字段类型

PRIMARY KEY (字段)

    );

    方式三:在创建表结束后,使用DDL语句修改主键属性。

    alter table 表名 add constraint primary key(字段);

    alter table 表名 drop primary key;


    唯一约束        特点:值唯一(可以为空)

    create table 表名(字段 字段类型 UNIQUE);


    自动增长列

    特点:自动加1 并且出现过的就不会再出现了

    create table 表名(字段 字段类型 PRIMARY KEY AUTO_INCREMENT);


    域完整性
    限制单元格的数据

    域完整性约束:非空约束(not null),默认值约束(default)


    引用约束(参照物约束)外键约束

    主表和从表有依赖关系,从表依赖主表,这时可以给从表添加一个约束 外键约束

    create table 从表名(
字段 字段类型,
字段 字段类型,
CONSTRAINT 别名 FOREIGN KEY(字段) REFERENCES 主表名(主键)

    );


    创建外键的第二种方式

    alter table 从表名 add constraint 别名 FOREIGN KEY(字段) REFERENCES 主表名(主键);


    删除外键

    alter table 从表 drop foreign key 别名;


    表和表之间的关系:
    一对一,一对多(多对一),多对多。
    多对多的表示需要第三张表,第三张表作为从表,拥有其他两个主表的外键。


    一对一关系(不常用 完全可以写成一张表) 如果考虑查询效率问题,可以对表进行拆分。

    注意:拆分有度 


    合并查询

    UNION取两个表的并集(字段名 类型相同)。

    UNION ALL把两个表的数据合并到一起。


    多表查询
    这样查询会产生笛卡尔积(会产生大量的无用数据)。

    select * from 表1,表2;

    多表查询会产生很多数据冗余,但是可以通过两张表中相同的字段来去除错误数据。


    连接查询(多表查询)
    内连接(INNER 可以省略)

    on后面是去除重复数据的条件

   SELECT 
    * 
    FROM 
    表1
    INNER JOIN 
    表2
    ON 

    约束条件;


    外链接 左外链接 右外链接
    关键词 outer 可以省略
    学生和分数表
    左外链接 以左边的表为主 会查询出左边的表的所有数据

    右外链接反之

    SELECT * FROM 表1 RIGHT JOIN 表2 ON 约束条件;


    自然链接 关键词 natural join
    可以自动匹配两个表中相同字段的值

    要求字段名和类型相同

    SELECT * FROM 表1 NATURAL JOIN 表2;


    子查询(嵌套查询)

    例如:

    SELECT * FROM emp WHERE sal > (
    SELECT sal FROM emp WHERE ename = 'jones');

    SELECT * FROM emp WHERE deptno = (

    SELECT deptno FROM emp WHERE ename = 'SCOTT'

    );

你可能感兴趣的:(JAVA学习之 表关系、多表查询)