MySQL数据库(4) 多表查询 多表关系 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多对一) 多对多 一对一 一对多 案例: 部门 与 员工的关系 关系: 一个部门对应多个员工,一个员工对应一个部门 实现: 在多的一方建立外键,指向一方的主键 多对多 案例: 学生 与 课程的关系 关系: 一个学生可以选修多门课程,一门课程也可以供多个学生选择 实现: 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键 一对一 案例: 用户 与 用户详情的关系 关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率 实现: 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE) 多表查询就是指从多张表中查询数据 SELECT * FROM goods,category; 笛卡尔乘积现象 表查询中的笛卡尔乘积现象:多行表在查询时,如果定义了无效连接或者漏写了连接条件,就会产生笛卡尔乘积现象,所谓的笛卡尔乘积及时每个表的每一行都和其他表的每一行组合。笛卡尔乘积现象 笛卡尔积: 笛卡尔乘积是指在数学中,两个集合A集合 和 B集合的所有组合情况。 而在多表查询中,我们是需要消除无效的笛卡尔积的,只保留两张表关联部分的数据。 在SQL语句中,如何来去除无效的笛卡尔积呢? 我们可以给多表查询加上连接查询的条件即可。 等值连接查询 通常是在存在主键外键关联关系的表之间的连接进行,使用"="连接相关的表 n个表进行等值连接查询,最少需要n-1个等值条件来约束 -- 查询每个分类的所有商品信息SELECT category.name,goods.name FROM goods,categor...