一、含义
 当查询中涉及到了多个表的字段,需要使用多表连接
 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 别名;
特点:
 类似于笛卡尔乘积

京公网安备 11010502036488号