多表查询
通过不同表中具有相同意义的关键字段,将多个表进行连接,查询不同表中的字段信息。
连接方式
内连接和外连接(左连接和右连接)
多表连接的结果通过三个属性决定
方向性:在外连接中写在前边的表为左表、写在后边的表为右表
主附关系:主表要出所有的数据范围,附表与主表无匹配项时标记为null,内连接时无主附表之分
对应关系:关键字段中有重复值的表为多表,没有重复值的表为一表
内连接
按照连接条件合并两个表,返回满足条件的行。select 字段1[,…] from 表1[ inner] join 表2 on 表1.key=表2.key;
左连接
结果中除了包括满足连接条件的行外,还包括左表的所有行。select 字段1[,…] from 表1 left join 表2 on 表1.key=表2.key;
右连接
结果中除了包括满足连接条件的行外,还包括右表的所有行。select 字段1[,…] from 表1 right join 表2 on 表1.key=表2.key;
联合查询
把多条select语句的查询结果合并为一个结果集。
• 被合并的结果集的列数、顺序和数据类型必须完全一致
union去重:select 字段1[,字段2,…] from 表名 union select 字段1[,字段2,…] from 表名;
union all不去重: select 字段1[,字段2,…] from 表名 union all select 字段1[,字段2,…] from 表名;
MySQL全连接方法:左连接 union 右连接
SQL执行顺序:FROM -> ON -> JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> UNION -> ORDER BY -> LIMIT
多表连接规则:
确定查询的信息在哪几张表
确定表和表之间的对应关系和主附关系
确定表和表之间的连接条件
一表作为主表可以保证维度的完整性,多表作为主表可以保证度量的准确性。在没有明确表示需要保证维度完整性的情况下,优先保证度量的准确性,所以将度量值所在的表作为主表。度量字段通常存在于多表中,因此通常情况下可以将多表作为主表进行外连接。
多表连接查询:
先对第一个和第二个表按照两表连接查询,然后用用连接后的虚拟结果集和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一张虚拟结果集,然后根据where条件过滤虚拟结果集中的记录,再根据select指定的列返回查询结果。








暂无数据