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