mysql之表的关联关系和多表查询

1、’基本模式有多对一,多对多,一对一。关联的两个基本概念为外键列和参照列

典型的多对一模式,很普遍,如部门表和员工表,即一个部门可以有多个员工。

对于多对多的模式,就需要建立中间表,将其转换为多对一的模式,中间表就是记录路径信息。

  添加外键的基本语句:

ALTER TABEL student ADD  CONSTRAINT fk_id  FOREIGN KEY(gid) REFERENCES grade(id);

  注意主键是添加在表student中的。

  很明显,删除时先删除外键列,再删除参照列。

 2、设计一张单个表不难,难得是设计各个表之间的关联关系,这也是客观世界中对象和对象存在着千丝万缕的联系。这个要绘制模型图来理解。

  基本模式:t1 CROSS JOIN t2,

  t1 INNER JOIN T2 ON ,以及LEFTJOIN 和RIGHT JOIN。

  这些都需要在实践中使用,多练习才行,写一句sql语句:

SELECT A .num,name FROM STUDENT A LEFT JOIN AWARD B ON A.num=B.id WHERE A.num='2017';

  in也可以达到多表查询的效果,但是经过测试,in比join的效率低很多,不知道具体怎么解释。

3、in和exists的使用

  在两个表中使用黑名单过滤,则需要用到exists语句。

 //xml
    <select id="findByIdList" resultMap="BaseResultMap">
        SELECT *
        FROM sys_user
        <where>
            <if test="list!= null and list.size() > 0">
                id IN
                <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        </where>
    </select>

    

 

posted @ 2018-02-27 10:34  懂得了才能做一些改变  阅读(808)  评论(0编辑  收藏  举报