一、含义 当查询中涉及到了多个表的字段,需要使用多表连接 select 字段1,字段2 from 表1,表2,...; 笛卡尔乘积:当查询多个表时,没有添加有效的连接条件,导致多个表所有行实现完全连接 如何解决:添加有效的连接条件 二、分类 按年代分类: sql92: 等值 非等值 自连接 也支持一部分外连接(用于oracle、sqlserver,mysql不支持) sql99【推荐使用】 内连接 等值 非等值 自连接 外连接 左外 右外 全外(mysql不支持) 交叉连接 三、SQL92语法 1、等值连接 语法: select 查询列表 from 表1 别名,表2 别名 where 表1.key=表2.key 【and 筛选条件】 【group by 分组字段】 【having 分组后的筛选】 【order by 排序字段】 特点: ① 一般为表起别名 ②多表的顺序可以调换 ③n表连接至少需要n-1个连接条件 ④等值连接的结果是多表的交集部分 2、非等值连接 语法: select 查询列表 from 表1 别名,表2 别名 where 非等值的连接条件 【and 筛选条件】 【group by 分组字段】 【having 分组后的筛选】 【order by 排序字段】 3、自连接 语法: select 查询列表 from 表 别名1,表 别名2 where 等值的连接条件 【and 筛选条件】 【group by 分组字段】 【having 分组后的筛选】 【order by 排序字段】 四、SQL99语法 1、内连接 语法: select 查询列表 from 表1 别名 【inner】 join 表2 别名 on 连接条件 where 筛选条件 group by 分组列表 having 分组后的筛选 order by 排序列表 limit 子句; 特点: ①表的顺序可以调换 ②内连接的结果=多表的交集 ③n表连接至少需要n-1个连接条件 分类: 等值连接 非等值连接 自连接 2、外连接 语法: select 查询列表 from 表1 别名 left|right|full【outer】 join 表2 别名 on 连接条件 where 筛选条件 group by 分组列表 having 分组后的筛选 order by 排序列表 limit 子句; 特点: ①查询的结果=主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null ②left join 左边的就是主表,right join 右边的就是主表 full join 两边都是主表 ③一般用于查询除了交集部分的剩余的不匹配的行 3、交叉连接 语法: select 查询列表 from 表1 别名 cross join 表2 别名; 特点: 类似于笛卡尔乘积