通过不同表中具有相同意义的关键字段,将多个表进行连接,查询不同表中的字段信息
连接方式
内连接和外连接(左连接和右连接)
多表连接的结果通过三个属性决定
• 方向性:在外连接中写在前边的表为左表、写在后边的表为右表
• 主附关系:主表要出所有的数据范围,附表与主表无匹配项时标记为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 表名;

子查询
一个select语句中包含另一个或多个完整的select语句。
子查询出现的位置
• 出现在where子句中:将子查询返回的结果作为主查询的条件
• 出现在from子句中:将子查询返回的结果作为主查询的一个表
子查询分类
• 标量子查询:返回的结果是一个数据(单行单列)
• 行子查询:返回的结果是一行(单行多列)
• 列子查询:返回的结果是一列(多行单列)
• 表子查询:返回的结果是一张临时表(多行多列)
子查询操作符

