2.非等值连接
假设两张表没有关联字段
select * from a ,b
where a.id between b.id1 and b.id2
解释说明:拿a 的每一行,去匹配符合b表的条件。
3.自连接
把本身表的当成两张表去使用。
count(1) 统计结果集的行数
特点:
分组前筛选 where 原始表 位置 group by的前面
分组后的筛选 having 分组后的结果 group by 的后面
进阶6
语法:
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
where 筛选条件
group by 分组
having 筛选条件
order by 排序列表
分类:
内连接:inner
外连接:
应用场景:用于查询一个表中有,另一个表中没有的记录
特点:
1.外连接的查询结果为主表中的所有记录
2.如果表中没有和它相匹配的,则显示null
3.外连接查询结果=内连接结果+主表中有而从表没有的记录
4.左外连接,left join左边的是主表
5.右外连接,right join 右边的是主表
5.交换顺序可以实现同样的效果
左外:left outer
右外: right outer
全外:full outer = 内连接的结果+表1中有但表2没有的+表2中有但表1没有的
理解为:两表合并,交集部分去重。
交叉连接:cross 笛卡尔积
内连接
进阶7 子查询
含义:出现在其他语句中的select 语句,,称为子查询或内查询。
外部的查询语句,称为主查询或外查询
分类:
按子查询出现的位置:
select 后面:仅仅标量子查询
from 后面:支持表子查询
where 后面 或 having 后面:标量子查询、列子查询、行子查询
exists 后面(相关子查询):表子查询
按结果集的行列数不同:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行
行子查询(结果集有一行多列)
表子查询(结果集一般为多行多列)