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>
日进有功