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